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

Google treats links in dropdown menus like any other internal links as long as they are present in the HTML when the page is loaded. Make sure these links do not depend on a JavaScript request to appear.
14:20
🎥 Source video

Extracted from a Google Search Central video

⏱ 1h13 💬 EN 📅 26/06/2017 ✂ 26 statements
Watch on YouTube (14:20) →
Other statements from this video 25
  1. 4:51 Pourquoi Google ne garantit-il aucune augmentation des featured snippets ?
  2. 5:48 Comment Googlebot calcule-t-il réellement votre budget de crawl ?
  3. 8:04 HTTP vs HTTPS sans redirection : comment Google gère-t-il vraiment le duplicate content ?
  4. 8:45 Le JavaScript explose-t-il vraiment votre budget de crawl ?
  5. 10:26 Google utilise-t-il vraiment vos meta descriptions dans les snippets de recherche ?
  6. 12:10 Pourquoi les balises rel='next' et rel='prev' échouent-elles sur des pages en noindex ?
  7. 12:16 Peut-on vraiment combiner rel=next/prev et noindex sans perdre son crawl budget ?
  8. 13:54 Google fusionne-t-il vraiment HTTP et HTTPS en une seule URL canonique ?
  9. 14:20 Les liens dans les menus déroulants sont-ils vraiment crawlés par Google ?
  10. 15:06 Les liens site-wide sont-ils vraiment sans danger pour votre SEO ?
  11. 15:11 Les liens site-wide pénalisent-ils vraiment votre référencement ?
  12. 16:06 Faut-il vraiment optimiser ses meta descriptions si Google les réécrit ?
  13. 16:16 Liens internes relatifs ou absolus : y a-t-il vraiment un impact SEO ?
  14. 16:34 Les liens relatifs pénalisent-ils le SEO par rapport aux absolus ?
  15. 17:31 Les featured snippets de mauvaise qualité révèlent-ils une faille algorithmique de Google ?
  16. 20:00 Rel=next/prev fonctionne-t-il encore avec des pages en noindex ?
  17. 24:11 Les snippets en vedette vont-ils vraiment s'étendre au-delà des définitions ?
  18. 28:12 Google corrige-t-il manuellement les résultats de recherche grâce aux signalements internes ?
  19. 28:16 Les rich cards sont-elles vraiment déployées de manière égale dans tous les pays ?
  20. 30:40 Google indexe-t-il vraiment le contenu de vos iframes ?
  21. 35:15 Votre budget de crawl fuit-il par des URLs inutiles ?
  22. 38:04 Faut-il vraiment créer une URL distincte pour chaque filtre produit en e-commerce ?
  23. 48:11 Que se passe-t-il si votre fichier robots.txt est bloqué ou inaccessible ?
  24. 48:27 Google indexe-t-il vraiment le JavaScript ou faut-il s'en méfier ?
  25. 52:57 Google indexe-t-il vraiment le JavaScript comme n'importe quelle page HTML ?
📅
Official statement from (8 years ago)
TL;DR

Google claims that links in dropdown menus are treated just like other internal links, with one condition: they must be present in the initial HTML without relying on JavaScript to display. Specifically, a menu that loads its links via an AJAX request after the page loads does not pass any PageRank. The implication is straightforward: your menus must be crawlable right from the raw HTML rendering, before any JS execution.

What you need to understand

Why Does Google Emphasize Presence in the Initial HTML?

Google's crawler first analyzes the raw HTML returned by your server. If your menu links rely on a JavaScript request to appear, Googlebot must wait for a second processing phase: the JS rendering. This step consumes significantly more server resources and time.

In practice, Google prioritizes links directly accessible in the initial DOM. A menu built entirely in client-side JS may have its links ignored or processed with delay, especially on high-volume sites.

What Does It Mean for a Link to Be “Present in the HTML on Load”?

A link is considered present in the HTML if you can see it in the raw source code (Ctrl+U in Chrome). It doesn't matter if it is visually hidden by CSS, as long as the <a href="..."> tag exists in the DOM before any JavaScript execution.

Classic dropdown menus built with display: none or visibility: hidden are fine. The trap is when the menu loads its subcategories via fetch() or XMLHttpRequest only on click or hover.

What’s the Difference Between Pure HTML Menus and JS Menus?

A pure HTML menu displays all its links in the initial source code, even if they are CSS-hidden. Google sees them immediately, crawls them, and passes PageRank according to your internal linking structure.

A dynamic JS menu generates its links after the page loads, often in response to user interaction. If Googlebot doesn't trigger this interaction or if the JS rendering fails, those links simply do not exist for the search engine.

  • Crawlable Initial HTML: links treated like any internal link, PageRank passed normally
  • JavaScript Required for Display: risk of crawl exclusion, delayed discovery, loss of PageRank
  • CSS Hidden but HTML Present: no problem, Google reads the HTML before the CSS
  • AJAX or fetch() on Click: links invisible in raw HTML, often ignored by Googlebot
  • Costly JS Rendering: even if Google executes JS, it prioritizes resources based on the available crawl budget

SEO Expert opinion

Does This Statement Align with Field Observations?

