URL structure: the decisions you make once
A URL is not a ranking lever. It is an identity: change it and you change the page's name in the index, in every link and in every bookmark. Decide the shape once, early, and then leave it alone.
By Théophile Louvart, founder of Porteur · Updated 15 September 2026 · Markdown
What a URL is for
Three jobs, in order of importance: it identifies the page to search engines, it promises something to a person reading it in a result, and it tells a crawler where the page sits.
- Identity: every distinct URL is a distinct page. Two URLs for one page is a duplicate to be resolved.
- Promise: the reader sees the URL under the title in a result, and in a link somebody pasted in a chat.
- Structure: folders group pages, and the grouping is a weak but real signal of what belongs together.
What a URL is not is a place to put keywords. The words help a reader decide to click, which is worth having, and that is the whole of it.
Folders that mean something
Use a folder when the section is a real group with a hub page above it. Do not use one to decorate.
| Pattern | Use it when | Example |
|---|---|---|
| Flat: /page | The page is a top-level thing: pricing, about, the product | /pricing |
| One folder: /section/page | There is a hub at /section/ worth reading | /guides/canonical-tag |
| Two folders: /section/theme/page | The section is large enough that themes each have a hub | /guides/search-console/impressions |
| Three or more | Almost never on a small site | Usually a sign the taxonomy is doing too much |
The words in the slug
- Lowercase, always. Upper and lower case are different URLs on most servers.
- Hyphens between words, not underscores and not run together.
- Words a person would say: the subject of the page, two to five of them.
- No stop words unless the phrase needs them to read: /how-to-fix-duplicate-content is fine, /the-guide-to-a-url is not.
- No repetition of the folder: /guides/guide-to-canonical-tags says guide twice.
- Stable. The slug is the page's name, so pick the name you will still use next year.
Trim the slug to the subject, not to the title. A page titled "How to fix Crawled, currently not indexed in Search Console" lives happily at /guides/crawled-currently-not-indexed.
The variants that quietly duplicate every page
Each of these serves the same content at two addresses. Pick one form, redirect the other, and keep internal links on the chosen form.
| Variant | Decision | How it is enforced |
|---|---|---|
| http and https | https, always | A one-hop redirect at the server or the edge, plus canonicals on https |
| www and the bare domain | Either, consistently | A 301 on every path, and a Domain property in Search Console covering both |
| Trailing slash or not | Either, consistently | A framework setting or an edge rule, and internal links that match |
| Upper and lower case | Lowercase | Redirect mixed case to lowercase, and never generate mixed-case links |
| Parameters: ?ref=, ?utm_ | The clean URL is canonical | A self-referencing canonical without parameters, and no internal links carrying them |
| index.html or / | The directory form | Redirect the file form once |
Two of these have their own guides, because the choice has consequences beyond the URL: the www question and the trailing slash question.
Dates and ids in a URL
- Dates: only where the content is genuinely dated, such as a changelog entry or a conference edition. A guide with 2026 in its URL is a guide you cannot refresh without a redirect.
- Ids: only where a human-readable slug cannot be unique, such as a marketplace listing. Prefer /listings/1234-blue-desk-chair to /listings/1234 so the URL still says something.
- Author, category and tag in the path: avoid. They change, and they turn one page into several when the taxonomy changes.
- Version numbers: fine in documentation, with the current version canonical and the old ones handled deliberately.
Good and bad URLs for a product site
| Instead of | Use | Why |
|---|---|---|
| /p/1029?ref=nav | /pricing | Says what it is, has no parameters, cannot duplicate |
| /Blog/2026/03/How-We-Built-Our-API | /blog/how-we-built-our-api | Lowercase, no date to age, no month folder with one post in it |
| /guides/the-complete-guide-to-internal-linking-for-seo-in-2026 | /guides/internal-linking | A slug is a name, not a title |
| /features/feature-1 | /features/scheduled-reports | Names the feature, so the link and the result line both make sense |
| /product?id=42&tab=pricing | /product/scheduled-reports/pricing | One page, one URL, crawlable without parameters |
| /docs/v2/getting_started.html | /docs/getting-started | Hyphens, no extension, version handled by canonical rather than by path |
What changing a URL costs
Changing a slug is a small migration. It is doable, it is sometimes right, and it is never free.
- A 301 from the old URL to the new one, kept permanently.
- Every internal link updated to the new URL, so nothing is reached through a redirect.
- The sitemap updated, so Google is told the new URL directly.
- Any external link you control updated: profiles, listings, documentation.
- A period of fluctuation while Google recrawls and moves its signals across.
Worth it for a URL that is wrong, confusing or blocking a section you are building. Not worth it to add a keyword.
A checklist before you ship a new section
Decide the folder and build its hub
If /section/ has nothing to say, the section does not need a folder.
Write three example slugs
Say them aloud. If they are hard to read or repeat the folder, fix the pattern before there are forty of them.
Check the variants
Request the new URL with and without a trailing slash, in mixed case, over http, with and without www. Each should reach one final URL in one hop.
Add it to the sitemap and the navigation
A section that only the sitemap knows about is a section nothing links to.
Write down the pattern
One line in the repository saying how URLs in this section are formed. That is what stops the next person inventing a second pattern.
Questions
Barely, and that is not the reason to use them. Words in a URL help a person decide to click and help anyone pasting the link. Write the slug for the reader and stop there.
Either form works, as long as you pick one and redirect the other. Google treats /page and /page/ as different URLs, so serving both is a duplicate you create for yourself.
As short as it can be while still naming the page. Two to five words in the slug is the usual answer, and the folder carries the context so the slug does not have to.
Only if the content is genuinely dated. A date in the path means refreshing the page later either leaves a stale year in the URL or forces a redirect.
Only if the current ones are wrong, duplicated or blocking a section you are building. Every change costs a redirect, an internal link sweep, a sitemap update and some weeks of fluctuation.
Check my site, free
Paste your URL and the free check reads how your pages are addressed and linked, in about thirty seconds, and flags the duplicates you did not know you served.
- Free check, no card
- Read-only, your own accounts
- Readable by your agent
Read next
- GuideChanging your URL structure: when it is worth it and how to do it
- GuideTrailing slash: two URLs for one page unless you decide
- Guidewww or non-www: pick one, redirect the other
- GuideSite architecture for a small product: shallow, linked, and honest
- GuideCanonical tags: what they do and the mistakes that cost rankings
- GlossaryURL slug
- GlossaryURL
- GuideThe SEO mistakes small product sites actually make