URL Stability
stableCategory: technical-seo · Methodology v4.5
Two signals on a single page: - Anchor URL cleanliness.
Signal Source
- Source
https://{domain}- Kind
- html_dom
Score Bands
| Verdict | Condition |
|---|---|
| Pass | at least 8 of the sampled (up to 20) anchor URLs are clean AND a <link rel="canonical"> is present on the page |
| Partial | at least 4 of the sampled anchor URLs are clean (whether or not a canonical link is present) |
| Fail | fewer than 4 of the sampled anchor URLs are clean |
Description
URL Stability checks whether a page links to clean, stable URLs that AI crawlers can de-duplicate and cite reliably. friendly4AI samples up to 20 anchor (<a href>) links on the page, scores each one for "cleanliness", and checks for a <link rel="canonical"> in the head. A page scores 100 only when at least 8 of those sampled URLs are clean and a canonical link exists.
What does URL Stability measure?
Two signals on a single page:
- Anchor URL cleanliness. friendly4AI samples up to 20
<a href>links and scores each. A URL counts as clean when it has no query string, or when it's amailto:/tel:link. If it does carry a query string, that query has to contain noutm_orsessiontokens, stay under 80 characters, and use no more than two¶meter separators. - Canonical presence. Whether the page declares a
<link rel="canonical">in its head.
Why do stable URLs matter for AI-readiness?
Clean, predictable URLs let AI crawlers de-duplicate, cache, and cite pages reliably. URLs stuffed with utm_ campaign tags or session IDs look unstable: the same content shows up under many addresses, which splits authority and leaves engines guessing about which version to rank. A canonical link names the authoritative URL, so AI systems and search engines fold their signals onto one address instead of scattering them. The signal works alongside page-metadata and structured-data as part of discovery.
How is URL Stability scored?
Under the v4.5 methodology, this Discovery parameter scores in three tiers from a sample of up to 20 anchor links:
| Tier | Score | Condition | |------|-------|-----------| | Pass | 100 | At least 8 sampled URLs are clean and a canonical link is present (both required) | | Partial | 50 | At least 4 sampled URLs are clean (canonical link not required) | | Fail | 0 | Fewer than 4 clean URLs found |
The cleanliness test runs per URL. A link with no query string passes outright. A link with a query string has to clear three checks: no utm_/session tokens, under 80 characters, and two & separators or fewer.
How do I fix URL Stability issues?
- Use short, descriptive, path-based URLs in place of long query strings.
- Strip
utm_campaign parameters and session IDs out of internal links. Handle tracking client-side rather than baking it into the href. - Add a
<link rel="canonical">to every page. Without one you can't reach the Pass tier, no matter how clean the links are. - Keep any query string you can't avoid under 80 characters and down to two parameters or fewer.
- Start with your navigation and footer URLs, since the sample draws from on-page anchors and those links repeat everywhere.
- Re-scan after cleaning internal links to confirm the clean-URL count and the canonical are both detected. For related signals, see sitemap-availability.
Version History
- Introduced
- v4.0
- Last changed
- v4.5
Key takeaways
- Signal: https://{domain}
- Category: Technical SEO
- Passes when: at least 8 of the sampled (up to 20) anchor URLs are clean AND a <link rel="c…