Why it matters
A fragment (the part of a URL after #) exists only in the browser and is often ignored by crawlers, so hash-routed views are not separate pages for Google. Google recommends the History API for clean URLs, and moving from hash routes to real paths keeps the same client-side behaviour.
How to meet it
Run the router in history mode. Render links as <a href="/path">, intercept the click, call history.pushState and handle popstate. Configure the server or hosting rewrites so a direct request to every valid path returns 200 with the page, ideally server-rendered, and unknown paths return 404 (DEV-ERR-02). Real paths also work as deep links on Android, iOS and desktop.
How to test it
Open a deep URL directly in a fresh browser session and with curl: it returns 200 and the right content. The rendered HTML in URL Inspection contains no href="#/..." routes.
How Regensbot covers it
Decided automatically once Regensbot renders your pages.
Headless Chromium renders the page on an isolated render service, and the raw and the rendered HTML run through the same parsers.
Sources
Google documents02
- 01Understand the JavaScript SEO basicsGoogle Search Central (opens in a new tab)
- 02Fix Search-related JavaScript problemsGoogle Search Central (opens in a new tab)
Claims in the knowledge base06
- D2-C185ConfirmedLightning session D: Rendering and JavaScriptShown on screen
- D2-C284ConfirmedWhat is Google friendly JavaScriptShown on screen
- D2-C285ConfirmedWhat is Google friendly JavaScriptShown on screen
- D2-C288ConfirmedWhat is Google friendly JavaScriptSaid on stage
- D2-C286ConsistentWhat is Google friendly JavaScriptSaid on stage
- D2-C289UndocumentedWhat is Google friendly JavaScriptSaid on stage
Claim IDs refer to the Search Central Live 2026 knowledge base. The knowledge base (opens in a new tab)
- Confirmed
- Google's documentation states the same thing.
- Consistent
- Google's documentation supports it without stating it.
- Undocumented
- Said or shown at the event, not in the documentation.