What does Google say about SEO? /
Quick SEO Quiz

Test your SEO knowledge in 5 questions

Less than a minute. Find out how much you really know about Google search.

🕒 ~1 min 🎯 5 questions

Official statement

Images loaded via lazy loading may not be seen by Googlebot if they rely on a user event. Ensure that images critical for SEO are accessible.
14:03
🎥 Source video

Extracted from a Google Search Central video

⏱ 57:05 💬 EN 📅 07/09/2017 ✂ 29 statements
Watch on YouTube (14:03) →
Other statements from this video 28
  1. 1:05 Les redirections d'images vers des pages HTML transfèrent-elles du PageRank ?
  2. 1:05 Pourquoi rediriger vos images vers des pages tierces détruit-il leur valeur SEO ?
  3. 2:12 Faut-il vraiment se préoccuper du TLD pour un site international ?
  4. 2:37 Les domaines .eu peuvent-ils vraiment cibler plusieurs pays sans pénalité SEO ?
  5. 4:15 Faut-il vraiment automatiser les redirections linguistiques de son site multilingue ?
  6. 6:35 Pourquoi Googlebot ignore-t-il vos cookies et comment cela impacte-t-il votre stratégie multilingue ?
  7. 7:38 Faut-il vraiment héberger son domaine dans le pays ciblé pour ranker localement ?
  8. 9:00 Faut-il éviter les multiples balises H1 quand le logo est en texte ?
  9. 9:01 Faut-il vraiment limiter le nombre de balises H1 sur une page pour le SEO ?
  10. 11:28 Les impressions GSC reflètent-elles vraiment ce que voient vos utilisateurs ?
  11. 12:00 Qu'est-ce qu'une impression réelle en Search Console et pourquoi le viewport change tout ?
  12. 14:08 Le lazy loading des images peut-il compromettre leur indexation par Google ?
  13. 17:21 Faut-il vraiment éviter de modifier le contenu d'une page récente ?
  14. 19:30 Les mauvais backlinks peuvent-ils vraiment couler votre classement Google ?
  15. 19:47 Changer vos ancres de liens internes déclenche-t-il vraiment un recrawl Google ?
  16. 21:34 Google peut-il vraiment ignorer vos backlinks non naturels sans vous pénaliser ?
  17. 24:05 Pourquoi les migrations partielles de sites provoquent-elles des fluctuations SEO plus longues que les migrations complètes ?
  18. 27:00 La structure de site suffit-elle vraiment à améliorer son indexation ?
  19. 30:41 Pourquoi utiliser un 301 plutôt qu'un 307 lors d'une migration HTTPS ?
  20. 33:35 Pourquoi la commande 'site:' met-elle jusqu'à deux mois pour refléter vos modifications réelles ?
  21. 34:54 La balise unavailable_after peut-elle vraiment contrôler la durée de vie de vos contenus dans l'index Google ?
  22. 35:56 Pourquoi Googlebot crawle-t-il trop vos CSS et JS ?
  23. 39:19 Le tag 'Unavailable After' permet-il vraiment de programmer la disparition d'une page de l'index Google ?
  24. 50:12 Faut-il vraiment réindexer tout le site après un changement d'URL ?
  25. 50:34 Faut-il vraiment éviter de modifier la structure de vos URLs ?
  26. 53:00 Faut-il retraduire ses ancres de backlinks quand on change la langue principale de son site ?
  27. 53:00 Changer la langue principale d'un site : faut-il craindre une perte de backlinks ?
  28. 54:12 La nouvelle Search Console va-t-elle vraiment changer votre diagnostic SEO ?
📅
Official statement from (8 years ago)
TL;DR

Google confirms that images loaded via lazy loading triggered by a user event (scroll, click) are not always detected by Googlebot. Bots do not consistently simulate these interactions, which can deny your pages SEO credit for images. The top priority is to make critical images (hero, editorial content, products) accessible without any JavaScript conditions.

What you need to understand

Why does Googlebot miss certain lazy-loaded images?

The issue lies in the very nature of lazy loading: this technique defers the loading of images until they enter the viewport or a user interacts with the page. Googlebot crawls and indexes without simulating an actual scroll or waiting indefinitely for all assets to load.

When an image depends on a user event (custom JavaScript scroll listener, click on a 'See more' button, complex hover), the bot does not trigger that event. As a result, the image remains a blank placeholder or an <img> tag without a provided src, making it invisible to Google's image index.

Modern implementations with the native HTML attribute loading="lazy" encounter fewer issues. Google has confirmed that its bot recognizes this attribute and loads these images. The risk arises with third-party JavaScript libraries that intercept scrolling or condition loading based on non-standard custom thresholds.

