Official statement
Other statements from this video 22 ▾
- 0:33 Why does Googlebot ignore your cookies and how can you adapt your personalized content strategy?
- 1:02 Does Googlebot crawl with cookies enabled or does it ignore your personalized content?
- 1:02 Can logged-in users be redirected to different URLs without facing SEO penalties?
- 1:35 Does changing your JavaScript framework lead to a drop in Google rankings?
- 1:35 Does switching JavaScript frameworks really ruin your SEO?
- 4:46 Does rendered HTML really ensure JavaScript indexing?
- 4:46 How can you verify if your JavaScript content is truly indexable by Google?
- 5:48 Is content behind login really invisible to Google?
- 5:48 Is the content behind a login really invisible to Google?
- 6:47 Should you really redirect Googlebot to www to bypass CORB errors?
- 8:42 Should you treat Googlebot differently from users to manage redirects?
- 11:20 Should you really hide consent banners from Googlebot to enhance its crawling?
- 11:20 Should you really show consent screens to Googlebot to avoid possible cloaking penalties?
- 14:00 How can you precisely identify the elements that degrade your Cumulative Layout Shift?
- 18:18 Why do your PageSpeed testing tools show contradictory LCP and FCP scores?
- 20:23 Should you really remove hashes from sports event URLs to get them indexed?
- 23:32 Is it true that Googlebot can do without pre-rendering?
- 24:02 Should you really disable JavaScript on your pre-rendered pages for Googlebot?
- 26:42 Does JSON-LD Really Slow Down Your Loading Time?
- 26:42 Is the FAQ Schema markup actually useless for your product pages?
- 26:42 Does JSON-LD FAQ Schema really slow down your site?
- 26:42 Does FAQ Schema markup hurt your conversion rate?
Google clearly states that URLs containing a hash (#) cannot be crawled or indexed. For temporary content like a sports event, it is essential to use clean routes without a hash. After the event, a 404 is perfectly acceptable: Google naturally removes these URLs from the index without penalty.
What you need to understand
Are hash URLs truly invisible to Googlebot?
Yes, and this is a fundamental principle of how the web operates. The hash (#) has historically been used for client-side intra-page navigation: the browser never sends it to the server during an HTTP request. Googlebot, which operates like a standard HTTP client, never sees what follows the hash.
In practical terms for Google, example.com/match#live123 and example.com/match are strictly identical. The engine crawls the URL without the fragment, renders the page, but cannot distinguish the different states of a JavaScript application that relies on hashes to create distinct "routes".
Why do so many sites still use hashes to route content?
Because it's simple, quick to implement, and historic JavaScript frameworks (Angular.js in hashbang mode, React Router in hash mode) have popularized it. There's no need for server configuration, no management of rewrites: everything happens on the client-side.
The problem? This technical convenience comes at a cost to SEO visibility. A site generating thousands of hash URLs for product pages, articles, or temporary events creates invisible content for search engines. It's a complete blind spot.
What really happens to temporary content after the event?
Martin Splitt points out a crucial point: returning a 404 after the event is normal and acceptable. Google then removes the URL from the index without viewing it as an error or a negative signal. This aligns with the ephemeral nature of the content.
This approach is healthy: it avoids accumulating dead pages in the index and clarifies the intent. A match on March 15 no longer needs to be indexed on March 20. The 404 is an honest response, not a technical flaw.
- Hash URLs (#) are never sent to the server so Googlebot cannot crawl or index them
- For indexable temporary content, you need to use clean routes without a hash (e.g., /match/live-123)
- A 404 after the event is a healthy practice: Google naturally removes the URL from the index
- Modern JavaScript frameworks support history mode (HTML5 pushState) which generates clean URLs
- Never confuse ease of development with SEO compatibility: hashes represent a complete blind spot
SEO Expert opinion
Is this statement consistent with field observations?
Yes, absolutely. This is one of the few points where Google is perfectly clear and aligned with the technical reality of the web. Hashes are never sent in HTTP requests: this is a W3C standard, not an arbitrary decision by Google.
I have audited hundreds of SPA (Single Page Application) sites, and the pattern is always the same: clients who have left hashes in their routes generate invisible content. When switching to history mode, indexing skyrockets within a few weeks. It is reproducible, measurable, and systematic.
What nuances should be applied to this statement?
The only nuance concerns hash fragments used for Ajax crawling (the hashbang #! system that Google proposed and then abandoned in 2015). Some very old sites still use it, but it is technically obsolete and Google no longer officially supports it.
The second point: Google can theoretically execute JavaScript that manipulates the URL after the initial rendering. But in practice, if your content relies on a hash to be displayed, the probability that it is correctly indexed is nearly zero. Don't count on hypothetical heuristics.
In what cases does this rule pose problems in production?
The classic case: a React/Vue app that uses hash mode by default to avoid server configuration. The dev team delivers quickly, the content works perfectly in client-side navigation, but Google sees nothing. The SEO discovers the problem three months after the launch.
Another common situation: dynamically generated temporary events (webinars, matches, flash promotions). If the technical team took the shortcut of a hash to avoid touching the backend infrastructure, the content remains invisible. Result: zero organic traffic during the event, exactly when the search peak is highest.
Practical impact and recommendations
What concrete steps should be taken to make temporary content indexable?
First step: audit your current routes. If you are using a JavaScript framework, check the configured routing mode. React Router, Vue Router, Angular: all offer a history mode (HTML5 pushState) that generates clean URLs without a hash.
Next, configure your server so that all routes return your main HTML (index.html or equivalent). This is the principle of universal fallback: Nginx, Apache, Netlify, Vercel all have standard configurations for this. Without this fallback, a manual refresh on /match/live-123 returns a server 404.
How to properly manage the end of life of temporary content?
The approach recommended by Martin Splitt is simple: return a true 404 once the event is over. Not a soft 404, not a redirect to the homepage: a clear HTTP 404.
You can soften the user experience with a custom 404 page suggesting similar upcoming events, but the HTTP code must be 404. Google will interpret the signal correctly and will remove the URL from the index within a few days or weeks, depending on your site's crawl frequency.
What mistakes should absolutely be avoided in this context?
Mistake number 1: using hashes for content you want to index. It’s a complete blind spot; no heuristic will come to your rescue. Don't rely on Google's JavaScript execution to circumvent this structural problem.
Mistake number 2: allowing temporary content URLs to return 200 with a message "event ended". This is a soft 404; Google will take longer to deindex, and you pollute your index with pages of no value. A 404 is an honest and effective response.
- Check your JavaScript framework's routing mode (hash vs history)
- Configure the server fallback so that all routes return the main HTML
- Test direct navigation (manual refresh) on a deep route to validate the configuration
- Return a clear HTTP 404 once the temporary content has expired
- Monitor deindexing through Search Console to validate that Google is indeed removing the URLs
- Document the logic of generation/expiration of temporary URLs for the tech teams
❓ Frequently Asked Questions
Les URLs avec hash sont-elles vraiment jamais crawlées par Google ?
Peut-on utiliser des hash pour de la navigation interne sans impact SEO ?
Comment basculer d'un routage hash vers un routage history propre ?
Un 404 après un événement temporaire nuit-il au référencement global du site ?
Combien de temps Google met-il à désindexer une URL qui retourne un 404 ?
🎥 From the same video 22
Other SEO insights extracted from this same Google Search Central video · duration 28 min · published on 01/07/2020
🎥 Watch the full video on YouTube →
💬 Comments (0)
Be the first to comment.