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 finds and processes links in dropdown menus as long as they are present in the HTML when the page loads.
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 menus déroulants sont-ils vraiment crawlés comme n'importe quel lien interne ?
  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 crawls and follows links present in dropdown menus, provided they are embedded in the HTML at the initial page load. Links dynamically generated after loading or via asynchronous JavaScript may be ignored or processed later. Specifically, if your menu uses pure CSS to hide/show submenus, there is no issue. If you load links via AJAX on hover, that's a different story.

What you need to understand

Why is this specification about HTML at load important?

Google clearly distinguishes two types of links: those present in the source HTML from the first render, and those added afterwards by JavaScript. This distinction is significant.

When Googlebot downloads your page, it first retrieves the raw HTML. If your navigation links are already there, in standard <a href> tags simply hidden by CSS (display:none, visibility:hidden, or transformations), the crawler sees them immediately. No need to run JavaScript, no latency, no risk.

What’s the difference between a pure CSS menu and a JavaScript menu?

A pure CSS dropdown uses pseudo-classes like :hover or hidden checkboxes to show/hide submenus. All links are present in the initial DOM. Google crawls them effortlessly.

A JavaScript menu can operate in two ways. It either hides/shows elements already present in the HTML (same logic as CSS, no issue). Or, it dynamically loads links on click or hover via fetch() or XMLHttpRequest. In this latter case, these links do not exist at the time of the initial crawl.

Google can execute JavaScript and eventually discover these links, but with two major downsides: a processing delay (JavaScript rendering consumes crawl budget) and a risk of failure if the script crashes or if Googlebot does not wait long enough.

Does display:none still cause crawl issues?

No. This old SEO legend has been dead for a long time. Google crawls perfectly links hidden by CSS, whether they are display:none, visibility:hidden, or positioned off-screen.

The nuance concerns the SEO weight of anchors. A visible link in main content will have more value than a link hidden in a mega-menu with 200 other links. But regarding pure crawl, no distinction: if the link is in the HTML, it is followed.

  • Links in the initial HTML are crawled immediately, even if hidden in CSS
  • Links loaded after rendering (AJAX, fetch) depend on JavaScript rendering budget
  • A menu with 300 links dilutes PageRank, even if all are crawled
  • Server response time affects crawl more than the method of menu display
  • Google follows links in dropdown menus just like those in footers or sidebars

SEO Expert opinion

Is this statement consistent with field observations?

Yes, and it’s actually one of the few claims from Google that perfectly aligns with what we observe in crawl. Log tests show that Googlebot follows links from mega-menus, hidden navigations, and CSS accordions without issues.

However, we regularly see sites where certain sections are never crawled because their links only appear after JavaScript interaction. Typically: a hamburger menu that loads its content via fetch() on first click. On desktop, Google does not click. The link remains invisible.

What traps remain despite this confirmation?

The first trap is confusing crawl and PageRank equity. Yes, Google crawls your dropdown menu with 500 links. But those 500 links share the page juice. If your homepage has a mega-menu with 12 categories, each expanding to 30 subcategories, you are massively diluting.

The second trap: modern JavaScript frameworks (React, Vue, Next.js in CSR mode) that build the DOM afterwards. If your navigation component is built client-side and the initial HTML contains only a <div id="root"></div>, your links are technically not "present in the HTML at load". Google will need to wait for the JavaScript rendering. [To be checked] on every technical audit: inspect the raw source HTML (Ctrl+U, not the inspector), not the post-render DOM.

The third trap: touch events. On mobile, some dropdown menus require a tap to open. If the child links are only injected on tap and Googlebot mobile does not simulate that tap, there’s a problem. Always verify that links exist in the HTML, not just that they display visually.

When is this rule not enough?

When you use ambiguous relative links in a menu loaded across multiple URLs. Example: a mega-menu with <a href="../products/"> that works from /category/ but fails from /category/sub-category/page.html. Google crawls the link, hits a 404, and that’s the end of the story.

Another case: dropdown menus relying on JavaScript anchors (<a href="#" onclick="...">) with no real href. Technically, there’s a link in the HTML, but it points to #. Google will not crawl anything. This error still lingers on corporate sites that confuse navigation and JS events.

If your site is using a JavaScript framework in CSR mode (Create React App, Vue CLI without SSR), make sure to check the raw source HTML. A menu that looks perfect in the inspector may be entirely absent from the initial HTML. Google will crawl, but with delay and uncertainty.

Practical impact and recommendations

How can I check if my dropdown menus are crawlable?

First step: disable JavaScript in your browser (Chrome DevTools > Settings > Debugger > Disable JavaScript). Reload the page. If your menu links do not appear at all, they are generated in JS after loading. That's a problem.

Second check: Ctrl+U to view the source HTML. Look for your navigation links. If they are there, hardcoded in <a href> tags, even wrapped in <div style="display:none">, you are good. If they do not appear, or only as an empty <div id="menu-container"></div>, they will only be crawled after JavaScript rendering.

