Official statement
Other statements from this video 36 ▾
- 1:02 Faut-il ignorer le score Lighthouse pour optimiser son SEO ?
- 1:02 La vitesse de page est-elle vraiment un facteur de classement Google ?
- 1:42 Lighthouse et PageSpeed Insights ne servent-ils vraiment à rien pour le ranking ?
- 2:38 Les Web Vitals de Google modélisent-ils vraiment l'expérience utilisateur ?
- 3:40 La vitesse de page est-elle vraiment un facteur de ranking aussi décisif qu'on le prétend ?
- 7:07 Faut-il vraiment injecter la balise canonical via JavaScript ?
- 7:27 Peut-on vraiment injecter la balise canonical via JavaScript sans risque SEO ?
- 8:28 Google Tag Manager ralentit-il vraiment votre site et faut-il l'abandonner ?
- 8:31 GTM sabote-t-il vraiment votre temps de chargement ?
- 9:35 Servir un 404 à Googlebot et un 200 aux visiteurs est-il vraiment du cloaking ?
- 10:06 Servir un 404 à Googlebot et un 200 aux utilisateurs, est-ce vraiment du cloaking ?
- 16:16 Les redirections 301, 302 et JavaScript sont-elles vraiment équivalentes pour le SEO ?
- 16:58 Les redirections JavaScript sont-elles vraiment équivalentes aux 301 pour Google ?
- 17:18 Le rendu côté serveur est-il vraiment indispensable pour le référencement Google ?
- 17:58 Faut-il vraiment investir dans le server-side rendering pour le SEO ?
- 19:22 Le JSON sérialisé dans vos apps JavaScript compte-t-il comme du contenu dupliqué ?
- 20:02 L'état applicatif en JSON dans le DOM crée-t-il du contenu dupliqué ?
- 20:24 Cloudflare Rocket Loader passe-t-il le test SEO de Googlebot ?
- 20:44 Faut-il tester Cloudflare Rocket Loader et les outils tiers avant de les activer pour le SEO ?
- 21:58 Faut-il ignorer les erreurs 'Other Error' dans Search Console et Mobile Friendly Test ?
- 23:18 Faut-il vraiment s'inquiéter du statut 'Other Error' dans les outils de test Google ?
- 27:58 Faut-il choisir un framework JavaScript plutôt qu'un autre pour son SEO ?
- 31:27 Le JavaScript consomme-t-il vraiment du crawl budget ?
- 31:32 Le rendering JavaScript consomme-t-il du crawl budget ?
- 33:07 Faut-il abandonner le dynamic rendering pour le SEO ?
- 33:17 Faut-il vraiment abandonner le dynamic rendering pour le référencement ?
- 34:01 Faut-il vraiment abandonner le JavaScript côté client pour l'indexation des liens produits ?
- 34:21 Le JavaScript asynchrone post-load bloque-t-il vraiment l'indexation Google ?
- 36:05 Faut-il vraiment passer sur un serveur dédié pour améliorer son SEO ?
- 36:25 Serveur mutualisé ou dédié : Google fait-il vraiment la différence ?
- 40:06 L'hydration côté client pose-t-elle vraiment un problème SEO ?
- 40:06 L'hydratation SSR + client est-elle vraiment sans danger pour le SEO Google ?
- 42:12 Faut-il arrêter de surveiller le score Lighthouse global pour se concentrer sur les métriques Core Web Vitals pertinentes à son site ?
- 42:47 Faut-il vraiment viser 100 sur Lighthouse ou est-ce une perte de temps ?
- 45:24 La 5G va-t-elle vraiment accélérer votre site ou est-ce une illusion ?
- 49:09 Pourquoi Googlebot ignore-t-il vos images WebP servies par Service Worker ?
Martin Splitt confirms that Googlebot does not execute Service Workers. If your strategy for serving WebP images relies solely on this technology, Google will index the original JPEG/PNG formats, not the optimized versions. Essentially, you lose the SEO benefit of WebP for image indexing — only user-side performance remains intact.
What you need to understand
What is a Service Worker and why do some sites use it for images?
A Service Worker is a JavaScript script that runs in the background of the browser, independently of the web page. It allows intercepting network requests and manipulating responses before they reach the browser.
Some developers use it to dynamically serve WebP images to compatible browsers, while maintaining JPEG/PNG for older browsers. It is a form of progressive enhancement on the client side, technically elegant, but invisible to a bot that does not execute JavaScript at the same level as a modern browser.
Why doesn’t Googlebot execute Service Workers?
Googlebot has been executing JavaScript for years, but not all types of scripts. Service Workers operate outside the main thread of the page and require persistent state management between requests — something Googlebot does not implement.
The bot treats each URL as an isolated request, with no session context or Service Worker cache. As a result, any image substitution logic on the Service Worker side is simply bypassed. Googlebot sees what the HTML directly returns, period.
What’s the difference between what the user sees and what Google sees?
The user with a modern browser benefits from the optimized WebP version, with significant gains in weight and loading speed. Googlebot, on the other hand, fetches the original formats defined in the HTML or <picture> tags without the Service Worker layer.
This means that your Core Web Vitals on the user side may be excellent, but Google indexes heavier images than those actually served. Crawling is not blocked — JPEG/PNG images are discovered — but you miss out on the WebP label in Google’s Image index.
- Googlebot completely ignores Service Workers, no matter how sophisticated they may be.
- Images served only via Service Worker will not be indexed in WebP, even if the end user receives them in that format.
- Crawling of images continues normally on the original formats defined in the source HTML.
- User performance remains intact, but the SEO impact of WebP is lost for image indexing.
- This limitation applies to all resources served exclusively via Service Worker, not just images.
SEO Expert opinion
Is this statement consistent with field observations?
Absolutely. Tests with Google Search Console and rendering tools have long shown that Googlebot does not handle Service Workers. The URL Inspection Tool does not execute them either. No surprises here.
What’s more interesting is that Martin Splitt is taking the time to clarify this publicly. It shows that enough sites have adopted this strategy for Google to deem it necessary to explicitly lay down the limits. Purely client-side JavaScript implementations remain a partial blind spot for crawling.
What nuances need to be added to this rule?
The issue only concerns sites where the Service Worker is the sole method of serving WebP. If you use <picture> tags with WebP sources declared on the server side, Googlebot will see them perfectly — Service Worker or not.
In other words, Martin Splitt’s statement targets architectures where the source HTML contains only JPEG/PNG, and where a Service Worker performs transparent substitution on the client side. In this specific case, yes, Google indexes the original formats. [To verify]: it is unknown whether Google plans to execute Service Workers one day — nothing indicates that it is on the roadmap.
What risks are there if we ignore this limitation?
The main risk? You believe you are serving WebP to Google when that’s not the case. This skews your SEO assumptions, particularly for image search where format and weight matter.
Another perverse effect: if you completely disable JPEG/PNG on the server thinking the Service Worker is sufficient, you risk breaking image indexing or making certain resources inaccessible to the bot. Let’s be honest, this is rare — but it happens on excessively optimized client-side stacks without server fallback.
Practical impact and recommendations
What should you do to ensure Google indexes your WebP images?
The most robust solution is to serve WebP on the server side, via <picture> or <img> tags with declared srcset and types. Googlebot fully understands this syntax and will index the WebP versions without any issues.
If you are using a modern CDN (Cloudflare, Fastly, Akamai), activate automatic WebP conversion with content negotiation via the Accept header. The bot sends this header, receives WebP if available, and indexes it correctly. No need for JavaScript.
What mistakes should be avoided in the WebP implementation?
Never rely solely on client-side JavaScript — Service Worker or otherwise — as the only method of serving an image format. It is a layer of enhancement, not a foundational architecture for SEO.
Also, avoid conditional JavaScript redirects that load different URLs based on detected WebP support on the browser side. Googlebot will follow the default version, often the JPEG, and ignore the WebP branch. Always favor server logic or native HTML tags.
How to check if your WebP implementation is crawl-compatible?
Use the URL Inspection Tool in Google Search Console to test a page containing your images. Look at the rendered HTML version: if the <img> or <picture> tags point to .webp, you’re good. If you only see .jpg/.png, your Service Worker is doing the job — and Google does not see it.
Also, test with curl -A "Googlebot" -H "Accept: image/webp" on your image URLs. If the server returns WebP with the correct Content-Type, you’re safe. If it returns JPEG regardless, you need to revisit your server configuration.
- Implement WebP images server-side via
<picture>tags or HTTP content negotiation. - Never rely only on a Service Worker to serve optimized formats intended for indexing.
- Check Googlebot’s rendering using the URL Inspection Tool and confirm that .webp appears in the HTML.
- Test server responses with
curlby simulating a Googlebot user-agent and anAccept: image/webpheader. - Maintain an explicitly declared JPEG/PNG fallback for non-compatible bots and browsers.
- Monitor server logs to ensure Googlebot receives the correct resources during crawling.
❓ Frequently Asked Questions
Si j'utilise un Service Worker pour le cache offline, est-ce que ça pose problème pour Googlebot ?
Est-ce que Googlebot exécute quand même le JavaScript classique dans les pages ?
Puis-je détecter Googlebot et lui servir du WebP via un fallback serveur spécifique ?
Les balises <picture> avec source WebP sont-elles bien indexées par Google ?
Si Google n'indexe pas mes WebP via Service Worker, est-ce que ça impacte mon classement ?
🎥 From the same video 36
Other SEO insights extracted from this same Google Search Central video · duration 51 min · published on 12/05/2020
🎥 Watch the full video on YouTube →
💬 Comments (0)
Be the first to comment.