{"id":744479,"date":"2026-08-19T22:10:36","date_gmt":"2026-08-19T19:10:36","guid":{"rendered":"https:\/\/buradabiliyorum.com\/en\/javascript-links-can-make-your-pages-invisible-to-ai-search\/"},"modified":"2026-08-19T22:10:36","modified_gmt":"2026-08-19T19:10:36","slug":"javascript-links-can-make-your-pages-invisible-to-ai-search","status":"publish","type":"post","link":"https:\/\/buradabiliyorum.com\/en\/javascript-links-can-make-your-pages-invisible-to-ai-search\/","title":{"rendered":"JavaScript links can make your pages invisible to AI search"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_86 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a8648feeef6b\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #dd3333;color:#dd3333\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #dd3333;color:#dd3333\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a8648feeef6b\" checked aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/buradabiliyorum.com\/en\/javascript-links-can-make-your-pages-invisible-to-ai-search\/#A_41-day_experiment_reveals_how_JavaScript-only_navigation_limits_AI_crawler_discovery_and_why_fixing_it_later_can_be_harder\" >A 41-day experiment reveals how JavaScript-only navigation limits AI crawler discovery and why fixing it later can be harder.<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/buradabiliyorum.com\/en\/javascript-links-can-make-your-pages-invisible-to-ai-search\/#How_the_experiment_worked\" >How the experiment worked<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/buradabiliyorum.com\/en\/javascript-links-can-make-your-pages-invisible-to-ai-search\/#Phase_1_Crawlers_arrive_as_the_test_begins\" >Phase 1: Crawlers arrive as the test begins<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/buradabiliyorum.com\/en\/javascript-links-can-make-your-pages-invisible-to-ai-search\/#Only_Google_executed_the_JavaScript\" >Only Google executed the JavaScript<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/buradabiliyorum.com\/en\/javascript-links-can-make-your-pages-invisible-to-ai-search\/#Even_Google_barely_touched_the_JavaScript_pages\" >Even Google barely touched the JavaScript pages<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/buradabiliyorum.com\/en\/javascript-links-can-make-your-pages-invisible-to-ai-search\/#All_other_crawlers_ignored_the_JavaScript_group\" >All other crawlers ignored the JavaScript group<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/buradabiliyorum.com\/en\/javascript-links-can-make-your-pages-invisible-to-ai-search\/#Something_odd_happened_with_Bingbot\" >Something odd happened with Bingbot<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/buradabiliyorum.com\/en\/javascript-links-can-make-your-pages-invisible-to-ai-search\/#User_requests_from_AI_could_not_reach_JavaScript_links\" >User requests from AI could not reach JavaScript links<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/buradabiliyorum.com\/en\/javascript-links-can-make-your-pages-invisible-to-ai-search\/#Crawl_logs_dont_reveal_indexing\" >Crawl logs don\u2019t reveal indexing<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/buradabiliyorum.com\/en\/javascript-links-can-make-your-pages-invisible-to-ai-search\/#Phase_2_Not_all_crawlers_passed_the_recovery_test\" >Phase 2: Not all crawlers passed the recovery test<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/buradabiliyorum.com\/en\/javascript-links-can-make-your-pages-invisible-to-ai-search\/#Some_crawlers_were_quick_to_catch_up\" >Some crawlers were quick to catch up<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/buradabiliyorum.com\/en\/javascript-links-can-make-your-pages-invisible-to-ai-search\/#Others_were_not\" >Others were not<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/buradabiliyorum.com\/en\/javascript-links-can-make-your-pages-invisible-to-ai-search\/#What_Id_tell_a_client\" >What I\u2019d tell a client<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/buradabiliyorum.com\/en\/javascript-links-can-make-your-pages-invisible-to-ai-search\/#Topics_on_this_page\" >Topics on this page<\/a><\/li><\/ul><\/li><\/ul><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2 class=\"subhead\" itemprop=\"alternativeHeadline\"><span class=\"ez-toc-section\" id=\"A_41-day_experiment_reveals_how_JavaScript-only_navigation_limits_AI_crawler_discovery_and_why_fixing_it_later_can_be_harder\"><\/span>A 41-day experiment reveals how JavaScript-only navigation limits AI crawler discovery and why fixing it later can be harder.<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><\/p>\n<div class=\"bialty-container\">\n<p class=\"wp-block-paragraph\">\u201c<a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/developers.google.com\/search\/docs\/crawling-indexing\/javascript\/javascript-seo-basics\" target=\"_blank\" rel=\"noopener\">Google renders JavaScript<\/a>\u201d has been the standard answer to client-side rendering concerns for years, and it got easier to believe in 2019, when Googlebot went evergreen, continuously running on the latest version of Chromium.<\/p>\n<p class=\"wp-block-paragraph\">The increasing flow of search traffic through AI assistants renders that wisdom incomplete because the crawlers for AI assistants behave nothing like Googlebot.<\/p>\n<p class=\"wp-block-paragraph\">To get numbers rather than assumptions about what that means for Java<a href=\"https:\/\/buradabiliyorum.com\/en\/category\/download-scripts-themes-apps\/\" data-internallinksmanager029f6b8e52c=\"9\" title=\"Download Scripts &amp; Themes &amp; Apps\" target=\"_blank\" rel=\"noopener\">Script<\/a> links, I ran a controlled experiment. I set up one site with half its internal links hard-coded in HTML and the other half injected by JavaScript (JS). I added a logging layer that recorded every bot request for 41 days.<\/p>\n<p class=\"wp-block-paragraph\">The results were more lopsided than I expected. <\/p>\n<ul class=\"wp-block-list\">\n<li>Google\u2019s crawler stack was the only one that executed JavaScript and followed the injected links. <\/li>\n<li>Almost none of that work came from Googlebot, the crawler that actually builds the search index. <\/li>\n<li>Googlebot reached only 2% of the JavaScript-linked pages. <\/li>\n<li>Meanwhile, GPTBot, ClaudeBot, Bingbot, PerplexityBot, Meta\u2019s and Amazon\u2019s crawlers, and every other bot I tracked found exactly zero.<\/li>\n<\/ul>\n<h2 id=\"h-how-the-experiment-worked\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_the_experiment_worked\"><\/span>How the experiment worked<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p class=\"wp-block-paragraph\">The test site is a Brazilian business classification directory with roughly 2,400 pages, a project I own and operate. The experiment ran on the site\u2019s hierarchy: 21 top-level sections branching into divisions, groups, and classes, 1,062 pages in total. The remaining pages are flat leaf pages that sat outside the test.<\/p>\n<p class=\"wp-block-paragraph\">I split the 21 sections into two groups, alternating to avoid clustering bias:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>HTML group (11 sections):<\/strong> Every child link was hard-coded in the raw HTML so that any bot can parse and follow them.<\/li>\n<li><strong>JS group (10 sections):<\/strong> Every child link, at every level of the hierarchy, was injected by JavaScript after page load. The raw HTML contained an empty div, and a bot that doesn\u2019t execute JavaScript would see no links at all.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">To keep the test clean, I removed every alternative discovery path:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>Sitemaps:<\/strong> Disabled so that all sitemap URLs returned 404.<\/li>\n<li><strong>Breadcrumbs:<\/strong> Removed so deep pages couldn\u2019t leak links back up the hierarchy.<\/li>\n<li><strong>Internal hierarchy panels: <\/strong>Removed for the same reason.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">The only way to reach a division page in the JS group was to render JavaScript on its parent section page.<\/p>\n<p class=\"wp-block-paragraph\">Site hierarchy split into 11 HTML-linked sections and 10 JavaScript-linked sections, with all discovery paths below JS sections requiring JavaScript execution.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1435\" height=\"946\" http: alt=\"The site\u2019s 21 sections alternated between hard-coded HTML links and JavaScript-injected links. Any crawl below the signal line in the JS group proves JavaScript execution.\" class=\"wp-image-485238\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/01-setup-diagram.png 1435w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/01-setup-diagram-768x506.png 768w\" data-lazy-sizes=\"(max-width: 1435px) 100vw, 1435px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/01-setup-diagram.png\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1435\" height=\"946\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/01-setup-diagram.png\" alt=\"The site\u2019s 21 sections alternated between hard-coded HTML links and JavaScript-injected links. Any crawl below the signal line in the JS group proves JavaScript execution.\" class=\"wp-image-485238\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/01-setup-diagram.png 1435w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/01-setup-diagram-768x506.png 768w\" sizes=\"(max-width: 1435px) 100vw, 1435px\"><figcaption class=\"wp-element-caption\"><em><em>The site\u2019s 21 sections alternated between hard-coded HTML links and JavaScript-injected links. Any crawl below the signal line in the JS group proves JavaScript execution.<\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<p class=\"wp-block-paragraph\">Middleware logged every bot request to a database, including details on path, user agent, referrer, IP, and timestamp. Googlebot and Bingbot IPs were verified via reverse DNS to filter out spoofed user agents. Each request was tagged as belonging to the HTML group or the JS group based on its URL path.<\/p>\n<p class=\"wp-block-paragraph\">One measurement detail matters. Section pages for both groups were always linked from the index in plain HTML. A bot hitting a JS-group section page proves nothing. <\/p>\n<p class=\"wp-block-paragraph\">The experiment signal starts one level deeper: A hit on a division page in the JS group is only possible if the bot rendered the parent page\u2019s JavaScript and followed the injected link.<\/p>\n<div style=\"background: radial-gradient(circle at 30% 40%, rgba(184, 111, 255, 0.15), rgba(0, 169, 255, 0.15) 40%, #CDE8FD 70%); padding: 30px; width: 100%; max-width: 802px; color: #000000 !important; font-family: Arial, sans-serif; margin: 25px 0 30px 0; border-radius: 8px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); position: relative; box-sizing: border-box;\">\n<div style=\"width: 100%; max-width: 100%; margin-bottom: 20px; text-align: left; padding-right: 20px; box-sizing: border-box;\">\n<div id=\"semrush-one-headline\" class=\"headline-responsive\" style=\"font-family: Oswald, sans-serif; font-size: 30px; font-weight: normal; margin: 0; color: #000000 !important; line-height: 1.2;\">\n        Be the brand <span style=\"background: linear-gradient(90deg, #D56EFE 0%, #068EF8 51%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;\">customers find first<\/span>.\n      <\/div>\n<p id=\"semrush-one-subhead\" style=\"font-family: Roboto, sans-serif; font-size: 18px; font-weight: 300; line-height: 25px; margin: 12px 0 0 0; color: #000000 !important;\">\n        Track, grow, and measure your visibility across Google, AI search, <a href=\"https:\/\/buradabiliyorum.com\/en\/category\/social-mediaa\/\" data-internallinksmanager029f6b8e52c=\"1\" title=\"Social Media\" target=\"_blank\" rel=\"noopener\">social<\/a>, local, and every channel that influences buying decisions.\n      <\/p>\n<\/p><\/div>\n<div style=\"margin-bottom: 15px;\">\n      <span id=\"semrush-one-cta\" style=\"display: inline-block; background-color: #FF642D; color: white; height: 44px; border: none; border-radius: 5px; cursor: pointer; font-size: 16px; padding: 0 24px; font-weight: bold; white-space: nowrap; box-sizing: border-box; text-decoration: none; line-height: 44px;\">Start your free trial<\/span>\n    <\/div>\n<\/p><\/div>\n<style>\n  @media (max-width: 768px) {\n    .headline-responsive {\n      font-size: 30px !important;\n      line-height: 1.3 !important;\n    }\n  }\n<\/style>\n<h2 id=\"h-phase-1-crawlers-arrive-as-the-test-begins\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Phase_1_Crawlers_arrive_as_the_test_begins\"><\/span>Phase 1: Crawlers arrive as the test begins<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p class=\"wp-block-paragraph\">Crawlers arrived fast and crawled hard for the first 72 hours.<\/p>\n<p class=\"wp-block-paragraph\">GPTBot swept the site within hours of deployment and crawled all 759 pages of the HTML group on day one, all the way down to class level. In the JS group, it hit all 10 section pages and stopped. It never reached a single division page.<\/p>\n<p class=\"wp-block-paragraph\">ClaudeBot followed the same pattern a day later: deep, systematic HTML crawling and a hard stop at the JavaScript boundary.<\/p>\n<p class=\"wp-block-paragraph\">Google\u2019s two crawlers behaved differently from each other. GoogleOther reached its first JS-injected division page 54 minutes after launch. Googlebot took 9.9 hours. Both worked progressively deeper into the JS hierarchy over the following days, which is only possible if they rendered the parent pages and followed the injected links. Google documents rendering for Googlebot. For GoogleOther, this is an observation from my logs, not documented behavior.<\/p>\n<p class=\"wp-block-paragraph\">The crawl burst lasted three days. On day four, discovery dropped about 90% for both groups, and the coverage numbers froze.<\/p>\n<p class=\"wp-block-paragraph\">Daily page discovery by crawler showing GoogleOther\u2019s three-day burst, GPTBot\u2019s single-day sweep, and Bingbot starting on day 10.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1560\" height=\"934\" http: alt=\"New unique pages discovered per day. GoogleOther\u2019s burst lasted three days. GPTBot and ClaudeBot swept the HTML group in a single day each. Bingbot\u2019s crawl burst began around day 10. Googlebot isn't plotted because its volume, 42 pages across both groups, doesn't register at this scale.\" class=\"wp-image-485239\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/02-discovery-velocity.png 1560w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/02-discovery-velocity-768x460.png 768w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/02-discovery-velocity-1536x920.png 1536w\" data-lazy-sizes=\"(max-width: 1560px) 100vw, 1560px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/02-discovery-velocity.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1560\" height=\"934\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/02-discovery-velocity.png\" alt=\"New unique pages discovered per day. GoogleOther\u2019s burst lasted three days. GPTBot and ClaudeBot swept the HTML group in a single day each. Bingbot\u2019s crawl burst began around day 10. Googlebot isn't plotted because its volume, 42 pages across both groups, doesn't register at this scale.\" class=\"wp-image-485239\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/02-discovery-velocity.png 1560w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/02-discovery-velocity-768x460.png 768w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/02-discovery-velocity-1536x920.png 1536w\" sizes=\"auto, (max-width: 1560px) 100vw, 1560px\"><figcaption class=\"wp-element-caption\"><em><em>New unique pages discovered per day. GoogleOther\u2019s burst lasted three days. GPTBot and ClaudeBot swept the HTML group in a single day each. Bingbot\u2019s crawl burst began around day 10. Googlebot isn\u2019t plotted because its volume, 42 pages across both groups, doesn\u2019t register at this scale.<\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<h3 id=\"h-only-google-executed-the-javascript\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Only_Google_executed_the_JavaScript\"><\/span>Only Google executed the JavaScript<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p class=\"wp-block-paragraph\">The full scorecard at the end of Phase 1, after 27 days, displays counts covering hierarchy pages only (division level and deeper), where a JS-group hit is unambiguous proof of JavaScript execution.\u00a0<\/p>\n<p class=\"wp-block-paragraph\">One sizing note: The HTML sections hold 748 hierarchy pages and the JS sections 293, so for Google, the table also shows coverage as a share of each group:<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Crawler<\/th>\n<th>Renders JS?<\/th>\n<th>HTML hierarchy pages<\/th>\n<th>JS hierarchy pages<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Googlebot<\/td>\n<td>Yes<\/td>\n<td>35 (5%)<\/td>\n<td>7 (2%)<\/td>\n<\/tr>\n<tr>\n<td>GoogleOther<\/td>\n<td>Yes<\/td>\n<td>495 (66%)<\/td>\n<td>142 (48%)<\/td>\n<\/tr>\n<tr>\n<td>GPTBot (OpenAI)<\/td>\n<td>No<\/td>\n<td>748<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td>ClaudeBot (Anthropic)<\/td>\n<td>No<\/td>\n<td>748<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td>Bingbot<\/td>\n<td>No<\/td>\n<td>282<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td>OAI-SearchBot (ChatGPT search)<\/td>\n<td>No<\/td>\n<td>10<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td>Meta-ExternalAgent (Meta AI)<\/td>\n<td>No<\/td>\n<td>537<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td>Amazonbot (Amazon)<\/td>\n<td>No<\/td>\n<td>735<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td>ChatGPT-User (live browsing)<\/td>\n<td>No<\/td>\n<td>46<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td>PerplexityBot<\/td>\n<td>No<\/td>\n<td>0<\/td>\n<td>0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<div style=\"height:25px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n<h3 id=\"h-even-google-barely-touched-the-javascript-pages\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Even_Google_barely_touched_the_JavaScript_pages\"><\/span>Even Google barely touched the JavaScript pages<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p class=\"wp-block-paragraph\">The two Google rows are doing very different jobs, and the difference matters more than the raw counts. Google\u2019s crawler stack, GoogleOther, passed the rendering test. Googlebot, the crawler that feeds Search, mostly sat it out. <\/p>\n<p class=\"wp-block-paragraph\">This means the 66% and 48% on the GoogleOther row say nothing about whether those pages can appear in Google. The row that speaks to search visibility is Googlebot: 5% of the HTML group and 2% of the JS group.<\/p>\n<p class=\"wp-block-paragraph\"><strong>Coverage varied by agent<\/strong><\/p>\n<p class=\"wp-block-paragraph\">The two groups differ in size, so the fair comparison is the share of each group\u2019s own pages that got crawled.<\/p>\n<p class=\"wp-block-paragraph\">Googlebot reached 5% of the 748 HTML-linked hierarchy pages and 2% of the 293 JS-linked ones. Six of the 10 JS sections got no Googlebot hierarchy crawl at all in 27 days. GoogleOther is where the volume was: 66% of the HTML group and 48% of the JS group, with its JS coverage falling by depth, from 67% of divisions to 42% of classes. <\/p>\n<p class=\"wp-block-paragraph\">Those are useful numbers for understanding how rendering behaves, and they aren\u2019t search visibility. For Search, the relevant figure is 2%.<\/p>\n<p class=\"wp-block-paragraph\">One caveat on that gap. GoogleOther out-crawled Googlebot roughly 14:1 on HTML pages here. I read that as a crawl-budget artifact of a brand-new domain with no external links, not as evidence that GoogleOther is the more thorough crawler. On an established site, I would expect Googlebot\u2019s share to be much higher.<\/p>\n<p class=\"wp-block-paragraph\">What the split does show is that a site owner watching raw crawl logs can badly overestimate their search coverage if they count every Google user agent as one crawler.<\/p>\n<p class=\"wp-block-paragraph\"><strong>JavaScript was discovered later than HTML\u00a0<\/strong><\/p>\n<p class=\"wp-block-paragraph\">GoogleOther accounts for nearly all of Google\u2019s crawling here, so its timings are the only ones with enough volume to measure. Its JS-linked pages were discovered 18% to 27% later than its HTML-linked pages at every depth.\u00a0<\/p>\n<p class=\"wp-block-paragraph\">The lag compounds: Google must fetch the parent, queue it for rendering, execute the script, extract the URLs, and then schedule the children. HTML links skip the middle steps.<\/p>\n<p class=\"wp-block-paragraph\"><strong>Distribution was uneven<\/strong><\/p>\n<p class=\"wp-block-paragraph\">GoogleOther\u2019s JS coverage wasn\u2019t spread thin evenly. One JS section got 52 pages crawled while two others sat at one page each for weeks. Rendering appears to be a queue with its own budget, and some branches never came up.<\/p>\n<p class=\"wp-block-paragraph\">Coverage of each link group over time for both Google crawlers, with GoogleOther flattening at 66% for HTML-linked pages and 48% for JavaScript-linked pages while Googlebot stays near the floor at 5% and 2%.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1645\" height=\"903\" http: alt=\"Share of each group\u2019s pages discovered, by day, split by crawler. The two GoogleOther lines locked in during the initial burst and stayed flat. Googlebot, the indexing crawler, never left the bottom of the chart.\" class=\"wp-image-485241\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/04-google-coverage-gap.png 1645w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/04-google-coverage-gap-768x422.png 768w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/04-google-coverage-gap-1536x843.png 1536w\" data-lazy-sizes=\"(max-width: 1645px) 100vw, 1645px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/04-google-coverage-gap.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1645\" height=\"903\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/04-google-coverage-gap.png\" alt=\"Share of each group\u2019s pages discovered, by day, split by crawler. The two GoogleOther lines locked in during the initial burst and stayed flat. Googlebot, the indexing crawler, never left the bottom of the chart.\" class=\"wp-image-485241\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/04-google-coverage-gap.png 1645w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/04-google-coverage-gap-768x422.png 768w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/04-google-coverage-gap-1536x843.png 1536w\" sizes=\"auto, (max-width: 1645px) 100vw, 1645px\"><figcaption class=\"wp-element-caption\"><em><em>Share of each group\u2019s pages discovered, by day, split by crawler. The two GoogleOther lines locked in during the initial burst and stayed flat. Googlebot, the indexing crawler, never left the bottom of the chart.<\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<p class=\"wp-block-paragraph\">One result ran against my expectations: Once GoogleOther discovered a JS-linked page, it recrawled it as fast as comparable HTML pages, and at two of the three depth levels 24% to 27% faster. The JavaScript delay is entirely front-loaded in discovery. <\/p>\n<p class=\"wp-block-paragraph\">Once a page gets past that stage, it\u2019s treated normally, sometimes even better than normal. The pages that never get past it are the ones that hurt. They aren\u2019t ranking slowly. They just aren\u2019t there at all.<\/p>\n<p><!-- START INLINE FORM --><\/p>\n<p><!-- END INLINE FORM --><\/p>\n<hr class=\"wp-block-separator has-text-color has-cyan-bluish-gray-color has-css-opacity has-cyan-bluish-gray-background-color has-background\">\n<h3 id=\"h-all-other-crawlers-ignored-the-javascript-group\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"All_other_crawlers_ignored_the_JavaScript_group\"><\/span>All other crawlers ignored the JavaScript group<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p class=\"wp-block-paragraph\">My middleware initially lumped Meta-ExternalAgent and Amazonbot into a generic \u201cunknown bot\u201d bucket, but splitting the logs by user agent revealed them as two of the heaviest crawlers on the site, with roughly 2,000 hits each.<a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/developers.facebook.com\/docs\/sharing\/webmasters\/web-crawlers\">\u00a0<\/a><\/p>\n<p class=\"wp-block-paragraph\"><a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/developers.facebook.com\/docs\/sharing\/webmasters\/web-crawlers\" target=\"_blank\" rel=\"noopener\">Meta-ExternalAgent<\/a> is the crawler Meta uses to gather training data for its AI models. <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/developer.amazon.com\/amazonbot\" target=\"_blank\" rel=\"noopener\">Amazonbot<\/a> feeds Amazon\u2019s search and AI products. Both crawled the HTML group deeply, hit the 10 JS-group section pages, and never went one level further.<\/p>\n<p class=\"wp-block-paragraph\">HTML versus JavaScript page discovery per crawler, with only Googlebot and GoogleOther showing any JavaScript-linked pages.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1700\" height=\"917\" http: alt=\"Unique hierarchy pages discovered per crawler during Phase 1, with Googlebot and GoogleOther counted separately. Only Google\u2019s two crawlers registered any JavaScript-linked coverage, and almost all of it belongs to GoogleOther, which doesn't build the search index.\" class=\"wp-image-485242\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/03-crawler-scorecard.png 1700w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/03-crawler-scorecard-768x414.png 768w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/03-crawler-scorecard-1536x829.png 1536w\" data-lazy-sizes=\"(max-width: 1700px) 100vw, 1700px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/03-crawler-scorecard.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1700\" height=\"917\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/03-crawler-scorecard.png\" alt=\"Unique hierarchy pages discovered per crawler during Phase 1, with Googlebot and GoogleOther counted separately. Only Google\u2019s two crawlers registered any JavaScript-linked coverage, and almost all of it belongs to GoogleOther, which doesn't build the search index.\" class=\"wp-image-485242\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/03-crawler-scorecard.png 1700w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/03-crawler-scorecard-768x414.png 768w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/03-crawler-scorecard-1536x829.png 1536w\" sizes=\"auto, (max-width: 1700px) 100vw, 1700px\"><figcaption class=\"wp-element-caption\"><em><em>Unique hierarchy pages discovered per crawler during Phase 1, with Googlebot and GoogleOther counted separately. Only Google\u2019s two crawlers registered any JavaScript-linked coverage, and almost all of it belongs to GoogleOther, which doesn\u2019t build the search index.<\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<p class=\"wp-block-paragraph\">The zeros held for the entire phase. Bingbot was active on 20 of the 27 days of Phase 1, recrawled the 10 JS-group section pages on 18 of those days, and never followed one injected link.<\/p>\n<p class=\"wp-block-paragraph\">GPTBot crawled the entire HTML group and 0% of the JS hierarchy.<\/p>\n<p class=\"wp-block-paragraph\">PerplexityBot stayed on the homepage and robots.txt for all of Phase 1. It reached its first hierarchy page on day 40, well after the recovery portion of the test began.<\/p>\n<h3 id=\"h-something-odd-happened-with-bingbot\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Something_odd_happened_with_Bingbot\"><\/span>Something odd happened with Bingbot<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p class=\"wp-block-paragraph\">Bingbot did reach three JS-group hierarchy pages on days 26 and 27, after three weeks of daily recrawls that never went past the section level. However, the crawl pattern points to discovery through another path rather than JavaScript execution, since Bingbot\u2019s coverage of those sections never expanded beyond those isolated URLs.<\/p>\n<p class=\"wp-block-paragraph\">Microsoft has documented an evergreen, Edge-based Bingbot that can render JavaScript since 2019, but across 20 days of active crawling on this site, it never followed a single injected link, so whatever rendering capacity exists wasn\u2019t applied here.<\/p>\n<h3 id=\"h-user-requests-from-ai-could-not-reach-javascript-links\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"User_requests_from_AI_could_not_reach_JavaScript_links\"><\/span>User requests from AI could not reach JavaScript links<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p class=\"wp-block-paragraph\">ChatGPT-User deserves attention because it represents real user demand. This is <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/platform.openai.com\/docs\/bots\" target=\"_blank\" rel=\"noopener\">the agent that fetches pages when someone asks ChatGPT a question<\/a>.<\/p>\n<p class=\"wp-block-paragraph\">During the experiment, real user queries pulled it to dozens of HTML-linked pages. Pages behind JavaScript links were unreachable for those same queries. So the pages a real person was actively trying to reach were exactly the ones it couldn\u2019t get to.<\/p>\n<h3 id=\"h-crawl-logs-don-t-reveal-indexing\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Crawl_logs_dont_reveal_indexing\"><\/span>Crawl logs don\u2019t reveal indexing<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p class=\"wp-block-paragraph\">Everything above is discovery, not indexing. A page can be crawled and still not make it into the index, and indexing determines whether the page shows up in Search at all.\u00a0<\/p>\n<p class=\"wp-block-paragraph\">Server logs are the right tool for proving what a crawler could reach, which is the question this experiment was built to answer, but they\u2019re the wrong tool for proving visibility. Search Console is the arbiter there.<\/p>\n<h2 id=\"h-phase-2-not-all-crawlers-passed-the-recovery-test\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Phase_2_Not_all_crawlers_passed_the_recovery_test\"><\/span>Phase 2: Not all crawlers passed the recovery test<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p class=\"wp-block-paragraph\">After 27 days, I converted all JavaScript links to hard-coded HTML and watched what happened. Nothing about the pages themselves changed here. The URLs, the content, and the server were identical to Phase 1. The one thing I touched was the links, which now sat in the HTML instead of being injected by JavaScript.<\/p>\n<h3 id=\"h-some-crawlers-were-quick-to-catch-up\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Some_crawlers_were_quick_to_catch_up\"><\/span>Some crawlers were quick to catch up<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p class=\"wp-block-paragraph\">GPTBot responded within two days. It swept every formerly blocked section in a single sweep lasting under three hours and picked up 250 pages it had never crawled before, against zero in 27 days of Phase 1.<\/p>\n<p class=\"wp-block-paragraph\">Bingbot followed with a systematic sweep, adding 212 pages across the same sections it had ignored for weeks, reaching class level in sections where it had never gone past the entrance.<\/p>\n<p class=\"wp-block-paragraph\">Meta-ExternalAgent joined by day 41 with a sweep of its own.<\/p>\n<h3 id=\"h-others-were-not\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Others_were_not\"><\/span>Others were not<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p class=\"wp-block-paragraph\">Amazonbot had finished its crawl and left the site on day 21, six days before the conversion, so its JS-group coverage ended at zero.<\/p>\n<p class=\"wp-block-paragraph\">ClaudeBot stayed at zero in a different way: It kept recrawling the site after the fix, hundreds of hits through day 41, but only on pages it already knew. It never picked up a single newly linked page. Whatever internal map ClaudeBot drew on its first pass, it seemed to keep working from that same map for weeks, even as it carried on hitting the site.<\/p>\n<p class=\"wp-block-paragraph\">Cumulative page discovery before and after the conversion to HTML links after 27 days, showing immediate recovery by GPTBot and Bingbot, a flat GoogleOther line, and a Googlebot line at the floor.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1673\" height=\"979\" http: alt=\"05 Phase2 Recovery\" class=\"wp-image-485243\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/05-phase2-recovery.png 1673w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/05-phase2-recovery-768x449.png 768w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/05-phase2-recovery-1536x899.png 1536w\" data-lazy-sizes=\"(max-width: 1673px) 100vw, 1673px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/05-phase2-recovery.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1673\" height=\"979\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/05-phase2-recovery.png\" alt=\"05 Phase2 Recovery\" class=\"wp-image-485243\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/05-phase2-recovery.png 1673w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/05-phase2-recovery-768x449.png 768w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/05-phase2-recovery-1536x899.png 1536w\" sizes=\"auto, (max-width: 1673px) 100vw, 1673px\"><figcaption class=\"wp-element-caption\"><em><em>Cumulative hierarchy pages found in the 10 JS-group sections, with the Google crawlers shown separately. After the HTML conversion, GPTBot swept 250 pages in one pass, and Bingbot and Meta-ExternalAgent climbed steadily, while both Google lines stayed flat. Amazonbot left before the fix. ClaudeBot returned only to recrawl pages it already knew.<\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<p class=\"wp-block-paragraph\">The slowest responder, ironically, was Google. Its aggressive first-visit budget was already spent. By day 41, Googlebot had visited exactly one page in the converted sections, and GoogleOther had visited none. <\/p>\n<p class=\"wp-block-paragraph\">Fixing link architecture after launch recovered AI crawler coverage quickly, but with Google, that first crawl of a brand-new site looks a lot harder to win back a second time.<\/p>\n<div style=\"background: radial-gradient(circle at 30% 40%, rgba(184, 111, 255, 0.15), rgba(0, 169, 255, 0.15) 40%, #CDE8FD 70%); padding: 30px; width: 100%; max-width: 802px; color: #000000 !important; font-family: Arial, sans-serif; margin: 25px 0 30px 0; border-radius: 8px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); position: relative; box-sizing: border-box;\">\n<div style=\"width: 100%; max-width: 100%; margin-bottom: 20px; text-align: left; padding-right: 20px; box-sizing: border-box;\">\n<div id=\"semrush-one-headline\" class=\"headline-responsive\" style=\"font-family: Oswald, sans-serif; font-size: 30px; font-weight: normal; margin: 0; color: #000000 !important; line-height: 1.2;\">\n        Own the conversation <span style=\"background: linear-gradient(90deg, #D56EFE 0%, #068EF8 51%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;\">before your competitors<\/span>.\n      <\/div>\n<p id=\"semrush-one-subhead\" style=\"font-family: Roboto, sans-serif; font-size: 18px; font-weight: 300; line-height: 25px; margin: 12px 0 0 0; color: #000000 !important;\">\n        See where your brand appears, where it doesn\u2019t, and exactly how to win more visibility across search, AI, local, social, and every channel that matters.\n      <\/p>\n<\/p><\/div>\n<div style=\"margin-bottom: 15px;\">\n      <span id=\"semrush-one-cta\" style=\"display: inline-block; background-color: #FF642D; color: white; height: 44px; border: none; border-radius: 5px; cursor: pointer; font-size: 16px; padding: 0 24px; font-weight: bold; white-space: nowrap; box-sizing: border-box; text-decoration: none; line-height: 44px;\">Start your free trial<\/span>\n    <\/div>\n<\/p><\/div>\n<style>\n  @media (max-width: 768px) {\n    .headline-responsive {\n      font-size: 30px !important;\n      line-height: 1.3 !important;\n    }\n  }\n<\/style>\n<h2 id=\"h-what-i-d-tell-a-client\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_Id_tell_a_client\"><\/span>What I\u2019d tell a client<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p class=\"wp-block-paragraph\">Iceberg-style diagram showing every HTML-linked page found by at least one crawler at every depth, against GoogleOther coverage of JavaScript-linked pages falling from 67% to 42% as depth increases and Googlebot coverage at 5% or below.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1739\" height=\"1260\" http: alt=\"The whole experiment in one picture. Above the waterline, every crawler saw everything. Below it, every HTML-linked page was found by at least one crawler, while the JavaScript-linked side was reached only by Google, and mostly by GoogleOther rather than by the crawler that builds the index.\" class=\"wp-image-485244\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/06-crawl-iceberg.png 1739w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/06-crawl-iceberg-768x556.png 768w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/06-crawl-iceberg-1536x1113.png 1536w\" data-lazy-sizes=\"(max-width: 1739px) 100vw, 1739px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/06-crawl-iceberg.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1739\" height=\"1260\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/06-crawl-iceberg.png\" alt=\"The whole experiment in one picture. Above the waterline, every crawler saw everything. Below it, every HTML-linked page was found by at least one crawler, while the JavaScript-linked side was reached only by Google, and mostly by GoogleOther rather than by the crawler that builds the index.\" class=\"wp-image-485244\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/06-crawl-iceberg.png 1739w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/06-crawl-iceberg-768x556.png 768w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/08\/06-crawl-iceberg-1536x1113.png 1536w\" sizes=\"auto, (max-width: 1739px) 100vw, 1739px\"><figcaption class=\"wp-element-caption\"><em><em>The whole experiment in one picture. Above the waterline, every crawler saw everything. Below it, every HTML-linked page was found by at least one crawler, while the JavaScript-linked side was reached only by Google, and mostly by GoogleOther rather than by the crawler that builds the index.<\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<p class=\"wp-block-paragraph\">This is one site, one niche, one 41-day window, and a fresh domain with no external links pointing at the buried pages. Established sites with strong signals may see Googlebot invest more in rendering.\u00a0<\/p>\n<p class=\"wp-block-paragraph\">The non-Google results leave less room for interpretation: Eight crawlers failed to execute the JavaScript and follow the injected links across every crawl burst and recrawl cycle.<\/p>\n<p class=\"wp-block-paragraph\">My takeaways:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>Audit what your raw HTML actually contains.<\/strong> Disable JavaScript and click through your critical paths, or compare the raw source against the rendered DOM. If navigation to revenue pages only exists after hydration, every AI crawler is blind to it.<\/li>\n<li><strong>Treat \u201cGoogle renders JS\u201d as the exception, and a partial one.<\/strong> Rendering happened, but the crawler that feeds Search reached 2% of my JS-linked pages. Check which Google user agent your logs are actually showing you before you count that coverage as visibility.<\/li>\n<li><strong>Prioritize server-side rendering for links above content.<\/strong> A widget that renders in JavaScript just makes a page slightly worse. Navigation that renders in JavaScript is a different problem because it can drop whole sections of your site out of every index that feeds an AI assistant.<\/li>\n<li><strong>Fix it sooner rather than later.<\/strong> GPTBot re-swept within 48 hours of my Phase 2 conversion, and Bingbot within a week. Google took weeks and still hadn\u2019t returned to the converted sections by day 41.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">The rendering question used to be about whether Google could see your content. With AI assistants becoming a real referral channel and the web reshaping itself around agents, the question is now whether other crawlers can. If your links live in JavaScript, they can\u2019t.<\/p>\n<div class=\"ttd-topics-display\">\n<div class=\"ttd-topics-content\">\n<h5><span class=\"ez-toc-section\" id=\"Topics_on_this_page\"><\/span>Topics on this page<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<div class=\"ttd-topics-links\">Search engine indexingGoogleGooglebotHTMLAmazon.comAnthropicArtificial intelligenceBingbotBraveChatGPTClient-side renderingGoogle Search ConsoleGPTBotJavaScriptLarge language modelMeta AIMicrosoftMicrosoft EdgeOpenAISearch engine optimizationServer-side renderingURLWeb crawler<\/div>\n<\/div>\n<div class=\"ttd-topics-show-extra-button\">+19 more<\/div>\n<\/div>\n<\/div>\n<blockquote><p><strong><span style=\"color: #ff6600;\">If you liked the article, do not forget to share it with your friends. Follow us on\u00a0<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/news.google.com\/publications\/CAAqBwgKMN63nwsw68G3Aw\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Google News<\/a><\/span>\u00a0too, click on the star and choose us from your favorites.<\/span><\/strong><\/p><\/blockquote>\n<blockquote>\n<p style=\"text-align: center;\"><strong>If you want to read more like this article, you can visit our <span style=\"color: #ff9900;\"><a style=\"color: #ff9900;\" href=\"https:\/\/buradabiliyorum.com\/en\/category\/technology\/\" target=\"_blank\" >Technology<\/a><\/span> category.<\/strong><\/p>\n<\/blockquote>\n<p><span style=\"color: black;\"><a style=\"color: #ff9900;\" href=\"https:\/\/searchengineland.com\/javascript-links-pages-invisible-ai-search-485228\" target=\"_blank\" >Source<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A 41-day experiment reveals how JavaScript-only navigation limits AI crawler discovery and why fixing it later can be harder. \u201cGoogle renders JavaScript\u201d has been the standard answer to client-side rendering concerns for years, and it got easier to believe in 2019, when Googlebot went evergreen, continuously running on the latest version of Chromium. The increasing&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[18],"tags":[],"class_list":["post-744479","post","type-post","status-publish","format-standard","hentry","category-technology"],"_links":{"self":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/744479","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/comments?post=744479"}],"version-history":[{"count":0,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/744479\/revisions"}],"wp:attachment":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media?parent=744479"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/categories?post=744479"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/tags?post=744479"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}