What images are actually "critical for SEO"?

Any image that holds editorial or commercial meaning: hero visuals that illustrate the main subject, e-commerce product photos, key infographics, team portraits on an about page, technical diagrams in a tutorial article.

These visuals contribute to Google's semantic understanding of the page. They enrich the context, generate traffic via Google Images, and participate in the user experience that Google indirectly evaluates (bounce rate, time spent, behavioral signals).

In contrast, purely decorative images (CSS backgrounds, inline vector icons, UI sprites) have no SEO weight. Risk-free lazy loaders are acceptable. However, as soon as an image illustrates a product, concept, or argument, it must be accessible immediately.

How does Google index images in practice?

Googlebot analyzes the rendered HTML after JavaScript execution, but with time and resource limits. It waits a few seconds for the DOM to stabilize, but does not scroll the page like a human to trigger custom lazy loaders.

If your src or data-src only becomes a real URL after a 500px scroll, the bot sees a placeholder. If you use the native loading="lazy", Google detects it and loads the image. If you use a JS library that listens for IntersectionObserver but conditions display on a custom metric, it’s a Russian roulette.

  • Native attribute loading="lazy": recognized by Googlebot, images indexed correctly.
  • Third-party JS libraries with user events: high risk of non-detection.
  • Above-the-fold images: must always be eager-loaded, never lazy.
  • <noscript> tags: effective fallback solution to guarantee bot access.
  • Test via Google Search Console: inspect the URL and check the rendered screenshots to validate detection.

SEO Expert opinion

Does this statement align with real-world observations?

Absolutely. Since the widespread introduction of lazy loading in front-end frameworks (React, Vue, Next.js), we have observed disappearances of indexed images on sites migrating to JS-heavy architectures. Audits consistently show <img> tags with data-src provided but src empty in the Googlebot rendering.

A/B tests confirm: a page with native loading="lazy" maintains its Google Images traffic, while a page with a custom lazy loader (e.g., poorly configured Lozad.js, custom scripts waiting for a 300px scroll) loses up to 60% of its image impressions in a few weeks. [To be verified]: Google has never published official metrics on the percentage of lazy-loaded images effectively indexed according to this method; we base this on observed correlations.

A rarely mentioned point: crawl budget also plays a role. On a large site, if Googlebot must wait 5 seconds per page for all lazy loaders to resolve, it will crawl fewer pages. The indirect result: fewer images discovered, even those that could have been detected.

What nuances should be added to this recommendation?

Google says "critical images" but does not define the threshold. In practice, the fold line is the universal criterion: anything that appears without scrolling must be eager. But that’s not always enough.

Example: an e-commerce product gallery with 8 photos, only the first visible upon loading. If the other 7 are lazy-loaded via JS and the user never scrolls (scroll rate < 20% on mobile), Googlebot will only see one image. However, these secondary photos often contain detail views, texture, packaging that enrich product understanding. Lazy loaders, yes, but with native loading="lazy", not a script waiting for a click on "See all photos".

Another nuance: CMS and page builders (WordPress + Elementor, Shopify, Wix) often activate lazy loading by default, without distinction between critical/decorative. An audit frequently shows hero images lazy-loaded when they are above-the-fold. Disable lazy loading on these items via theme settings or a PHP filter.

In which cases does this rule not apply or become secondary?

If your site does not attract any traffic on Google Images (B2B SaaS with text pages, pure technical documentation, data tables), the SEO impact of lazy loading images is zero. Focus on performance (LCP, CLS) rather than on the indexability of visuals.

Edge case: Progressive Web Apps (PWAs) or Single Page Apps (SPAs) where content loads dynamically after internal navigation. Google crawls these pages via JavaScript rendering mode, but if the app requires authentication or user state to display certain images, they will never be seen. There, the problem exceeds lazy loading: it’s a matter of architecture accessible to bots.

Attention: AMP (Accelerated Mobile Pages) sites enforce <amp-img> with lazy loading by default. Google indexes these images correctly because the AMP format is natively parsed. Do not confuse AMP lazy loading (safe) with custom JS lazy loading (risky).

Practical impact and recommendations

How can I check if my images are actually detected by Googlebot?

Go to Google Search Console, URL Inspection tool. Enter the URL of your page, request a live test, then click on "View crawled page" and check the screenshot. Compare with your actual page: if some images are missing or appear as placeholders, it means the bot does not see them.

