Must have
- Unique (canonical link available)
- URL has to be rfc3986 conform
Good to have
- Deep linking to app
- SEO optimized
- Readable/ meaning full words
ID Replacement
- Original link: https://app.mindsettlers.com/player/gZfHUpJmAMQMSDU8dtIoO8qdyI73 leads to the player page of Jurgen Appelo
- Translated to: https://app.mindsettlers.com/player/jurgen-appelo
Too long urls might be not practical if you have to type it or if you want to read it in the browser location. So shorten an URL might be a good idea.
Example:
- "Set up Ongoing Shared Facilitation of Meetings" (47 characters)
- Translates to: "set-up-ongoing-shared-facilitati" (32 characters)
Maximum length of an URL: The URL has not be not longer than 1855 characters. The maximum size is beyond of readability. See test at the end of this document
Let’s assume assume, that two tracks are named same: “Agility”. So we need 2 different URLs
- First link: https://app.mindsettlers.com/track/agility
- Second link: https://app.mindsettlers.com/track/agility-2
If we have characters that are not allowed in URLs (rfc3986), we need to translate them.
- Example: "Let’s get сложный!"
- Translates to: "lets-get-slozhnyj"
- Schema: https://domain /entity / document-title -consecutive-number
- ID Replacement: Only the ID part gets translated. The rest of the URL stays same.
- All lower case
- Too long name. Names get shortened to 32 characters
- Existing Name. If the generated link already exists, then it get a consecutive number, starting with 2 (number 1, which is the assumed default case, is the link without any number)
- Non rfc3986 characters get translated or are left out
- Good readability if URL schema is well chosen
- This works only with id lookup table
- The CMS allows to change the title of the document. Every change would break existing links. This option seems to be more preferably if the domain is about people names (like linkedin) that don’t change (is only true if you don’t marry too often and change your name ;-)
- URL generator needs to check if an url already exists and then add number. If this process runs twice it has to have a rule what item gets number 2 and what number 3. This must be consistent.
- URL schema can’t be changed once it’s established without breaking old links. Example: when we decide that a guide/scrum could become practice/scrum
- https://app.mindsettlers.com/practice/4kCsx8S2S4sYCSWuIsQ6M6/disney-ideation-method/
- https://stackoverflow.com/questions/47427/why-do-some-websites-add-slugs-to-the-end-of-urls
- https://stackoverflow.com/users/6655076/stackovermat
- Schema https://domain.com /entity /id /generated-document-title
- Choosing a good entity that will probably stays valid is important. Example: If we move all /guides to /practices then this will break old links. When mindsettlers has a certain size this shouldn't happen anymore.
- URL is unique
- No duplicate handling
- URL works also, when it accidentally got shorter as long the ID part stays the same. Cutting off URLs happens accidentally in emails.
- This works with our Android app, since the schema is programatically and not using a lookup table. The feature we want and have implemented is the deep linking
- Title of the document can be renamed. It would break SEO only but the link would still work as long the
- This is not less SEO effective (this statement has to be confirmed)
- The schema of “/entity/id” can be used for dynamical links. For the document title no lookup table is necessary
- The ID doesn’t look nice
- It hard to type
- Ids can be very long dependig on your backend system
- Same implementation questions like with the other solution. How is the lookup table and the redirect organised?
- Links - Discussion about slugs in URL: https://stackoverflow.com/questions/47427/why-do-some-websites-add-slugs-to-the-end-of-urls
- SEO. The crawlers usually went by concept of importance in the route and for us it would be domain/template/actual-content-i.e-mindsettlers/player/jurgen-appelo
- What would be "template"?
- There seems to be no id. What is the algorithm to make it unique?
- Is “actual content” the title of a practice? Is so, are then “player” and “jurgen-appelo”. Additional parameters?
- Amazon
- first slug is the title of the book. But it seems to be ignored. The important part seems to the
/dp/{id}
. - https://www.amazon.de/Manila-pearl-Orient-intending-visitor/dp/B002YIHC48/
- this link leads to the same page
- https://www.amazon.de/dp/B002YIHC48/
- first slug is the title of the book. But it seems to be ignored. The important part seems to the
-
The crawlers usually went by concept of importance in the route and for us it would be domain/template/actual-content
- i.e mindsettlers/player/jurgen-appelo
-
favor readability before seo:
“More recently the search engines have lowered the weighting given to keywords in the URL, likely because the technique is now more common on spam sites than legitimate. Keywords in the URL now have only a very minor impact on the search results, if at all.”
An app deep link works as follows: The user has a web link on the phone and clicks onto it. Then the user has then 3 options:
- The user has not installed the app, and the web page opens in the web browser
- The user has an app installed that claims to be responsible for that link and so the app opens with the adequate page. The app has a definition what content should be rather displayed on the app then on the web.
- The user has the app installed but don’t want the link to open the app but rather see the content in the web browser.
The requirements for this feature is, that you can describe/configure your URL schema.
Google doc explains: https://webmasters.googleblog.com/2009/02/specify-your-canonical.html)
- Different content can have different URLS but can be made identifiable with markup
- Same content can appear differently (page including rotating content)
Example (Dummy) URL with 1855 characters: