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

For mobile-first indexing, tab content is indexed if it loads on page load, but not if it loads dynamically after a user action.
15:28
🎥 Source video

Extracted from a Google Search Central video

⏱ 1h05 💬 EN 📅 20/10/2017 ✂ 29 statements
Watch on YouTube (15:28) →
Other statements from this video 28
  1. 1:05 Les guides de style Google influencent-ils vraiment le classement SEO de votre site ?
  2. 1:05 Les guides de style de Google pour développeurs influencent-ils vraiment votre SEO ?
  3. 2:19 Cache et Similaire sur Google : pourquoi cette distinction change-t-elle votre stratégie SEO ?
  4. 2:19 Comment contrôler les versions en cache et les suggestions de pages similaires dans Google ?
  5. 4:55 Pourquoi faut-il plusieurs mois pour qu'une amélioration de contenu impacte le classement ?
  6. 4:58 Combien de temps faut-il vraiment pour que Google réévalue la qualité d'un contenu ?
  7. 6:24 La popularité de marque influence-t-elle vraiment le classement Google ?
  8. 6:25 La popularité de marque influence-t-elle vraiment le classement Google ?
  9. 9:44 Faut-il supprimer ou noindexer les contenus dupliqués détectés par Panda ?
  10. 10:46 Le texte d'ancre précis booste-t-il vraiment votre SEO plus qu'une ancre générique ?
  11. 11:20 La vitesse de chargement est-elle vraiment un facteur de classement ou juste un mythe SEO ?
  12. 13:20 La vitesse de chargement est-elle vraiment un critère de classement SEO décisif ?
  13. 15:02 Le contenu sous onglets est-il vraiment indexé par Google en mobile-first ?
  14. 17:35 Comment Google indexe-t-il réellement les produits identiques sur plusieurs URL ?
  15. 19:33 Faut-il vraiment contacter les webmasters avant de désavouer des backlinks toxiques ?
  16. 20:32 Faut-il vraiment utiliser l'outil de désaveu pour gérer les backlinks toxiques ?
  17. 24:17 Comment Google classe-t-il vraiment les pages de médias sociaux d'une marque dans ses résultats de recherche ?
  18. 26:56 L'indexation mobile fonctionne-t-elle vraiment avec les sites séparés m-dot et dynamiques ?
  19. 27:41 L'indexation mobile-first traite-t-elle vraiment tous les types de sites mobiles de la même manière ?
  20. 29:02 Comment Google ajuste-t-il réellement vos positions en temps réel ?
  21. 29:09 Les algorithmes de Google fonctionnent-ils vraiment en temps réel ?
  22. 30:18 Pourquoi la Search Console ne montre-t-elle qu'une fraction de vos backlinks réels ?
  23. 38:51 Les mauvais backlinks peuvent-ils vraiment pénaliser votre site ?
  24. 39:53 Les PBN sont-ils vraiment détectables par Google ou simple pari risqué ?
  25. 48:31 Faut-il vraiment ignorer les numéros de page dans vos URLs pour la pagination ?
  26. 50:34 Hreflang norvégien : faut-il vraiment privilégier NO-NO au lieu de NO-NB ?
  27. 52:37 Faut-il encore se soucier de l'échappement d'URLs pour le crawl JavaScript de Google ?
  28. 57:17 Google indexe-t-il vraiment tout le JavaScript d'un site web ?
📅
Official statement from (8 years ago)
TL;DR

Google indexes tab content in mobile-first only if it loads upon page display. If content requires a user action to load dynamically, it will not be considered. For SEO, this means rethinking the technical architecture of tab interfaces: favor progressive lazy loading over conditional loading. Specifically, your initial DOM must contain the hidden content, even if it's invisible.

What you need to understand

Why does Google make a distinction between initial and dynamic loading?

The answer lies in how Googlebot crawls mobile pages. When indexing a URL in mobile-first, it simulates a smartphone and loads the page just once. It then analyzes the DOM as it appears after the initial JavaScript rendering, without simulating clicks, scrolls, or interactions.

If your content requires a user action (clicking a tab, a "See more" button, hover) to trigger an AJAX call or delayed loading, Googlebot will never see it. The bot isn't tasked with testing all possible interactions on every crawled page. It only takes the first state of the DOM once JavaScript has executed.

This limitation has major implications for SPA (Single Page Application) architectures and rich JavaScript interfaces. Many modern frameworks (React, Vue, Angular) load conditional content that only appears after interaction. If this content is not present in the initial client-side rendered DOM, it is invisible to the index.

What does "loaded on page load" really mean?

The term refers to any content present in the DOM once the initial JavaScript rendering is complete. In other words: Googlebot loads the URL, executes the JS, waits a few seconds (usually a maximum of 5 seconds), then freezes the state of the DOM and indexes what it sees at that precise moment.

If your tabs are coded with HTML that is already present but hidden via CSS (display:none, visibility:hidden, aria-hidden), the content is indeed indexable. However, if your tabs only load HTML on click (via fetch() or XMLHttpRequest), that content does not exist at the time Googlebot analyzes the page. Therefore, it will not be indexed.

How can you check what Googlebot actually sees?

Use the mobile-friendly test tool in Search Console (formerly Mobile-Friendly Test). This tool simulates the behavior of Googlebot on mobile and shows you the rendered HTML after JavaScript execution. Compare this rendering with what you see in your browser's inspector after clicking on each tab.

Another option: request the HTML rendering via the URL Inspection Tool in Search Console. The "More info" tab > "View tested page" > "HTML" shows you exactly what Google has indexed. If your tab content does not appear here, it is not indexed.

  • Indexable content: HTML present in the initial DOM, even hidden by CSS
  • Non-indexable content: HTML loaded after a click, hover, or user interaction
  • Technical solution: load all tabs at initial rendering and hide them with CSS or aria-hidden
  • Verification tool: Search Console > URL Inspection > Rendered HTML
  • SEO impact: content invisible to Googlebot contributes neither to ranking nor keyword indexing

SEO Expert opinion

Does this statement align with real-world observations?

Yes, but with important nuances. I've observed cases where content loaded very quickly after the initial rendering (within the first 2-3 seconds) was sometimes indexed, likely because Googlebot waits a certain period before freezing the DOM. However, relying on this is risky: wait times vary depending on server load, JS complexity, and the crawl budget allocated.

In practice, I've seen sites lose key positions after migrating to a dynamic tab architecture without pre-loading. The content literally disappeared from the index. Google does not crawl the same URL twice to test different interface states. If your content isn't there on the first pass, it's over.

What are the gray areas of this rule?

Mueller does not specify what happens to content loaded via Intersection Observer (lazy loading on scroll). If a tab becomes visible through automatic scroll or progressive enhancement, is it indexed? [To be verified] Official documentation remains vague on this point. My tests suggest that content visible in the initial viewport is indexed, but not content located further down even though it is technically "loaded" in the DOM.

Another edge case: nested accordions. If content is hidden in a tab that itself is within another tab, does Google index it if the HTML is present? Yes, but with lesser weight than content that is directly visible. Google understands the visual hierarchy and adjusts the weight of signals accordingly. Content hidden in three levels of tabs will have less impact than content displayed by default.

When does this rule not apply?

On desktop, historically, Googlebot was more lenient. Before the switch to mobile-first, the desktop bot sometimes executed basic interactions (expanding accordions, loading basic lazy load). But since mobile-first indexing has become the norm for most sites, this exception has disappeared. Do not rely on the desktop bot to salvage poorly architected content.

Notable exception: sites explicitly excluded from mobile-first (very rare now, mainly legacy non-responsive sites). For them, the old desktop logic still applies, but this situation is temporary. Google is gradually migrating all sites, and no new site escapes mobile-first from its initial indexing.

Warning: Do not confuse "hidden content" with "cloaking". Hiding content via CSS to display it in tabs is legitimate. However, showing different content to Googlebot and users remains a violation of guidelines and can lead to a manual penalty. The key: the HTML must be identical for everyone, only the visual presentation changes.

Practical impact and recommendations

How can I audit the tab architecture on my site?

Start by identifying all pages using tab interfaces, accordions, or hidden content. List the affected templates: product sheets, service pages, FAQs, landing pages. For each template, inspect the source code and verify whether the HTML for all tabs is present from the initial loading or is loaded dynamically.

Use Search Console to compare the raw HTML (Ctrl+U in the browser) with the rendered HTML (URL Inspection > View tested page). If you notice significant discrepancies, particularly content that appears in the browser but not in the Google rendering, you have an indexing issue. Prioritize strategic pages: those that generate organic traffic or target priority keywords.

What technical solution should I adopt to ensure indexing?

The most reliable method: pre-load all tabs in the DOM and hide them using CSS (display:none or visibility:hidden). The content is technically present in the source code, making it indexable, but invisible until the user clicks on the relevant tab. This approach works with all modern frameworks.

If your tabs contain a lot of content (which could slow down initial loading), opt for server-side rendering (SSR) or static site generation (SSG). Next.js, Nuxt.js, and Gatsby allow you to generate the complete HTML server-side, sent directly to the bot without depending on client-side JavaScript. Another option: progressive lazy loading using Intersection Observer, but be cautious of the gray areas mentioned earlier.

What mistakes should I absolutely avoid?

Classic mistake: implementing tabs using React or Vue in pure SPA mode without SSR, where each tab corresponds to an empty default state component. Content loads on click via a useState() or a conditional v-if. For the user, it’s smooth. For Googlebot, it’s a black hole.

Another trap: using hash fragments (#tab1, #tab2) to control tab display without pre-loading content. Google ignores hash fragments and does not crawl URL variants with different anchors. If your content only exists when the URL contains #tab2, it will never be indexed. Prefer query parameters (?tab=2) or, better yet, pre-loaded content.

  • Ensure all tabs are present in the initial DOM (no conditional AJAX loading)
  • Test each affected template via the URL Inspection in Search Console
  • Compare the raw HTML (Ctrl+U) with the HTML rendered by Google
  • Migrate to SSR or SSG if the current architecture relies on conditional loading
  • Avoid hash fragments to manage tab display
  • Favor display:none or visibility:hidden rather than delayed loading
Mobile-first indexing imposes technical rigor on the architecture of hidden content. If your site heavily utilizes tabs or accordions, a thorough audit is essential to avoid loss of visibility. These optimizations often require a partial overhaul of the front-end and close coordination between SEO and development teams. If your internal team lacks resources or expertise on these technical topics, consulting a specialized SEO agency can expedite compliance and safeguard your organic positions during the migration.

❓ Frequently Asked Questions

Le contenu masqué via display:none est-il pénalisé par Google ?
Non, utiliser display:none pour masquer du contenu dans des onglets ou accordéons est légitime et indexable. Google pénalise uniquement le cloaking (contenu différent pour Googlebot et utilisateurs), pas le contenu caché pour raisons UX.
Les accordéons FAQ sont-ils concernés par cette limitation ?
Oui, si le contenu de chaque question n'est chargé qu'au clic. Pour garantir l'indexation et l'éligibilité au rich snippet FAQ, le HTML de toutes les réponses doit être présent dès le chargement, même masqué par CSS.
Comment vérifier si mon contenu d'onglets est indexé ?
Utilise la Search Console > Inspection d'URL > "Afficher la page testée" > onglet HTML. Compare avec le contenu visible dans ton navigateur après interaction. Si des sections manquent, elles ne sont pas indexées.
Le lazy loading au scroll pose-t-il le même problème ?
Ça dépend. Si le contenu est chargé via Intersection Observer dès qu'il entre dans le viewport et que Googlebot scroll (comportement non garanti), il peut être indexé. Mais ne compte pas là-dessus : pré-charge tout ce qui est stratégique.
Peut-on utiliser des URL distinctes par onglet pour forcer l'indexation ?
Oui, c'est une solution. Créer une URL unique par onglet (/page?tab=1, /page?tab=2) avec du contenu pré-chargé garantit l'indexation. Attention cependant aux problèmes de duplicate content et de canonicalisation si mal implémenté.
🏷 Related Topics
Domain Age & History Content Crawl & Indexing AI & SEO Mobile SEO Pagination & Structure

🎥 From the same video 28

Other SEO insights extracted from this same Google Search Central video · duration 1h05 · published on 20/10/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.