Ch 10 — URLs, architecture & navigation¶
Part V — Site design · The Technical SEO Reference
Playbook coupling:
seo-checklist.mdcovers this domain in five one-liners — faceted-nav handling (Phase 1, line 88), pagination self-canonicals (line 89), crawlable internal links and descriptive anchors (lines 96–98), no-orphans (line 97), and descriptive hyphenated URLs (Phase 2, line 125). This chapter supplies the mechanics: the character-level URL rulebook, the internal-link importance machinery, the full December 2024 faceted-navigation decision tree, pagination's edge cases, and honest quarantine of the industry's architecture doctrines.
The load-bearing sentence for this whole chapter is Google's: "Google generally doesn't look at the structure of URLs to work out the structure of a site. Instead, it analyzes the linkages between pages." Architecture, to Google, is a link graph. URLs are addresses — they must be mechanically clean so crawling is efficient, but folders don't make hierarchy, links do. Nearly every architecture debate (click depth, subdomains, topic clusters) untangles once those two layers are kept separate.
10.1 How Google handles a URL — the mechanical rulebook¶
🟢 Google frames URL cleanliness as a requirement, not a nicety: "If your URLs don't meet the following criteria, Google Search will likely crawl your site inefficiently — including but not limited to extremely high crawl rates, or not at all" — URL structure best practices (last updated 2025-12-10; reorganized Jun 18, 2025).
- 📘 The standard. "Google Search supports URLs as defined by IETF STD 66" (RFC 3986). Reserved characters must be percent-encoded; "characters in the non-ASCII range should be percent encoded" — the doc's worked examples include Arabic, Chinese, umlauts, and emoji URLs.
- 🟢 ⚠️ Case sensitivity is real. "Like any other HTTP client following IETF STD 66, Google Search's URL handling is case sensitive (for example, Google treats both /APPLE and /apple as distinct URLs with their own content)." If your server treats cases identically, "convert all text to the same case" — otherwise Google crawls both and you pay the duplication (→ Ch 8 for consolidation).
- 🟢 Trailing slashes: "Google treats each URL above separately (and equally) regardless of whether it's a file or a directory, or it contains a trailing slash" (To slash or not to slash, 2010 — still live). The one exception: "for your root URL specifically, https://example.com is equivalent to https://example.com/ and can't be redirected even if you're Chuck Norris." Serving both variants is "perfectly legitimate and a-okay" per Google — but pick one, use it consistently in internal links, and 301 the other (→ Ch 16).
- 🟢 Fragments don't exist to indexing. "Don't use fragments to change the content of a page, as Google Search generally doesn't support URL fragments"; for JS content changes "use the History API instead" (→ Ch 6 §6.6). This cuts both ways — see the fragment trap in §10.6 and the fragment feature in §10.8.
- 🟢 Language: use the audience's own language and script in URLs, transliterating where applicable — English-only slugs are not a Google requirement (→ Ch 11).
10.2 Designing URLs and parameters¶
- 🟢 "When possible, use readable words rather than long ID numbers in your URLs."
- 🟢 Hyphens, with the actual historical reason: "we recommend using hyphens (-) instead of underscores (_)… For historical reasons, we don't recommend using underscores, as this style is already commonly used for denoting concepts that should be kept together" (like
format_date). Joined words (greendress) also not recommended. - 🟢 Parameters: "use the following common encoding: an equal sign (=) to separate key-value pairs and add additional parameters with an ampersand (&)" (added Oct 23, 2024); trim parameters that don't change content; "avoid the use of session IDs in URLs and consider using cookies instead."
- 🟢 ⚠️ Keywords in URLs are a display asset, not a ranking lever. SEO Starter Guide: "the keywords in the name of the domain (or URL path) alone have hardly any effect beyond appearing in breadcrumbs."
- ⚠️ The URL Parameters tool is gone (Apr 2022): "only about 1% of the parameter configurations currently specified in the URL Parameters tool are useful for crawling… Google's crawlers will learn how to deal with URL parameters automatically. If you need more control, you can use robots.txt rules (for example, you can specify parameter orders in an allow rule) or use hreflang" (deprecation post). Any audit that still says "configure parameters in GSC" is four years obsolete — the current parameter doctrine is §10.8's.
10.3 Internal links: the discovery and importance machinery¶
🟢 The dual role (link best practices): "Google uses links as a signal when determining the relevancy of pages and to find new pages to crawl." And the discovery baseline: "Google primarily finds pages through links from other pages it already crawled" (Starter Guide).
- 🟢 The crawlability contract: "Generally, Google can only crawl your link if it's an
<a>HTML element… with an href attribute" resolving to a real URI. Non-parseable:routerLink,<span href>, onclick-only. JS-inserted links with proper markup are fine (→ Ch 6 §6.8 — its canonical home; summary here because architecture depends on it). - 🟢 The anti-orphan rule, verbatim: "Every page you care about should have a link from at least one other page on your site." ⚠️ But orphanhood is a discovery-and-importance deficit, not a penalty — sitemap-only URLs can still be indexed (→ Ch 9); what they forfeit is the link-derived importance signal below.
- 🟢 Anchor text: "Good anchor text is descriptive, reasonably concise, and relevant to the page that it's on and to the page it links to." Google's own bad examples: "Click here," "Read more," "website," "article." Fallbacks: the
titleattribute on an empty<a>; for image links, "Google uses the alt attribute of the img element as anchor text." Context counts: "the words before and after links matter… Don't chain up links next to each other." ⚠️ Keyword-cramming anchors edges into spam policy. - 🟢 No magic number: "There's no magical ideal number of links a given page should contain. However, if you think it's too much, then it probably is." The old "~100 links max" rule is retired lore.
10.4 Hierarchy is links, not URLs¶
- 🟢 The foundation (ecommerce site structure doc): "Google generally doesn't look at the structure of URLs to work out the structure of a site. Instead, it analyzes the linkages between pages."
- 🟢 Importance flows through internal links: "The more links a page has to it within a site, the higher the relative importance of the page to other pages on your site." This is the documented mechanism behind every "flat architecture" argument — prominence, not folder depth.
- 🟢 The prescribed chain: "Add links from menus to category pages, from category pages to sub-category pages, and finally from sub-category pages to all product pages." ⚠️ "If category pages don't include direct links to all products in a category, Googlebot might not find all of your products by crawling alone… If it's not possible to link to all pages, use a sitemap or a Google Merchant Center feed."
- 🟢 Directories do earn one crawl effect (Starter Guide): past "a few thousand URLs," grouping similar topics in directories "can help Google learn how often the URLs in individual directories change" —
/policies/crawled seldom,/promotions/often. A crawl-scheduling hint, not a ranking structure.
10.5 Breadcrumbs¶
- 🟢 BreadcrumbList markup "indicates the page's position in the site hierarchy"; Google uses it "to categorize the information from the page in search results" (breadcrumb doc). Required per trail:
itemListElementofListItems, each withposition("Position 1 signifies the beginning of the trail"),name,item(optional on the final crumb). Multiple trails are allowed for multi-path pages; represent "a typical user path," not the URL structure. - ⚠️ Jan 23, 2025: breadcrumbs left mobile SERPs. "We're rolling out a change to no longer show breadcrumbs on mobile search results in all languages and regions… (they continue to appear on desktop search results)"; on mobile "the visible URL will be simplified to the domain only" (announcement). The doc now reads "available on desktop." Markup stays supported, the GSC report continues — but a pitch promising mobile breadcrumb display is selling a removed feature. Display-layer only; no ranking claim exists (→ Ch 13).
10.6 Pagination¶
From the pagination doc — nominally ecommerce, in practice Google's only pagination spec — plus the ecommerce URL doc's admission: 🟢 "We see the most URL mistakes in pagination URL structures."
- 🟢 Unique URLs per page: "include a ?page=n query parameter, as URLs in a paginated sequence are treated as separate pages by Google."
- 🟢 ⚠️ Self-canonicals: "Don't use the first page of a paginated sequence as the canonical page. Instead, give each page its own canonical URL." Tools still recommending the page-1/view-all canonical are wrong by the current doc.
- 🟢 Sequential
<a href>links page-to-next-page; plus the landing hint: "consider linking from all individual pages in a collection back to the first page… This can give Google a hint that the first page of a collection might be a better landing page." - 🟢 ⚠️ The fragment trap, with mechanism: "Don't use URL fragment identifiers… for page numbers… If Googlebot sees a URL to the next page that only differs by the text after the #, it may not follow the link, thinking it has already retrieved the page."
- 🟢 rel=next/prev: "Google no longer uses these tags, although these links may still be used by other search engines." Removal optional; reliance is the error.
- 🟢 ⚠️ The duplicate-titles exemption most audits miss: "You can use the same titles and descriptions for all pages in the sequence. Google tries to recognize pages in a sequence and index them accordingly." Crawler-tool duplicate-title warnings on pages 2..n are noise.
- 🟢 Sort/filter variants of the same list (
?order=price): noindex them or robots-disallow the patterns.
10.7 Load-more and infinite scroll¶
🟢 "Google's crawlers don't 'click' buttons and generally don't trigger JavaScript functions that require user actions to update the current page contents." Every chunk therefore needs the paginated-equivalent pattern (lazy-loading doc, migrated from the old blog post Sep 17, 2024): "Give each chunk its own persistent, unique URL"; stable content per URL; "Link sequentially to the individual URLs"; "update the displayed URL using the History API" as the user scrolls. Rendering mechanics → Ch 6 §6.9. Google explicitly treats pagination-vs-load-more-vs-infinite-scroll as a UX decision with an SEO implementation obligation attached — infinite scroll "can lead to 'scrolling fatigue'" and "can't handle very large numbers of results" per the doc's own comparison.
10.8 Faceted navigation — the December 2024 doctrine in full¶
⚠️ The doc moved: published Dec 17, 2024 under /search/docs/, it now lives at developers.google.com/crawling/docs/faceted-navigation (crawling docs migrated Nov 20, 2025; old URL redirects — cite the new home). Companion blog post (Illyes): faceted navigation "is by far the most common source of overcrawl issues site owners report to us, and in the vast majority of the cases the issue could've been avoided."
🟢 Why facets hurt — the novel-URL economics: "the crawlers will typically access a very large number of faceted navigation URLs before the crawlers' processes determine the URLs are in fact useless" (overcrawling), and "if crawling is spent on useless URLs, the crawlers have less time to spend on new, useful URLs" (slower discovery). Crawlers must fetch before they can judge.
🟢 The decision fork: "If you don't need the faceted navigation URLs potentially indexed, prevent crawling of these URLs."
Prevent crawling (first-tier tools): - robots.txt patterns — the doc's own example block:
user-agent: Googlebot
disallow: /*?*products=
disallow: /*?*color=
disallow: /*?*size=
allow: /*?products=all$
Second-tier tools, Google's own ranking: 🟢 "these methods are generally less effective in the long term than the previously mentioned methods" — rel=canonical to the unfiltered version "may, over time, decrease the crawl volume of non-canonical versions"; rel=nofollow works only at 100% coverage: "every anchor pointing to a specific URL must have the rel=\"nofollow\" attribute in order for it to be effective" — including anchors you don't control. ⚠️ And the robots.txt/canonical interaction: "Don't use the robots.txt file for canonicalization purposes" — Google can't read a canonical or noindex on a page it's forbidden to fetch (→ Ch 8, Ch 3).
If facets stay crawlable:
- 🟢 "Use the industry standard URL parameter separator '&'. Characters like comma (,), semicolon (;), and brackets… are hard for crawlers to detect as parameter separators." (Blog: "💩 is not a good parameter separator character.")
- 🟢 Path-encoded facets (/products/fish/green/tiny): "ensure that the logical order of the filters always stays the same and that no duplicate filters can exist."
- 🟢 ⚠️ The 404-in-place rule: "Return an HTTP 404 status code when a filter combination doesn't return results… also… if the URL contains duplicate filters or otherwise nonsensical filter combinations, and nonexistent pagination URLs. Similarly… don't redirect to a common 'not found' error page. Instead, serve a 'not found' error with the 404 HTTP status code under the URL where it was encountered" (SPA exception noted → Ch 6 §6.6).
10.9 Infinite URL spaces beyond facets¶
- 🟢 Additive filtering is named as a URL-explosion cause in the URL-structure doc: "the number of URLs (views of data) in the sites explodes" while "Googlebot only needs to see a small number of lists from which it can reach the page for each hotel."
- 🟢 Infinite calendars carry one of the last official nofollow prescriptions: "If your site has an infinite calendar, add a nofollow attribute to links to dynamically created future calendar pages." ⚠️ Notable precisely because nofollow is otherwise a link-qualifier, not a crawl tool (→ playbook Phase 5, "Links & Brand").
- 🟢 Parent-relative link bugs (
../../category/stuff) can mint bogus infinite spaces when servers don't 404 them: "use root-relative URLs in your links (instead of parent-relative)." - 🟢 Wildcard DNS hostname explosion is the infrastructure variant → Ch 4 §4.5.
- 🟢 When this becomes a crawl-budget problem (crawl-budget doc, updated 2026-07-22): large sites "1 million+ unique pages" changing weekly, or "10,000+ unique pages" changing daily, or a large share of Discovered–currently-not-indexed. Remedies from this chapter's toolbox: consolidate duplicates, robots-block unimportant patterns, kill soft 404s ("Soft 404 pages will continue to be crawled, and waste your budget"). Full crawl-budget doctrine → Ch 2 §2.5.
10.10 Ecommerce URL architecture¶
From the ecommerce URL doc — 🟢 throughout:
- The three failure modes, verbatim: content "can be missed if Googlebot incorrectly thinks two URLs will return the same content" (fragment-differentiated variants — "Google does not use fragment identifiers in indexing"); "The same content may be retrieved multiple times" when different URLs return the same page (
/product/black-t-shirtvs/product?sku=1234); and "The crawler may think your site contains an infinite number of pages if your URLs include a continually changing value such as a timestamp." - Parameter hygiene: "Use ?key=value URL parameters rather than ?value"; ⚠️ "Avoid using the same parameters twice. Googlebot may ignore one of the values otherwise" (
?type=candy,sweet, not?type=candy&type=sweet); never internally link to "session-IDs, tracking codes, user-relative values (location=nearby, time=last-week), and the current time." - Variants: "make sure that each variant can be identified by a separate URL" — path segment (
/t-shirt/green) or query parameter (/t-shirt?color=green); with optional variant parameters, canonicalize to the parameter-less URL (→ Ch 8). - ⚠️ The ?page=1 consistency rule: "Use the same URL in internal links, sitemap files, and
<link rel="canonical">tags… either include or exclude ?page=1 on the URL throughout your site consistently." Plus: "Use a self-referencing<link rel="canonical">tag… on all indexable pages and include those URLs in a sitemap file." - Empty states: "If a category has no items, use a noindex robots meta tag. If your site detects that a category has become empty and automatically removes the category from on-site search and browse, consider returning a 404."
10.11 Click depth, orphans, and the architecture doctrines — doctrine vs lore¶
- ⚪ The "3-click rule" appears in no Google documentation; it descends from 1990s usability writing and crawler-tool defaults. 🟡 The closest real statement (Mueller, 2018 hangout, via SEJ's contemporaneous transcript): "What does matter for us a little bit is how easy it is to actually find the content" — "how many links you have to click through… rather than what the URL structure itself looks like." No number, ever. The defensible doctrine is §10.4's: prominence through links.
- ⚪ Hub-and-spoke / pillar-cluster / "topical authority" is industry methodology (HubSpot lineage, ~2017). Google documents no named architecture model and no topical-authority metric. The Google-backed kernel worth keeping: directory grouping (crawl scheduling), contextual links with descriptive anchors, category→product chains. The rest is inference — usable, but never "Google says."
- 🟢 Subdomain vs subdirectory — Google's entire documented position (Starter Guide): "From a business point of view, do whatever makes sense for your business… it might be easier to manage the site if it's segmented by subdirectories, but other times it might make sense to partition topics into subdomains." 🟢 (recorded statement) Google's SEO Snippets video: Search "works fine with either" (V0-verified primary; Mueller's practical caveat — pick one and keep it, structure changes take time to settle). ⚪ The "moving the blog to /blog/ boosts traffic" doctrine rests on vendor case studies; Google has never stated a ranking difference. Documented adjacent facts: a GSC Domain property covers all subdomains (→ Ch 19); each hostname carries its own crawl budget (→ Ch 2).
Symptoms & diagnosis¶
| Symptom | Likely cause | Where |
|---|---|---|
| Crawl Stats dominated by parameter URLs; new content slow to be discovered | Facet overcrawl — no robots.txt patterns / crawlable filter links | §10.8, §10.9 |
| Both /APPLE and /apple (or slash/non-slash pairs) indexed | Case/slash inconsistency + no redirect or canonical | §10.1, Ch 8 |
| Products in deep categories missing from index | Category pages don't link all products; no sitemap/feed fallback | §10.4 |
| Pages 2..n of listings never indexed | Fragment pagination; no sequential <a href>; load-more without URLs |
§10.6, §10.7 |
| GSC flags duplicate titles on paginated pages | Not a defect — documented exemption | §10.6 |
| Filter URLs with zero results indexed en masse | Empty combinations return 200 instead of 404-in-place | §10.8 |
| "Discovered – currently not indexed" ballooning on a large site | Infinite URL space (calendar, timestamps, additive filters, parent-relative bugs) | §10.9, Ch 21 |
| Same product indexed under multiple URLs | Variant URLs without canonical discipline; ?page=1 inconsistency; duplicate parameter keys | §10.10, Ch 8 |
| Breadcrumbs stopped showing on mobile | Jan 2025 platform change, not your markup | §10.5 |
| Team debating subdomain-vs-subfolder migration for rankings | No documented ranking difference — decide on business/ops grounds | §10.11 |
Sources¶
All fetched 2026-08-04 (research corpus; V2 re-fetches all): - URL structure best practices (2025-12-10) - Link best practices for Google (2025-12-10) - Pagination, incremental page loading, and Search (2025-12-10) - Managing crawling of faceted navigation URLs (2025-12-18; moved from /search/docs/ Nov 20, 2025) - Crawling December: Faceted navigation (2024-12-17) - Designing a URL structure for ecommerce websites (2025-12-10) - Help Google understand your ecommerce website structure (2025-12-10) - Breadcrumb structured data (2025-12-10) · Simplifying the visible URL element on mobile (2025-01-23) - SEO Starter Guide (2025-12-10) - To slash or not to slash (2010-04-21) - URL Parameters tool deprecation (2022-03-28) - Optimize your crawl budget (2026-07-22) - Fix lazy-loaded content (2025-12-10) - Consolidate duplicate URLs (2026-07-10) - Sitemaps overview (2025-12-10) - 🟡 Mueller click-depth remarks (2018 hangout, via SEJ transcript); Mueller subdomain caveat (2017 SEO Snippets video, per industry transcripts — V2-corroborated 2026-08-04 against SEJ's writeup: "Making changes to sites URL structure tends to take a bit of time to settle down and search so I recommend picking a set up that you can keep for longer"); 🟢 SEO Snippets subdomain video (V0-verified)