url.underscores
The page's URL path separates words with underscores; Google recommends hyphens.
What to change
Separate words in new URLs with hyphens (/blue-widgets, not /blue_widgets). Do not rename URLs that are already indexed or linked to only for this: a rename needs a 301 redirect from every old URL and resets what search engines know about the page. Apply it to new URLs.
The documentation on developers.google.comA finding of this rule on a page carries the exact edits for that page: the markup it quotes, and what to write instead.
When it runs
Runs on every SEO audit: of a page, a crawl, a build directory or HTML. Info is a best practice: worth doing, rarely urgent, and --no-info leaves it out. Each finding takes 1 point off the page's score.
The severity here is the rule's usual one: a finding can be raised or lowered when the page gives a reason.
Run it, or skip it
Check a page for this rule alone, after a fix for instance:
npx @rivi-software/agentic-seo-check audit https://example.com --rule url.underscores
Or from an assistant, with the MCP tool seo_audit_page:
{
"url": "https://example.com",
"rules": [
"url.underscores"
]
}
To leave it out of an audit, pass --disable url.underscores on the command, or disableRules: ["url.underscores"] to a tool.
More in Links
All 13 rules- Warning
links.hash-routeInternal links whose fragment is a route ("#/products", "#!/products"). Google ignores the fragment, so it cannot reach these views as pages of their own. - Warning
links.insecure-internalInternal links use http:// while the page is served over https://. - Info
links.nofollow-internalInternal links carry rel="nofollow". - Info
url.uppercaseThe page's URL path has uppercase letters. Google treats /Page and /page as two URLs, so links that differ in case split signals or end in a 404. - Warning
url.session-idThe page's URL or its internal links carry a session id (jsessionid, PHPSESSID, sid), so every visit creates new URLs for the same content. - Info
links.tracking-parametersInternal links carry campaign tracking parameters (utm_*, gclid, fbclid), which make crawlers fetch duplicate URLs and overwrite the visit's real traffic source in analytics. - Error
links.local-hostA public page's canonical, og:url, og:image, hreflang, images or scripts point to localhost, a .local or .test host, or a private network address, which work only on the developer's machine (error). Only <a> links there is info: a setup guide may mean them. - Info
links.missing-fragmentSame-page links (href="#name") point to an id that no element on the page has, so the link goes nowhere.