Yes, completely. Crawl tests show that links present in the initial DOM are prioritized for discovery. Server logs confirm that Googlebot crawls these URLs much faster than those generated dynamically in JS.

The catch is that many modern front-end frameworks (React, Vue, Angular) generate all content client-side. If you do not implement server-side rendering (SSR) or static pre-generation, your menus are invisible in the raw HTML. [To Be Verified]: Google claims to constantly improve its JS rendering, but in practice, the delay between HTML crawl and JS rendering can reach several days on lower-priority sites.

What Are the Real Limitations of This Recommendation?

Mueller's statement remains vague on one point: what happens for sites that entirely rely on JS for navigation? Google claims to crawl JS, but the reality is more nuanced. JS rendering is not automatic; it depends on the crawl budget, the site's priority, and the complexity of the code.

E-commerce sites with thousands of categories loaded dynamically on hover face real risks. If Googlebot does not trigger the hover or if the JS fails, entire parts of the catalog may remain uncrawled. This is not theoretical: we regularly observe massive indexing drops after a poorly managed JS redesign.

Are There Cases Where a JS Menu Can Still Work?

Yes, if you implement a hybrid rendering. Next.js, Nuxt.js, or other frameworks can generate HTML server-side while keeping client-side JS interactivity. In this case, Googlebot receives complete HTML with all menu links, and users enjoy a dynamic experience.

The alternative is to use a secondary navigation accessible in the footer or via an HTML sitemap to ensure all critical URLs are crawlable, even if the main menu relies on JS. But this is just a safety net, not an ideal solution for internal linking.

Practical impact and recommendations

How Can You Check If Your Dropdown Menus Are Crawlable?

First step: test your menu with JavaScript disabled. In Chrome, open DevTools > Settings > Debugger > Disable JavaScript, then reload your page. If your menu links disappear, Google cannot see them in the initial HTML.

Second check: inspect the raw source code (Ctrl+U or Cmd+Option+U). Look for your navigation URLs. If they do not appear in this source code, they rely on JS and might not be crawled effectively. Also use the URL Inspection Tool from Search Console to see what Googlebot actually renders.

What Mistakes Should Definitely Be Avoided with Dropdown Menus?

The classic mistake is building all navigation through React or Vue without SSR. The initial HTML contains a simple <div id="app"></div>, and the whole menu generates client-side. Result: Googlebot sees an empty page during the first crawl.

Another trap: menus that load their subcategories via AJAX on hover. Googlebot does not hover over elements, so those links never load. Even if Google claims to execute some JS events, it does not systematically trigger all user interactions.

What If Your Site Already Completely Relies on JS?

You have three options. First solution: switch to a framework with server-side rendering (Next.js, Nuxt, SvelteKit). This is the sustainable solution but also the most costly in development.

Second option: implement static pre-rendering with tools like Prerender.io or Rendertron. These services generate HTML versions of your pages for crawlers while serving the JS version to users. Third option: ensure an alternative internal linking via footer, HTML sitemap, or category pages accessible without JS. This is an acceptable compromise if your main menu remains dynamic but critical URLs stay accessible in other ways.

  • Test the menu with JavaScript disabled in the browser
  • Check for the presence of links in the raw source code (Ctrl+U)
  • Use Google's URL Inspection Tool from Search Console
  • Avoid menus that load their links via fetch() or AJAX on click/hover
  • Favor frameworks with server-side rendering (SSR) if you use React/Vue/Angular
  • Create a backup internal linking (footer, HTML sitemap) if the main menu relies on JS
Dropdown menus must be present in the initial HTML to ensure optimal crawling. If your architecture relies on complex JavaScript, these optimizations may require a significant technical overhaul. Consulting a specialized SEO agency can help you identify risks specific to your site and develop a rendering strategy suited to your technical and business constraints.

❓ Frequently Asked Questions

Un menu masqué en CSS display:none est-il crawlé par Google ?
Oui, tant que les liens existent dans le HTML initial. Google lit le HTML avant d'appliquer le CSS, donc un lien masqué visuellement reste crawlable et transmet du PageRank.
Les menus mega-menu avec des centaines de liens posent-ils problème ?
Pas directement, mais un excès de liens internes sur chaque page dilue le PageRank transmis à chacun. Privilégiez une hiérarchie claire et limitez les liens de menu aux catégories principales.
Googlebot déclenche-t-il les événements hover ou click sur les menus ?
Non, pas de manière fiable. Googlebot peut exécuter du JS mais ne simule pas systématiquement les interactions utilisateur comme le survol ou le clic. Ne comptez pas là-dessus pour charger vos liens.
Un sitemap XML compense-t-il un menu non crawlable ?
Le sitemap aide à la découverte des URLs, mais il ne remplace pas le maillage interne pour la transmission de PageRank. Un menu non crawlable affaiblit toute votre structure de liens internes.
Faut-il abandonner React/Vue pour le SEO ?
Non, mais il faut impérativement utiliser un rendu serveur (SSR) ou une pré-génération statique. Les frameworks modernes comme Next.js ou Nuxt.js résolvent ce problème sans sacrifier l'expérience utilisateur.
🏷 Related Topics
Domain Age & History AI & SEO JavaScript & Technical SEO Links & Backlinks Pagination & Structure Local Search

🎥 From the same video 25

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