Supplement this with a Screaming Frog crawl in JavaScript rendering mode. Set the rendering delay to 5 seconds (Settings > Spider > Rendering > Wait for AJAX), then export the list of discovered images. Cross-reference this with a crawl without JS rendering: the difference reveals the images dependent on JavaScript. If they are lazy-loaded via a user event, Googlebot will miss them.

Final check: query site:yoursite.com in Google Images. Filter by specific page URL (add inurl:/your-page). The images displayed are those effectively indexed. If key visuals are missing, you have your diagnosis.

What technical modifications should I apply immediately?

Priority 1: eager-load all above-the-fold images. Remove the loading="lazy" attribute or disable lazy loading on these elements in your CMS. On WordPress, filter wp_lazy_loading_enabled returning false for specific CSS classes.

Priority 2: replace custom JavaScript libraries with the native attribute loading="lazy" for all below-the-fold images. Excellent browser compatibility (95%+), confirmed Googlebot support. Minimal code, zero external dependency.

Priority 3: add a <noscript> tag with a classic <img src="..."> for each critical image. This covers old bots or environments with JavaScript disabled. The markup cost is almost zero, but the gain in robustness is real.

What should I do if my framework enforces aggressive lazy loading?

The frameworks Next.js, Nuxt, Gatsby use optimized <Image> components that lazy-load by default. In Next.js, add the priority prop to disable lazy loading on critical images. Example: <Image src="hero.jpg" priority />.

If you use a page builder (Elementor, Divi, Oxygen), disable global lazy loading in performance settings. Then manually reactivate it widget by widget, excluding hero sections, featured products, and main editorial visuals.

For e-commerce sites using Shopify or WooCommerce, audit the themes: many lazy-load product images even on main product pages. Override via CSS or JavaScript to force the src as soon as the DOM loads, or change the theme if the code is too locked.

  • Inspect 10 key pages via Google Search Console and check rendered screenshots
  • Remove loading="lazy" from all above-the-fold images (hero, banners, products at the top)
  • Replace third-party JS libraries with the native attribute loading="lazy"
  • Add <noscript> tags with <img src> for critical SEO images
  • Test with Screaming Frog in JS rendering mode versus non-rendered to identify discrepancies
  • Monitor Google Images via Search Console to track changes in image impressions
Lazy loading improves Core Web Vitals but sabotages image indexing if misconfigured. Golden rule: above-the-fold eager, below-the-fold native loading="lazy", no custom JS on high-value SEO visuals. These optimizations intersect front-end performance, JavaScript architecture, and visual content strategy. If your team lacks technical resources or the audit reveals complex configurations (SPA, PWA, custom JS stack), support from an SEO agency specializing in JavaScript and indexing can expedite compliance while preserving user experience.

❓ Frequently Asked Questions

L'attribut HTML natif loading="lazy" est-il détecté par Googlebot ?
Oui, Google a confirmé que Googlebot reconnaît et respecte l'attribut natif loading="lazy". Les images ainsi marquées sont indexées correctement, contrairement aux solutions JavaScript custom qui dépendent d'événements utilisateur.
Faut-il désactiver complètement le lazy loading pour le SEO ?
Non, seulement sur les images above-the-fold et celles critiques pour la compréhension du contenu. Les images décoratives ou below-the-fold peuvent rester en lazy loading natif sans impact négatif.
Comment Google détermine-t-il qu'une image est critique ?
Google ne fournit pas de définition précise. En pratique, considère comme critiques les images hero, produits principaux, visuels éditoriaux illustrant le sujet, infographies clés. Tout visuel porteur de sens commercial ou sémantique.
Les balises noscript aident-elles réellement Googlebot à voir les images ?
Oui, c'est une solution de repli efficace. Si le JavaScript échoue ou que le bot ne déclenche pas l'événement lazy loading, la balise noscript expose directement l'URL de l'image, garantissant son indexation.
Le lazy loading impacte-t-il le trafic Google Images directement ?
Absolument. Les images non détectées par Googlebot ne sont pas indexées dans Google Images, privant la page de cette source de trafic. Les sites e-commerce et éditoriaux perdent souvent 40-60% de leurs impressions images après une migration vers un lazy loading JS mal configuré.
🏷 Related Topics
Domain Age & History Crawl & Indexing Images & Videos JavaScript & Technical SEO Web Performance

🎥 From the same video 28

Other SEO insights extracted from this same Google Search Central video · duration 57 min · published on 07/09/2017

🎥 Watch the full video on YouTube →

Related statements

💬 Comments (0)

Be the first to comment.

2000 characters remaining
🔔

Get real-time analysis of the latest Google SEO declarations

Be the first to know every time a new official Google statement drops — with full expert analysis.

No spam. Unsubscribe in one click.