# 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.

Updated 2026-09-15 · Source: https://porteur.ai/guides/url-structure

## 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 |

> If /section/ returns a 404, the folder is decoration. Either build the hub or drop the folder.

## 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.

> Every date, id or category in a path is a future redirect. Put them there only when the URL would be wrong without them.

## 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.

1. A 301 from the old URL to the new one, kept permanently.
2. Every internal link updated to the new URL, so nothing is reached through a redirect.
3. The sitemap updated, so Google is told the new URL directly.
4. Any external link you control updated: profiles, listings, documentation.
5. 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

1. **Decide the folder and build its hub** If /section/ has nothing to say, the section does not need a folder.
2. **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.
3. **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.
4. **Add it to the sitemap and the navigation** A section that only the sitemap knows about is a section nothing links to.
5. **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

### Do keywords in the URL help rankings?

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.

### Should URLs have a trailing slash?

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.

### How long should a URL be?

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.

### Should I put the date in a blog URL?

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.

### Is it worth changing my URLs now?

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.

## Read next

- [Changing your URL structure: when it is worth it and how to do it](https://porteur.ai/guides/changing-url-structure): When to change URLs for SEO, how to plan the map and redirects, how to keep equity, and what to expect in Search Console after the switch.
- [Trailing slash: two URLs for one page unless you decide](https://porteur.ai/guides/trailing-slash-seo): Google sees /page and /page/ as different. Pick one form, redirect the other, and keep links and your sitemap consistent. Here is how to do it.
- [www or non-www: pick one, redirect the other](https://porteur.ai/guides/www-vs-non-www): Pick www or non-www, there is no SEO gain either way. 301 redirect every path to the chosen host, set canonicals, and verify a Domain property.
- [Site architecture for a small product: shallow, linked, and honest](https://porteur.ai/guides/site-architecture): A site is a graph of links, not a folder tree. Hubs that are real pages, navigation a crawler can follow, and a worked map for two hundred pages.
- [Canonical tags: what they do and the mistakes that cost rankings](https://porteur.ai/guides/canonical-tag): What a canonical tag does, when to use one, the mistakes that cost rankings, and how to check and fix canonicals on a small site.
- [URL slug](https://porteur.ai/glossary/url-slug): A URL slug is the last part of a URL that identifies the page. See what good slugs look like, how they affect clicks, and how to change them safely.
- [URL](https://porteur.ai/glossary/url): A URL is a page’s address. Learn its parts, why variants split equity, what a good URL looks like, and what to fix on a small site.
- [The SEO mistakes small product sites actually make](https://porteur.ai/guides/common-seo-mistakes): Twenty mistakes found on real small sites, grouped, each with the check that finds it in a minute and the fix that takes an afternoon.

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: https://porteur.ai/