Third check: Google Search Console, Coverage section. Check if important URLs (categories, product pages) are marked "Detected, currently not indexed". If these pages are only linked from your dropdown menu, and the menu loads its links in JS, this may be the cause. Compare with server logs: Does Googlebot visit these URLs? If not, the link is probably not crawled.

Should I prefer CSS or JavaScript for dropdown menus?

In 2025, pure CSS remains the safest choice for critical navigation. A menu managed with :hover, :focus, or even hidden checkboxes ensures that all links are in the initial DOM. Zero rendering latency, zero risk of JS failure.

If you must use JavaScript (for example, to manage complex mega-menus with lazy-loading images), ensure that the links themselves are in the HTML. Only the display behavior can be managed in JS. For instance, a script that adds/removes a .open class on an already present container is fine. A script that fetches links on hover is not.

For modern frameworks, enable Server-Side Rendering (SSR) or static generation (SSG). Next.js, Nuxt, and SvelteKit do this natively. Your menu will be rendered server-side, the links will be in the initial HTML, and Google will crawl normally.

What mistakes should be avoided at all costs?

Error #1: using <a href="#"> or <a href="javascript:void(0)"> for navigation elements. These links go nowhere. Google does not follow them. If you need a visual trigger without a destination, use a <button>, not an <a>.

Error #2: loading sub-navigation links only on click/hover via AJAX. On mobile, Googlebot does not click. On desktop, it may not wait for JavaScript rendering. These links may remain invisible. If you want to lazy-load resources (images, videos), that's fine. But navigation links must be present from the beginning.

Error #3: forgetting about alternative internal linking. Even if Google crawls your dropdown menu, if it’s the only source of links to certain deep categories, you're at risk. A technical issue (JS bug, CDN down) and these pages become orphaned. Add contextual links in content, an XML sitemap, a sitemap page.

  • Check that navigation links are present in the source HTML (Ctrl+U), not just in the post-render DOM
  • Disable JavaScript in the browser and ensure that links remain accessible
  • Avoid <a href="#"> and <a href="javascript:..."> for real navigation
  • Prefer pure CSS or SSR/SSG for dropdown menus
  • Monitor crawl logs to ensure Googlebot accesses URLs linked from the menu
  • Add redundant internal linking (contextual links, footer, sitemap) for critical pages
Dropdown menus pose no crawl issues if the links are in the initial HTML. The real question is not "Can Google crawl?", but "Have I structured my navigation robustly, with hard links, without critical dependence on JavaScript?" These architectural optimizations can quickly become complex, especially on high-volume sites or modern tech stacks. If you want to secure your crawl budget and internal linking without risk, working with a specialized SEO agency can help you avoid costly mistakes and expedite compliance.

❓ Frequently Asked Questions

Les liens en display:none dans un menu déroulant sont-ils pénalisés par Google ?
Non. Google crawle et suit normalement les liens masqués en CSS, qu'ils soient en display:none, visibility:hidden ou positionnés hors écran. Le masquage CSS n'impacte pas le crawl, seulement potentiellement le poids SEO de l'ancre.
Un menu déroulant chargé en JavaScript après le rendu initial est-il crawlé ?
Ça dépend. Si les liens sont injectés dynamiquement via fetch() ou AJAX après interaction, Google peut ne pas les voir immédiatement. Il devra attendre le rendu JavaScript, ce qui consomme du crawl budget et ajoute de l'incertitude. Mieux vaut avoir les liens dans le HTML initial.
Peut-on utiliser des frameworks React ou Vue pour les menus déroulants sans risque SEO ?
Oui, à condition d'activer le Server-Side Rendering (SSR) ou la génération statique (SSG). Si ton app tourne en mode CSR pur (Client-Side Rendering), le HTML initial sera vide et Google devra attendre le rendu JavaScript. SSR/SSG garantit que les liens sont présents dès le chargement.
Combien de liens peut-on mettre dans un menu déroulant sans diluer le PageRank ?
Il n'y a pas de limite technique, mais chaque lien sur une page partage le PageRank de cette page. Un mega-menu avec 300 liens dilue fortement. Privilégie une navigation hiérarchisée avec 5-7 catégories principales, et des sous-niveaux accessibles mais pas tous depuis la homepage.
Comment vérifier que Googlebot crawle bien les liens de mon menu déroulant ?
Consulte les logs serveur pour voir si Googlebot visite les URLs liées depuis le menu. Utilise aussi la Search Console (Couverture, Inspection d'URL) pour vérifier l'indexation. Enfin, inspecte le HTML source brut (Ctrl+U) pour confirmer que les liens sont présents avant tout rendu JavaScript.
🏷 Related Topics
Domain Age & History AI & SEO Links & Backlinks Pagination & Structure

🎥 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.