<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
>
<channel>
<title>Prerender</title>
<atom:link href="https://prerender.io/feed/" rel="self" type="application/rss+xml" />
<link>https://prerender.io</link>
<description>Prerender. JavaScript SEO, solved with Dynamic Rendering</description>
<lastBuildDate>Wed, 11 Nov 2026 15:21:42 +0000</lastBuildDate>
<language>en-US</language>
<sy:updatePeriod>
hourly </sy:updatePeriod>
<sy:updateFrequency>
1 </sy:updateFrequency>
<generator>https://wordpress.org/?v=7.1.4</generator>
<image>
<url>https://prerender.io/wp-content/uploads/elementor/thumbs/favicon-q56ul9r33xk0t0yozh3030jpsla5grkcduyxi7g0dk.png</url>
<title>Prerender</title>
<link>https://prerender.io</link>
<width>32</width>
<height>32</height>
</image>
<item>
<title>Prerender.io Partners with Why SEO Serious to Bring JavaScript SEO to High-Growth Platforms</title>
<link>https://prerender.io/blog/prerender-partners-with-why-seo-serious/</link>
<dc:creator><![CDATA[Prerender]]></dc:creator>
<pubDate>Wed, 11 Nov 2026 15:21:40 +0000</pubDate>
<category><![CDATA[News and Updates]]></category>
<category><![CDATA[partnership announcements]]></category>
<category><![CDATA[partnerships]]></category>
<category><![CDATA[prerender partnership]]></category>
<guid isPermaLink="false">https://prerender.io/?p=15950</guid>
<description><![CDATA[Prerender.io and Why SEO Serious partner to make JavaScript-heavy fintech, crypto, and ecommerce sites fully visible in search and AI answers.]]></description>
<content:encoded><![CDATA[ <div data-elementor-type="wp-post" data-elementor-id="15950" class="elementor elementor-15950" data-elementor-post-type="post">
<div class="elementor-element elementor-element-77d8e605 e-flex e-con-boxed e-con e-parent" data-id="77d8e605" data-element_type="container" data-e-type="container" data-settings="{"jet_parallax_layout_list":[]}">
<div class="e-con-inner">
<div class="elementor-element elementor-element-7b6184cf elementor-widget elementor-widget-text-editor" data-id="7b6184cf" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
<div class="elementor-widget-container">
<p><span style="font-weight: 400;">Prerender.io is pleased to announce a new strategic partnership with </span><a href="https://whyseoserious.com/"><span style="font-weight: 400;">Why SEO Serious</span></a><span style="font-weight: 400;">, an organic growth agency that has been helping businesses grow through search since 2020.</span></p>
<p><span style="font-weight: 400;">Why SEO Serious approaches SEO with a product mindset. The team combines content-led marketing with analytics across technical SEO, link building, content marketing, SEO PR, reputation management, and data analytics. Their clients cover financial services, blockchain and crypto, ecommerce, media, and ad platforms.</span></p>
<p><span style="font-weight: 400;">The partnership pairs Why SEO Serious’s organic growth work with Prerender.io’s technical SEO solution. Together they address a problem that shows up across verticals: making sure JavaScript-built websites are fully visible to machines.</span></p>
<p><b style="font-family: Montserrat, sans-serif; font-size: 36px;">When a modern stack becomes a visibility problem</b></p>
<p><span style="font-weight: 400;">Fintech platforms, crypto exchanges, and large ecommerce stores often run on React, Angular, or Vue. These frameworks give users a fast, interactive experience, yet machines often receive an incomplete version of the same page, if they are even able to access the pages at all. </span></p>
<p><span style="font-weight: 400;">As a result, new pages go undiscovered, product details in search fall out of date, and AI tools have less to draw on when answering customers’ questions.</span></p>
<p><span style="font-weight: 400;">These risks are especially important in the complex projects where Why SEO Serious has particularly deep expertise: site migrations, international SEO, and multi-market rollouts. The agency helps clients manage these transitions strategically, protecting organic visibility, rankings, and commercial performance as websites move to new frameworks, domain structures, or language versions.</span></p>
<p><span style="font-weight: 400;">When JavaScript rendering becomes one of the barriers to that visibility, Prerender.io helps close the gap. It gives machines a complete, readable version of every page. Visitors see no difference, and client developers don’t need to change their code.</span></p>
<p><span style="font-weight: 400;">As more discovery moves from traditional search to AI platforms, visibility to LLMs is now as important as visibility to Google. With this partnership, Why SEO Serious can offer clients both, whatever framework clients’ sites run on.</span></p>
<blockquote>
<p><b><i>“</i></b><i><span style="font-weight: 400;">On most JavaScript-heavy sites we work on, the rendering problem is not a mystery. Everyone knows what is broken. The fix just sits in the engineering backlog for months while pages stay out of the index. Prerender.io lets us close that gap without waiting for the client to rebuild their front end.”</span></i><span style="font-weight: 400;"> – <a href="https://www.linkedin.com/in/greg-andreevsky/">Greg Andreevsky</a>, CEO, Why SEO Serious. </span></p>
</blockquote>
<blockquote>
<p><span style="font-weight: 400;"> </span></p>
</blockquote>
<p><b style="font-family: Montserrat, sans-serif; font-size: 36px;">What Why SEO Serious clients can expect</b></p>
<p><span style="font-weight: 400;">For Why SEO Serious, the partnership adds a technical layer that makes their existing work more effective, without adding complexity to client projects. Clients can expect:</span></p>
<ul>
<li style="font-weight: 400;" aria-level="1"><b>Faster indexation</b><span style="font-weight: 400;"> of new and updated pages, so launches, listings, and content updates reach search results sooner</span></li>
<li style="font-weight: 400;" aria-level="1"><b>Complete content visibility</b><span style="font-weight: 400;"> across machines including dynamic and frequently changing pages</span></li>
<li style="font-weight: 400;" aria-level="1"><b>Safer migrations and multi-region launches</b><span style="font-weight: 400;">, with less risk of losing rankings during framework or domain changes</span></li>
</ul>
<p><span style="font-weight: 400;">The two companies cover different pieces of the visibility puzzle. Why SEO Serious builds the strategy, content, and authority that earn rankings. Prerender.io makes sure machines and their crawlers can see that work.</span></p>
<blockquote>
<p><i><span style="font-weight: 400;">“Why SEO Serious brings deep technical SEO expertise to industries where sites are complex and change constantly. Their clients are exactly the kind of businesses that lose the most when search engines and AI crawlers can’t see their content. We’re excited to help their team and clients keep pace as search and AI discovery evolve.” – </span></i><span style="font-weight: 400;"><a href="https://www.linkedin.com/in/marcos-withington/">Marcos Withington</a>, Head of Partnerships at Prerender.io</span></p>
</blockquote>
<h3><b>About Why SEO Serious</b></h3>
<p><span style="font-weight: 400;">Why SEO Serious is an international, data-driven organic marketing agency with more than 150 experts. Its services span SEO and AI search visibility, ASO, content marketing, link building, and reputation management. The agency works with businesses across industries, including fintech, crypto, ecommerce, and media, using analytics to guide strategy and measure results.</span></p>
<p><span style="font-weight: 400;">Why SEO Serious also develops standalone products: </span><a href="https://aora.org/"><span style="font-weight: 400;">AORA</span></a><span style="font-weight: 400;"> analyzes how website changes relate to search rankings; </span><a href="https://d2tr.com/"><span style="font-weight: 400;">Discover Trends</span></a><span style="font-weight: 400;"> helps teams identify and analyze trends in Google Discover; and </span><a href="https://scrapering.com/"><span style="font-weight: 400;">Scrapering</span></a><span style="font-weight: 400;"> provides tools for collecting search results and web content.</span></p>
<h3><b>About Prerender.io</b></h3>
<p><a href="https://prerender.io/"><span style="font-weight: 400;">Prerender.io</span></a><span style="font-weight: 400;"> is a technical SEO solution that helps websites ensure their JavaScript content is fully visible to search engines and generative AI tools. Used by thousands of companies worldwide, including Microsoft and Walmart, Prerender.io solves critical SEO challenges for modern websites.</span></p>
<p><span style="font-weight: 400;">Interested in becoming a </span><a href="https://prerender.io/partners/"><span style="font-weight: 400;">Prerender.io Partner</span></a><span style="font-weight: 400;">? </span><a href="https://prerender.io/partners/#join"><span style="font-weight: 400;">Get in touch</span></a><span style="font-weight: 400;">.</span></p> </div>
</div>
</div>
</div>
</div>
]]></content:encoded>
</item>
<item>
<title>The Invisible Catalog: Can AI See Your B2B Products?</title>
<link>https://prerender.io/blog/the-invisible-catalog-can-ai-see-your-b2b-products/</link>
<dc:creator><![CDATA[Prerender]]></dc:creator>
<pubDate>Thu, 05 Nov 2026 11:51:56 +0000</pubDate>
<category><![CDATA[Ecommerce SEO]]></category>
<category><![CDATA[B2B catalogs]]></category>
<category><![CDATA[ecommerce seo]]></category>
<guid isPermaLink="false">https://prerender.io/?p=15868</guid>
<description><![CDATA[Your buyers now build shortlists inside AI assistants. If your products aren’t in the answer, you aren’t in the running. Here are the two walls that keep most large B2B catalogs invisible to AI.]]></description>
<content:encoded><![CDATA[<p class="wp-block-paragraph">Your buyers are building their shortlists inside AI assistants. Ask one for a supplier in your category, and you get an answer, not a list of links. A few suppliers are named, but the rest don’t exist for that buyer</p>
<p class="wp-block-paragraph">If your products aren’t in that answer, you aren’t in the running. And you may never see the traffic you lost.</p>
<p class="wp-block-paragraph">For most large B2B catalogs, the cause isn’t weak content or bad SEO. It’s two barriers between the catalog and the machines doing the reading, and most teams aren’t watching either. We mapped both with our partner <a href="https://virtocommerce.com/">Virto Commerce</a> in a new field guide. Here’s the short version.</p>
<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="#downloadplaybook">Get the field guide</a></div>
</div>
<h2 class="wp-block-heading">Discovery moved. Your catalog didn’t.</h2>
<p class="wp-block-paragraph">For 20 years, the job was to rank. Now buyers ask an AI assistant, and it names a few suppliers. The shelf is no longer a results page. It’s the context an AI model can pull together about you when someone asks.</p>
<p class="wp-block-paragraph">Virto Commerce founder <a href="https://www.linkedin.com/in/evgeny-grigul/">Evgeny Grigul </a>calls where this leads the “dark digital catalog”: catalogs that exist to be read by machines more than browsed by people.</p>
<h2 class="wp-block-heading">Two walls between your catalog and AI</h2>
<p class="wp-block-paragraph">Machines only recommend what they can read and reach. For most large B2B catalogs, they can do neither.</p>
<h3 class="wp-block-heading">Wall 1: AI crawlers can’t read it</h3>
<p class="wp-block-paragraph">Modern catalogs run on JavaScript, built for people. GPTBot, PerplexityBot, and most other machine crawlers don’t run it. They read the HTML your server sends and stop there. On a JavaScript-heavy catalog, that’s a near-empty shell with no visible products, no prices, no specs.</p>
<p class="wp-block-paragraph">Speed makes it worse. Across 18 enterprise retail catalogs and about 3 million pages, 93% took longer than 5 seconds to fully load. Crawlers that do render work on a limited budget, so pages this heavy risk being indexed incomplete, or not at all.</p>
<h3 class="wp-block-heading">Wall 2: AI crawlers can’t reach it</h3>
<p class="wp-block-paragraph">Even a perfectly rendered page is missing what matters most in B2B. Prices, availability, assortments, and contract terms sit behind a login. Lavazza by Bluespresso kept thousands of customer price lists by hand, one per client. No crawler or agent was ever going to see them.</p>
<p class="wp-block-paragraph">The answer isn’t to publish everything. In B2B, a product doesn’t fully exist until it sits inside a buyer, a contract, and a region.</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>“The question is never just ‘can AI see my catalog.’ It’s ‘which version of my catalog should AI see, and where does that stop.’</em> <a href="https://www.linkedin.com/in/olegzuk/">Oleg Zhuk</a>, CTO, Virto Commerce</p>
</blockquote>
<h2 class="wp-block-heading">Get the full field guide</h2>
<p class="wp-block-paragraph"><em>The Invisible Catalog</em>, written with Virto Commerce, covers:</p>
<ul class="wp-block-list">
<li>A 10-minute AI visibility baseline, plus rendering and entity checks to find the cause</li>
<li>How to make your catalog readable to AI crawlers without a rebuild, and which pages to prioritize</li>
<li>How to define a public layer AI can see, keep pricing and contract terms behind the login, and why that isn’t cloaking</li>
<li>Case snapshots from KW Parts, Lavazza by Bluespresso, HEINEKEN, and Haarshop</li>
<li>A six-step framework and readiness checklist your team can start this week</li>
</ul>
<p class="wp-block-paragraph">Your buyers are already asking. Find out what the machines can see.</p>
<h2 id="downloadplaybook" class="wp-block-heading downloadplaybook">Download the field guide</h2>
<style data-wp-block-html="css">
downloadplaybook
</style>
<p><script charset="utf-8" type="text/javascript" src="//js-eu1.hsforms.net/forms/embed/v2.js"></script><br />
<script>
hbspt.forms.create({
portalId: "25756777",
formId: "b31c7abb-33d5-47c3-b996-ba8c728458e4",
region: "eu1"
});
</script></p>
]]></content:encoded>
</item>
<item>
<title>Building Search Performance: What the pilot taught us</title>
<link>https://prerender.io/blog/building-search-performance/</link>
<dc:creator><![CDATA[Prerender]]></dc:creator>
<pubDate>Wed, 04 Nov 2026 16:45:53 +0000</pubDate>
<category><![CDATA[AI SEO]]></category>
<category><![CDATA[Podcast]]></category>
<category><![CDATA[AEO]]></category>
<category><![CDATA[AI Search]]></category>
<category><![CDATA[GEO]]></category>
<category><![CDATA[search performance]]></category>
<category><![CDATA[seo]]></category>
<guid isPermaLink="false">https://prerender.io/?p=15864</guid>
<description><![CDATA[Search Console shows what Google did with your site. It doesn’t show what Googlebot was handed. Senior Product Manager Aliya Mirzakhmet explains how we built Search Performance to put both side by side, what the pilot taught us, and two misconceptions worth dropping.]]></description>
<content:encoded><![CDATA[
<p class="wp-block-paragraph">Google Search Console tells you what Google did with your site: impressions, clicks, and which pages got indexed. It can show the page Google fetched, but one URL at a time, and only its latest visit. What your site handed Googlebot and what happened next in search have always lived in different tools.</p>
<p class="wp-block-paragraph">On this episode of Get Discovered, host Joe Walsh talks to Aliya Mirzakhmet, Senior Product Manager at Prerender. Aliya led the build of Search Performance, a new feature in the Prerender platform that puts both views side by side</p>
<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://www.youtube.com/watch?v=w0m_clm2yBI" target="_blank" rel="noopener">Listen now</a></div>
</div>
<h2 class="wp-block-heading">Why Google Search Console data alone isn’t enough</h2>
<p class="wp-block-paragraph">The gap wasn’t only technical. The person who signed up for Prerender might sit in marketing, while the person in Search Console sits in engineering. “Connecting two datasets was not only two different tools,” Aliya says. “It’s also different workflows of two different teams.”</p>
<p class="wp-block-paragraph">Search Performance shows how Prerender delivered pages to Googlebot next to how they performed in search. It also shows Prerender’s value without the riskiest test there is: switching it off and waiting for traffic to recover.</p>
<h2 class="wp-block-heading"><strong>What is an API-agnostic integration platform?</strong></h2>
<p class="wp-block-paragraph">Picture an airport. It serves many airlines from the same runways. Nobody builds a new airport for each airline. Search Performance runs on that kind of reusable foundation, and Search Console is the first source connected to it.</p>
<h3 class="wp-block-heading">Building Search Performance: three lessons from the pilot</h3>
<p class="wp-block-paragraph">Before building the feature in the product, the team sent pilot customers PDF reports with aggregated data. Three lessons came back:</p>
<ol class="wp-block-list">
<li><strong>URL matching is the core.</strong> Each source formats URLs its own way. One clean URL across sources is what makes the data tell a story.</li>
<li><strong>Accurate isn’t actionable.</strong> Customers trusted the numbers, then asked to check specific URLs. Aliya took that as a good sign.</li>
<li><strong>Names matter.</strong> Labels like “visible” and “not visible” confused people, so they changed.</li>
</ol>
<h2 class="wp-block-heading"><strong>How Search Performance groups your URLs</strong></h2>
<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><th class="has-text-align-left" data-align="left">Group</th><th class="has-text-align-left" data-align="left">What it means</th><th class="has-text-align-left" data-align="left">What to check</th></tr><tr><td class="has-text-align-left" data-align="left">Crawled, with impressions</td><td class="has-text-align-left" data-align="left">Prerender served the page to Googlebot, and it earned impressions</td><td class="has-text-align-left" data-align="left">The sections that matter most to you</td></tr><tr><td class="has-text-align-left" data-align="left">Crawled, no impressions</td><td class="has-text-align-left" data-align="left">Prerender served it, but it earned no impressions</td><td class="has-text-align-left" data-align="left">Whether that’s expected: parameter URLs, thin pages, or new pages</td></tr><tr><td class="has-text-align-left" data-align="left">Not served, has impressions</td><td class="has-text-align-left" data-align="left">The page earns impressions, but Prerender didn’t serve it</td><td class="has-text-align-left" data-align="left">Your coverage. It may be on purpose, or part of your site isn’t connected</td></tr></tbody></table></figure>
<h2 class="wp-block-heading"><strong>Can you trust Search Performance data?</strong></h2>
<p class="wp-block-paragraph">Search Performance doesn’t recreate Google’s data. Customers give consent, choose their domains, and the feature combines two datasets. The search numbers come from Google. What Prerender adds is where it sits: it handed Google the page, so it knows what Googlebot got. Search Performance shows where the two halves don’t line up.</p>
<h2 class="wp-block-heading"><strong>Impressions vs. indexing: two Search Console misconceptions</strong></h2>
<p class="wp-block-paragraph"><strong>No impressions doesn’t mean not indexed.</strong> Search Console’s performance data only lists URLs with impressions. A page can be indexed and still have none.</p>
<p class="wp-block-paragraph"><strong>Fixing rendering doesn’t show in traffic the next day.</strong> “We serve the pages to the machines,” Aliya says, “and the rest is out of our control.” How soon Googlebot or GPTBot returns is up to Google and OpenAI.</p>
<h2 class="wp-block-heading">What to check in Google Search Console this week</h2>
<p class="wp-block-paragraph">In Search Console, open the Performance report, check your indexing data, and inspect the pages you care about most. You won’t see whether those pages were delivered in full. “The information is there, but it’s not complete,” Aliya says.</p>
<p class="wp-block-paragraph">Search Performance is in beta on Pro and Enterprise plans. On another plan? <a href="https://dashboard.prerender.io/?_gl=1*1xo3x5o*_gcl_au*MTUzNzk2ODU0Ni4xNzg4MjU0MjQwLjEzNzY3NzQwNjkuMTc5Mzc5MDk2NS4xNzkzNzkwOTY0LjE0NzQ5NTkwNTkuMTc5Mzc5MDk2NS4xNzkzNzkwOTY0*_ga*NTM1Mjg5Mzg5LjE3Nzk4MDcwNDY.*_ga_5C99FX76HR*czE3OTM4MDYzOTAkbzI3MSRnMSR0MTc5MzgwNzcxNCRqNjAkbDAkaDE2MDUzODY1MDI.">Contact support via the dashboard</a> for a no-cost, three-month trial.</p>
<h2 class="wp-block-heading">Tune in to the full conversation</h2>
<p class="wp-block-paragraph">Listen to the full episode of <em>Get Discovered</em> and subscribe across <a href="https://www.youtube.com/playlist?list=PLT0E2vMvCuQU">YouTube</a>, <a href="https://open.spotify.com/show/0rzmrAPI063Y0LYpHipII8">Spotify</a>, and <a href="https://podcasts.apple.com/us/podcast/get-discovered-by-prerender-io/id1840604392">Apple Podcasts</a> so you don’t miss any conversation on the fundamentals of online discovery and machine experience.</p>
<p class="wp-block-paragraph">To follow Aliya’s work, find her on <a href="https://www.linkedin.com/in/aliya-mirzakhmet-717165b1/">LinkedIn</a>. Find out more on <a href="https://prerender.io/blog/search-performance/">Search Performance</a> or if you’re already a Prerender customer, use our guide to connect <a href="https://docs.prerender.io/docs/how-do-i-connect-google-search-console-to-search-performance?hsLang=en">Google Search Console</a>.</p>
<figure class="wp-block-embed is-type-rich is-provider-spotify wp-block-embed-spotify wp-embed-aspect-21-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Spotify Embed: Building Search Performance: What the pilot taught us with Aliya Mirzakhmet" style="border-radius: 12px" width="100%" height="152" frameborder="0" allowfullscreen allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy" src="https://open.spotify.com/embed/episode/6jjRK4zasx6DbqF6vLZjM6?utm_source=oembed"></iframe>
</div></figure>
<h2 class="wp-block-heading">About Search Performance: </h2>
<p class="wp-block-paragraph">Search Performance is a Google Search Console integration inside your Prerender.io dashboard that cross-checks your crawl data against your Google Search Console performance. It shows you which pages Prerender served that are showing up in Google Search, which ones aren’t, and which pages have impressions in Google that Prerender never served, all in one place.</p>
<p class="wp-block-paragraph">Discover more on <a href="https://docs.prerender.io/docs/understanding-search-performance-in-your-prerender.io-dashboard">Search Performance</a>, from connecting Google Search Console to understand the KPI card. </p>
<p class="wp-block-paragraph"></p>
]]></content:encoded>
</item>
<item>
<title>Search Performance is here: know which pages to look at first</title>
<link>https://prerender.io/blog/search-performance/</link>
<dc:creator><![CDATA[Prerender]]></dc:creator>
<pubDate>Wed, 04 Nov 2026 15:21:29 +0000</pubDate>
<category><![CDATA[News and Updates]]></category>
<guid isPermaLink="false">https://prerender.io/?p=15917</guid>
<description><![CDATA[Connect Google Search Console to Prerender to see which served pages show up in Google Search and which site sections to look at first.]]></description>
<content:encoded><![CDATA[
<p class="wp-block-paragraph">Prerender makes sure Googlebot gets a page it can read. But once it does, is that page showing up in Google Search?</p>
<p class="wp-block-paragraph">Until now, answering that took time. Engineering makes sure Prerender serves rendered pages to Googlebot, while the SEO team checks how those pages perform in Google Search. Before anyone could look into a page that underperforms, you needed to pull data from both sides and match it up.</p>
<p class="wp-block-paragraph">Meet <strong>Search Performance</strong>, a new feature inside the Prerender platform. Connect Google Search Console and see, side by side, what Prerender served to Googlebot and what Google Search recorded for the same pages, so your team spends less time gathering data and more time understanding it.</p>
<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="780" height="439" src="https://prerender.io/wp-content/uploads/Search-Performance-KPI-cards.png" alt="Search Performance KPI cards showing unique URLs analyzed, split into crawled with impressions, crawled with no impressions, and not Prerender-served with impressions" class="wp-image-15919" srcset="https://prerender.io/wp-content/uploads/Search-Performance-KPI-cards.png 780w, https://prerender.io/wp-content/uploads/Search-Performance-KPI-cards-300x169.png 300w, https://prerender.io/wp-content/uploads/Search-Performance-KPI-cards-768x432.png 768w" sizes="(max-width: 780px) 100vw, 780px" /></figure>
<p class="wp-block-paragraph"><a href="https://prerender.io/blog/ai-insights/" data-type="link" data-id="https://prerender.io/blog/ai-insights/">When we launched AI Insights</a>, we gave you a way to check whether AI crawlers can reach your pages. Search Performance covers the next step for Google Search: what happens after Googlebot gets your page.</p>
<h2 class="wp-block-heading">What you get</h2>
<ul class="wp-block-list">
<li><strong>See </strong>whether your key pages show up in Google Search, with every URL sorted into three groups that always add up to your total.</li>
<li><strong>Start </strong>with your biggest gap, with site sections like /products/ or /countries/ ranked by how many served pages have no impressions.</li>
<li><strong>Spot</strong> what Googlebot couldn’t load, with delivery errors flagged by section and by page.</li>
<li><strong>Find</strong> pages Google shows that Prerender isn’t serving, and decide whether to extend your coverage.</li>
<li><strong>Check</strong> any single page in one row: HTTP status, last crawled, impressions, clicks and CTR.</li>
</ul>
<h2 class="wp-block-heading">Start with the section that needs your eyes most</h2>
<p class="wp-block-paragraph">Every URL lands in one of three groups:</p>
<ul class="wp-block-list">
<li><em>Crawled, with impressions</em> (served and showing up in Google Search)</li>
<li><em>Crawled, no impressions</em> (served, but not showing up yet)</li>
<li><em>Not Prerender-served, with impressions</em> (showing up without going through Prerender, often because part of the site runs on a different setup, like a main site built with Angular and a blog on WordPress)</li>
</ul>
<figure class="wp-block-image size-full"><img decoding="async" width="780" height="439" src="https://prerender.io/wp-content/uploads/Performance-by-path-table.png" alt="Performance by path table ranking site sections by served pages with no impressions, with CTR and delivery errors for each section" class="wp-image-15922" srcset="https://prerender.io/wp-content/uploads/Performance-by-path-table.png 780w, https://prerender.io/wp-content/uploads/Performance-by-path-table-300x169.png 300w, https://prerender.io/wp-content/uploads/Performance-by-path-table-768x432.png 768w" sizes="(max-width: 780px) 100vw, 780px" /></figure>
<p class="wp-block-paragraph">No impressions can be completely expected, like a thank-you or order confirmation page that was never meant to rank. Or it can be worth a closer look. Click <strong>Review </strong>to see the pages behind a section.</p>
<p class="wp-block-paragraph">Search Performance won’t tell you why a page has no impressions. It tells you where to look, which is usually where the grunt work is.</p>
<h2 class="wp-block-heading">See it in action</h2>
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Meet Search performance" width="640" height="360" src="https://www.youtube.com/embed/_fn5CI8ndPY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
<h2 class="wp-block-heading">Get started</h2>
<p class="wp-block-paragraph">Search Performance is available for Prerender customers on Pro and Enterprise Plus plans. On Starter or Growth? <a href="https://dashboard.prerender.io/billing/plans" data-type="link" data-id="https://dashboard.prerender.io/billing/plans">Upgrade your plan</a> to get access.</p>
<p class="wp-block-paragraph"><strong>Already a Prerender customer?</strong></p>
<ol class="wp-block-list">
<li>Go to <strong>Integrations </strong>in your Prerender account and find the <strong>Search Performance</strong> card.</li>
<li>Select <strong>Connect Google account</strong> and sign in with a Google account that has access to your Search Console property (Owner, Full or Restricted user).</li>
<li>Choose your domain (Pro) or up to five domains (Enterprise Plus), then select <strong>Activate</strong>.</li>
</ol>
<p class="wp-block-paragraph">We’ll email you when your data is ready.</p>
<div class="wp-block-buttons is-content-justification-left is-layout-flex wp-container-core-buttons-is-layout-63375db1 wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://dashboard.prerender.io/integrations?_gl=1*dfa1m5*_gcl_au*NDg0MTUxODQxLjE3OTM2NTUzODk.*_ga*MTc4MjA5OTU4MC4xNzQ2NDU2MTM2*_ga_5C99FX76HR*czE3OTM3OTgxNzUkbzMxMCRnMSR0MTc5Mzc5ODQ0NyRqNDUkbDAkaDE4NTI2MjMwNjc.">Connect Search Console</a></div>
</div>
<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>
<p class="wp-block-paragraph">Not a Prerender.io customer yet? <a href="https://prerender.io/pricing/" data-type="link" data-id="https://prerender.io/pricing/">Sign up and get instant access</a>. For more details about the feature, check out our <a href="https://docs.prerender.io/docs/understanding-search-performance-in-your-prerender.io-dashboard" data-type="link" data-id="https://docs.prerender.io/docs/understanding-search-performance-in-your-prerender.io-dashboard">knowledge base</a>.</p>
]]></content:encoded>
</item>
<item>
<title>Zero-Click Marketing and AI Search: Why Traffic Was Never the Point</title>
<link>https://prerender.io/blog/zero-click-marketing/</link>
<dc:creator><![CDATA[Prerender]]></dc:creator>
<pubDate>Wed, 28 Oct 2026 11:26:12 +0000</pubDate>
<category><![CDATA[AI SEO]]></category>
<category><![CDATA[Podcast]]></category>
<category><![CDATA[AEO]]></category>
<category><![CDATA[AI Search]]></category>
<category><![CDATA[GEO]]></category>
<category><![CDATA[seo]]></category>
<category><![CDATA[zero-click marketing]]></category>
<guid isPermaLink="false">https://prerender.io/?p=15507</guid>
<description><![CDATA[Rand Fishkin joins us for episode three to explain why AI isn’t killing search, the click is, and how to measure marketing when traffic isn’t the whole story.]]></description>
<content:encoded><![CDATA[
<p class="wp-block-paragraph">Sixty-eight percent of US Google searches in the first months of this year ended without a click. So if machines can see your site but most people never visit it, does it matter?</p>
<p class="wp-block-paragraph">In our latest episode of <a href="https://prerender.io/podcast/">Get Discovered</a>, host Joe Walsh sat down with <a href="https://www.linkedin.com/in/randfishkin/">Rand Fishkin</a>, Co-Founder and CEO of <a href="https://sparktoro.com">SparkToro</a>, who built and ran Moz for 17 years. His research on search traffic is some of the most cited in the industry. His verdict: search isn’t dying. The click is.</p>
<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://youtu.be/3Y0nmXSNyiI?si=-C_4qcKOdyFLN54J">Listen now</a></div>
</div>
<h2 class="wp-block-heading"><strong>Is AI replacing Google</strong> search?</h2>
<p class="wp-block-paragraph">The myth Fishkin corrects most often, even with experienced marketers, is that ChatGPT, Claude and Gemini are replacing Google. SparkToro’s clickstream data, drawn from more than 10 million US devices, says otherwise. Almost 20% of Americans now use an AI tool 10 or more times a month. Yet Google searches keep growing.</p>
<p class="wp-block-paragraph">He calls the opposite belief business mythology, and it’s shaping budgets. Most businesses, he argues, over-invest in ranking for ChatGPT prompts and under-invest in the social platforms where their audience already spends time.</p>
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-9-16 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Death of the Click: Why Search Is Up but Traffic Is Down" width="540" height="960" src="https://www.youtube.com/embed/Lp7bnNb3ChM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
<h2 class="wp-block-heading"><strong>Why AI visibility is hard to measure</strong></h2>
<p class="wp-block-paragraph">Unlike Google, AI platforms don’t reveal how often any prompt is run. Nobody knows whether thousands of buyers ask for the best product in your category, or none do. That makes AI visibility easy to sell and almost impossible to disprove.</p>
<p class="wp-block-paragraph">Joe has seen this firsthand. When Prerender explored building a prompt tracker, official API calls matched what real users saw only about 10% of the time. He calls the rush to these numbers a metric security blanket: something to show leadership while organic traffic falls, but not tied to revenue.</p>
<h2 class="wp-block-heading"><strong>Zero-click marketing: why traffic is falling</strong></h2>
<p class="wp-block-paragraph">If more people are online than ever, why is traffic down 20–30% from 2022 highs? Fishkin’s answer is simple. Google, Instagram, LinkedIn, Reddit and YouTube all earn more when you stay put. So they answer questions in place and penalize links that send you elsewhere.</p>
<p class="wp-block-paragraph">That shift is being mistaken for AI cannibalization. And it isn’t all bad news. If Google’s AI Overview describes your product accurately, the visitors who do click arrive ready to buy. Traffic down, revenue up.</p>
<h2 class="wp-block-heading"><strong>How to measure marketing without perfect attribution</strong></h2>
<p class="wp-block-paragraph">Fishkin’s fix is a correlation dashboard. For each channel, track signals at every stage: exposure (impressions), familiarity (branded searches, follows), intent (pricing page visits, sign-ups) and conversion. Then ask an AI assistant which channel, if scaled, would most likely lift conversions.</p>
<p class="wp-block-paragraph">It’s correlation, not causation, and he’s fine with that. A 1950s ad agency never followed drivers past an Oreo billboard. It compared sales in Santa Fe against Phoenix, saw the lift and rolled out the winner. Election campaigns spend billions the same way, with no attribution at all.</p>
<p class="wp-block-paragraph">For the CFO who wants proof, his answer is blunt. He’d rather see numbers going up than a perfect attribution model on a business in decline.</p>
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-9-16 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Perfect Attribution Is a Trap. Here’s What to Do Instead." width="540" height="960" src="https://www.youtube.com/embed/oBa6yUcmXd0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
<h2 class="wp-block-heading"><strong>How to choose the right marketing channels</strong></h2>
<p class="wp-block-paragraph">Fishkin doesn’t sugarcoat it: independent brands have it harder than ever. His advice is to find where three things meet. Where your audience pays attention, the format you’re good at, and value nobody else on that platform offers. Then invest, knowing returns take time.</p>
<p class="wp-block-paragraph">And widen your definition of value. Attention increasingly goes to content that entertains, holds a point of view and picks a fight, even if the enemy is an outdated process. He also expects PR to matter more, because what others say about you shapes both AI answers and Google.</p>
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-9-16 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Stop Chasing Every Channel. Win One You Can’t Be Displaced From." width="540" height="960" src="https://www.youtube.com/embed/vIEEBJjehHM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
<h2 class="wp-block-heading">The takeaway</h2>
<p class="wp-block-paragraph">Traffic was always a vanity metric. AI search didn’t break marketing measurement; it exposed it. </p>
<p class="wp-block-paragraph">The brands that pull ahead will measure sales, show up where their audience pays attention, and stop waiting for proof that will never come.</p>
<h2 class="wp-block-heading">Tune in to the full conversation</h2>
<p class="wp-block-paragraph">Listen to the full episode of <em>Get Discovered</em> and subscribe across <a href="https://www.youtube.com/playlist?list=PLT0E2vMvCuQU">YouTube</a>, <a href="https://open.spotify.com/show/0rzmrAPI063Y0LYpHipII8">Spotify</a>, and <a href="https://podcasts.apple.com/us/podcast/get-discovered-by-prerender-io/id1840604392">Apple Podcasts</a> so you don’t miss any conversation on the fundamentals of online discovery and machine experience.</p>
<p class="wp-block-paragraph"><a href="https://www.linkedin.com/in/randfishkin/"><em>Rand Fishkin</em></a> <em>is co-founder and CEO of SparkToro and co-author, with Amanda Natividad, of Zero-Click Marketing. Find his research at</em> <a href="https://sparktoro.com"><em>sparktoro.com</em></a><em>.</em></p>
<figure class="wp-block-embed is-type-rich is-provider-spotify wp-block-embed-spotify wp-embed-aspect-21-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Spotify Embed: Why Machines Can’t See Your Site with Senior Product Manager, Venessa Chege" style="border-radius: 12px" width="100%" height="152" frameborder="0" allowfullscreen allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy" src="https://open.spotify.com/embed/show/0rzmrAPI063Y0LYpHipII8?utm_source=oembed"></iframe>
</div></figure>
]]></content:encoded>
</item>
<item>
<title>Adobe Experience Manager SEO: How to Fix Search and AI Visibility</title>
<link>https://prerender.io/blog/adobe-experience-manager-seo/</link>
<dc:creator><![CDATA[Prerender]]></dc:creator>
<pubDate>Mon, 19 Oct 2026 07:17:48 +0000</pubDate>
<category><![CDATA[AI SEO]]></category>
<guid isPermaLink="false">https://prerender.io/?p=15447</guid>
<description><![CDATA[AEM manages enterprise content and hides it behind JavaScript, making it hidden from search engines and AI crawlers. Here’s how to diagnose the gap and choose the right fix.]]></description>
<content:encoded><![CDATA[
<p class="wp-block-paragraph">Many enterprises use Adobe Experience Manager (AEM) to publish content across multilingual sites. But when an AEM site relies on a JavaScript-heavy frontend, the content visitors see is not always the content that search engines and AI crawlers receive.</p>
<p class="wp-block-paragraph">Visitors may see the complete site once the page loads. Meanwhile, search engines, AI crawlers, social platforms, and ad bots may receive an incomplete version of the page. The results are familiar: pages do not index, schema is missed, internal links are discovered late, and important content never appears in AI search.</p>
<p class="wp-block-paragraph">Our expert team at Prerender.io created this guide to explain how to confirm whether rendering is the problem, separate it from other technical SEO issues, and choose the right next step for an AEM site: a rebuild, custom SSR, or managed prerendering.</p>
<h2 class="wp-block-heading">TL;DR: Is JavaScript Hiding Your Adobe Experience Manager Content From Crawlers?</h2>
<ul class="wp-block-list">
<li><strong>The problem:</strong> your AEM site looks complete to visitors, but crawlers may receive an almost empty page instead of the content you want them to find.</li>
<li><strong>What this affects:</strong> delayed indexing, missed structured data, broken social previews, and content that may be unavailable to AI search.</li>
<li><strong>How to confirm it:</strong> compare your page source with Google Search Console’s rendered HTML. If essential content appears only after JavaScript runs, you have a rendering issue.</li>
<li><strong>Ways to fix it:</strong> rebuild around server-side rendering (SSR), build and operate your own SSR setup, or use managed prerendering.</li>
<li><strong>A practical route for existing AEM single-page applications:</strong> Prerender.io delivers complete HTML to crawlers without requiring a frontend rebuild, while AEM continues to manage content and publishing.</li>
</ul>
<h2 class="wp-block-heading">Why AEM SEO Can Break Even When the Site Looks Fine</h2>
<p class="wp-block-paragraph">Adobe Experience Manager manages content, assets, localization, workflows, and publishing. But it does not automatically turn a JavaScript-heavy site into a complete HTML page before it reaches a crawler. This matters most for headless AEM sites, <a href="https://prerender.io/framework/react/">AEM React app</a> or <a href="https://prerender.io/framework/angular/">pages that are built with Angular</a>, and existing SPA Editor implementations.</p>
<p class="wp-block-paragraph">That means content can be published correctly in AEM and load normally for visitors, yet still be missing from Google or AI search. <a href="https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics" target="_blank" rel="noreferrer noopener">Google can render JavaScript</a>, but rendering adds another step between crawling and indexing.</p>
<p class="wp-block-paragraph">Google also notes that server-side or prerendering can make pages easier for crawlers to process, particularly because not every bot renders JavaScript.</p>
<p class="wp-block-paragraph">This does not mean every AEM implementation has a problem. Traditional AEM pages that include their main content in the initial response can be highly crawlable, and <a href="https://www.aem.live/docs/seo-geo" target="_blank" rel="noreferrer noopener nofollow">Adobe’s Edge Delivery guidance</a> likewise emphasizes delivering canonical content in the initial HTML. The risk begins when the signals that explain what a page is about are added only after JavaScript runs in the browser.</p>
<p class="wp-block-paragraph">This is even more crucial for <a href="https://prerender.io/enterprise/">enterprise teams</a>. A single frontend template created on Adobe Experience Manager can power thousands of product, category, location, or content pages. If that template delays copy, links, hreflang, canonicals, or JSON-LD, the result is a site-wide delivery issue that scales with the catalog and number of markets.</p>
<p class="wp-block-paragraph"><strong>Related:</strong> <a href="https://prerender.io/blog/signs-of-javascript-rendering-problems/">10 Signs you have JavaScript rendering problems</a>.</p>
<h2 class="wp-block-heading">How to Confirm a JavaScript Rendering Problem on Your AEM Site</h2>
<p class="wp-block-paragraph">The evidence exists in one place: the HTML returned before JavaScript runs.</p>
<p class="wp-block-paragraph">Use a representative sample rather than one URL. Include a product or category page, a recently published page, a localized page, and a high-value template with structured data.</p>
<h3 class="wp-block-heading">1. Compare the Initial HTML With the Rendered Page</h3>
<p class="wp-block-paragraph">Open View Source or fetch the URL without a browser. Then compare it with the rendered HTML in Google Search Console’s URL Inspection tool or the <a href="https://search.google.com/test/rich-results" data-type="link" data-id="https://search.google.com/test/rich-results" target="_blank" rel="noreferrer noopener nofollow">Rich Results Test</a>. Check whether the primary heading, descriptive copy, internal links, title tag, canonical, hreflang annotations, and JSON-LD are present in both versions.</p>
<figure class="wp-block-image size-full"><img decoding="async" width="641" height="272" src="https://prerender.io/wp-content/uploads/Alt-txt-Google-Rich-Results-Test-showing-one-valid-item-detected-for-prerender.io_.png" alt="Alt txt: Google Rich Results Test showing one valid item detected for prerender.io" class="wp-image-15453" srcset="https://prerender.io/wp-content/uploads/Alt-txt-Google-Rich-Results-Test-showing-one-valid-item-detected-for-prerender.io_.png 641w, https://prerender.io/wp-content/uploads/Alt-txt-Google-Rich-Results-Test-showing-one-valid-item-detected-for-prerender.io_-300x127.png 300w" sizes="(max-width: 641px) 100vw, 641px" /></figure>
<p class="wp-block-paragraph">A blank shell is the most obvious failure, but a partial response can also be a problem. A product page may include its heading but omit availability, price, product schema, or links to related categories until a client-side API call finishes. A localized page may show translated copy to users while serving only default-language metadata to crawlers.</p>
<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Run this check:</strong> choose one important page per template and market. Search the raw response for a phrase that appears in the visible copy, then search for the matching canonical, hreflang, and JSON-LD block.</td></tr></tbody></table></figure>
<h3 class="wp-block-heading">2. Review Indexing and Discovery Symptoms</h3>
<p class="wp-block-paragraph">Rendering problems often surface as ordinary SEO issues: an increase in <a href="https://prerender.io/blog/understanding-googles-crawled-currently-not-indexed-coverage-guide/">Crawled – currently not indexed URLs status</a>, missing rich results, slow discovery of new pages, or internal links that appear in the browser but not in source HTML.</p>
<p class="wp-block-paragraph">On a large site, the pattern may be uneven. Top-level pages are indexed, while deep product or regional pages remain invisible because they receive fewer crawls and provide less useful HTML when crawled.</p>
<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Run this check:</strong> in Search Console, compare index coverage and crawl timing for clean, high-value URLs against deep or parameterized URLs. Then inspect a localized URL and confirm that Google sees the same content and signals that users see.</td></tr></tbody></table></figure>
<h3 class="wp-block-heading">3. Rule Out Problems Prerendering Cannot Fix</h3>
<p class="wp-block-paragraph">A rendering layer cannot fix <a href="https://prerender.io/blog/robots-txt-and-seo/" data-type="link" data-id="https://prerender.io/blog/robots-txt-and-seo/">a URL blocked by robots.txt</a>, a noindex tag, a conflicting canonical, a redirect loop, thin content, broken internal linking, or an incomplete sitemap. These issues often coexist, which is why a diagnosis should start with delivery but not end there.</p>
<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Run this check:</strong> confirm that each sample URL returns a crawlable 200 response, uses the expected canonical, appears in the correct sitemap, and is reachable through ordinary HTML links. Only then decide whether a rendering change is needed.</td></tr></tbody></table></figure>
<h2 class="wp-block-heading">What AEM’s Client-Side Rendering Changes for Search and AI Crawlers</h2>
<p class="wp-block-paragraph">Google’s rendering system can execute JavaScript, but it first crawls the response, then queues eligible pages for rendering, and finally processes the rendered output for indexing. That means important content can still be found by Google, but only if scripts, API calls, resources, and page states work within its rendering environment.</p>
<p class="wp-block-paragraph">Not all crawlers behave like Googlebot. <a href="https://prerender.io/blog/how-to-fix-link-previews/">Social preview bots usually read Open Graph data</a> from the initial response. <a href="https://prerender.io/blog/understanding-web-crawlers-traditional-ai/">AI crawlers may fetch raw HTML</a> without completing a full browser rendering cycle. For those systems, copy, links, structured data, and metadata that exist only after JavaScript runs may not be available at all.</p>
<p class="wp-block-paragraph">This affects four search signals in particular:</p>
<ul class="wp-block-list">
<li><strong>Content</strong>: crawlers cannot evaluate copy they never receive.</li>
<li><strong>Internal links</strong>: discovery slows or fails when navigation and related-page links are added only after rendering.</li>
<li><strong>Structured data and metadata</strong>: schema, canonical tags, hreflang annotations, and Open Graph data become less reliable when injected late.</li>
<li><strong>Freshness</strong>: if crawler-facing output is cached or assembled separately, content updates need a dependable refresh path.</li>
</ul>
<p class="wp-block-paragraph">This does not mean JS prerendering solves every performance issue. Heavy JavaScript can still hurt real-user LCP and INP, and those metrics require work on bundles, images, loading behavior, and interactions. Crawler visibility and Core Web Vitals overlap in their root architecture, but they are not the same measurement problem.</p>
<h2 class="wp-block-heading">Three Ways to Fix an AEM Rendering Gap</h2>
<h3 class="wp-block-heading">Option 1: Use Prerender.io to Deliver HTML to Crawlers</h3>
<p class="wp-block-paragraph">Prerender.io renders JavaScript pages, caches the resulting HTML, and serves crawler-ready versions to eligible bots. AEM remains the system of record for content and publishing; visitors keep receiving the normal JavaScript experience.</p>
<p class="wp-block-paragraph">For an existing AEM React or Angular site, this creates a narrower implementation path than a frontend rebuild. The team configures crawler delivery at the CDN, reverse-proxy, or web-server layer, validates content parity, and sets cache refresh behavior that follows AEM publishing or frontend deployments.</p>
<p class="wp-block-paragraph">This route fits enterprise teams that need to protect organic and AI discoverability for their large, multi-market website and cannot justify a full SSR project immediately.</p>
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="How Does Prerender.io Work? A Quick Explainer" width="640" height="360" src="https://www.youtube.com/embed/OxNt36HhCP4?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
<h3 class="wp-block-heading">Option 2: Build a Custom SSR With Adobe I/O Runtime</h3>
<p class="wp-block-paragraph">Adobe I/O Runtime is often the recommended solution for AEM JS SEO issues. It is a serverless platform for custom code. It can host part of a custom rendering solution, but it is not a plug-and-play AEM SSR product. A team still needs to design the renderer, connect it to AEM content and data sources, handle authentication, cache and invalidate output, test every template, and monitor it in production.</p>
<p class="wp-block-paragraph">This can be the right investment when a company is already rebuilding its frontend architecture around SSR or static generation. It is less compelling when the narrow requirement is simply to make an existing JavaScript site readable to crawlers.</p>
<p class="wp-block-paragraph">For a comparison of managed prerendering and an Adobe I/O Runtime build, see <a href="https://prerender.io/prerender-vs-adobe-experience-manager/" data-type="link" data-id="https://prerender.io/prerender-vs-adobe-experience-manager/">Prerender.io vs. Adobe Experience Manager</a>.</p>
<h3 class="wp-block-heading">Option 3: Self-Host SSR Infrastructure</h3>
<p class="wp-block-paragraph">A team can also host its own Node.js rendering application on AWS, Azure, or another platform. This offers maximum architectural control, but ownership extends beyond the initial build. Every route, component, API dependency, cache rule, and frontend release must preserve rendering parity over time.</p>
<p class="wp-block-paragraph">For AEM 6.5, self-hosting may fit an established stack. For AEM as a Cloud Service, the same question remains: does the organization want to operate a rendering product, or does it need a managed way to solve crawler delivery?</p>
<h2 class="wp-block-heading">Prerender.io vs. Custom SSR for Adobe Experience Manager: The Operational Difference</h2>
<p class="wp-block-paragraph">The choice is not between AEM and Prerender.io: AEM manages content. The real choice is whether a team wants to build and maintain the JavaScript content rendering layer itself.</p>
<p class="wp-block-paragraph">With a custom SSR approach, the organization owns the renderer, content data flow, cache invalidation, observability, production releases, and the regressions that appear when a frontend changes. With prerendering with Prerender.io, the organization still owns content quality, indexation, and SEO governance, but it does not own the rendering service.</p>
<h2 class="wp-block-heading">Why Solving AEM SEO Matters for Multi-Market Websites</h2>
<p class="wp-block-paragraph">AEM is frequently chosen because a central team needs to publish across countries, languages, brands, and business units. That same scale makes rendering defects more expensive. A missing hreflang tag, delayed schema block, or incomplete page model is rarely isolated to one URL. It propagates through every market that shares the component or template.</p>
<p class="wp-block-paragraph">A managed rendering layer can cover configured domains and URL patterns from one platform, while cache rules keep crawler-facing HTML aligned with AEM publishing. That does not remove the need for locale sitemaps, valid canonicals, or correct hreflang. But it does ensure that search crawlers can receive those SEO signals and use them to ensure your webpages perform well in search, as intended.</p>
<p class="wp-block-paragraph">For teams managing a multi-market site, the priority is simple: validate one equivalent URL per locale after every frontend deployment. Compare raw HTML for language-specific copy, canonical URLs, hreflang clusters, JSON-LD, and response status. This turns rendering from a one-off migration concern into a permanent release check.</p>
<p class="wp-block-paragraph"><strong>Related</strong>: <a href="https://prerender.io/blog/international-seo-technical-guide/">International SEO: Technical Guide for Multi-Market Websites</a></p>
<h2 class="wp-block-heading">Case Study: Why Popken Chose Prerender.io Over In-House SSR</h2>
<p class="wp-block-paragraph">Popken Fashion Group manages 32 ecommerce domains across 16 countries. Its JavaScript sites needed more reliable search visibility, but developer capacity was already committed to a major frontend migration.</p>
<p class="wp-block-paragraph">Rather than build and maintain custom SSR alongside that work, Popken chose managed prerendering. When Prerender.io was temporarily switched off, the company reported visibility declines across markets. After it was restored, rankings began recovering within a week, and one market recorded roughly 15,000 additional indexed pages. Read <a href="https://prerender.io/resources/case-studies/popken-fashion-group/" data-type="link" data-id="https://prerender.io/resources/case-studies/popken-fashion-group/">the full Prerender.io and Popken story here</a>.</p>
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="How Popken Fashion Group Cut Costs by 50% with Prerender.io" width="640" height="360" src="https://www.youtube.com/embed/gIjlEa6JKro?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
<h2 class="wp-block-heading">Final Thoughts: Prerender.io Makes Your AEM Sites Discoverable in Search</h2>
<p class="wp-block-paragraph">AEM SEO problems are often delivery problems. You may publish complete, localized, well-structured content, while crawlers receive a stripped-down or incomplete version of the page.</p>
<p class="wp-block-paragraph">Start with the HTML crawlers receive. If important copy, links, metadata, or schema are missing, Prerender.io gives crawlers complete, index-ready HTML without requiring a frontend rewrite or custom SSR project. Your AEM content workflow and visitor experience stay exactly as they are.</p>
<p class="wp-block-paragraph">Ready to make your AEM content visible to every crawler that matters? <a href="https://prerender.io/pricing/">Explore Prerender.io pricing</a> and find the right plan for your site.</p>
<h2 class="wp-block-heading">FAQs About AEM SEO and JavaScript Rendering</h2>
<h3 class="wp-block-heading">Does Adobe Experience Manager hurt SEO?</h3>
<p class="wp-block-paragraph">No, AEM can support strong SEO, but problems arise when important content is inaccessible or unreliable for crawlers, often because the frontend relies on client-side JavaScript to assemble the page. <a href="https://prerender.io/blog/signs-of-javascript-rendering-problems/" data-type="link" data-id="https://prerender.io/blog/signs-of-javascript-rendering-problems/">See if you experience common JavaScript rendering issues.</a></p>
<h3 class="wp-block-heading">How do I know if my AEM site is client-rendered?</h3>
<p class="wp-block-paragraph">You can check whether your AEM site is client-rendered by comparing the page source in your browser with the rendered page in Search Console. If primary copy, internal links, metadata, or schema appear only after JavaScript runs, your site has a client-rendered layer that needs testing.</p>
<h3 class="wp-block-heading">Does Prerender.io replace Adobe Experience Manager?</h3>
<p class="wp-block-paragraph">No, Prerender.io does not replace AEM. AEM manages content, assets, workflows, and publishing, while Prerender.io helps deliver crawler-readable HTML for JavaScript pages. See the full <a href="https://prerender.io/prerender-vs-adobe-experience-manager/">Prerender.io vs. Adobe Experience Manager comparison</a> for how the two fit together.</p>
<h3 class="wp-block-heading">Do I need Adobe I/O Runtime to use Prerender.io?</h3>
<p class="wp-block-paragraph">No. Adobe I/O Runtime is relevant only when your team chooses to build and <a href="https://prerender.io/blog/in-house-ssr-vs-prerender-io-a-benefit-and-cost-comparison/">host custom SSR infrastructure</a>. Prerender.io provides managed JS rendering without that custom application.</p>
<h3 class="wp-block-heading">Does Prerender.io work with AEM 6.5 and AEM as a Cloud Service?</h3>
<p class="wp-block-paragraph">Prerender.io can integrate at the CDN, reverse-proxy, or web-server layer. The right route depends on your delivery architecture, security requirements, and existing infrastructure.</p>
<h3 class="wp-block-heading">Will crawler-ready HTML guarantee AI citations?</h3>
<p class="wp-block-paragraph">No, crawler-ready HTML does not guarantee AI citations, but it makes content available to crawlers. Citations still depend on relevance, authority, retrieval systems, and each AI platform’s behavior. Start by giving AI crawlers access to your content, then apply the wider recommendations in this <a href="https://prerender.io/blog/how-to-optimize-your-website-for-ai-crawlers/" data-type="link" data-id="https://prerender.io/blog/how-to-optimize-your-website-for-ai-crawlers/">guide to optimizing for AI crawlers</a>.</p>
]]></content:encoded>
</item>
<item>
<title>Why Machines Can’t See Your Site: AI Insights</title>
<link>https://prerender.io/blog/why-machines-cant-see-your-site-ai-insights/</link>
<dc:creator><![CDATA[Prerender]]></dc:creator>
<pubDate>Wed, 14 Oct 2026 07:44:55 +0000</pubDate>
<category><![CDATA[AI SEO]]></category>
<category><![CDATA[Podcast]]></category>
<guid isPermaLink="false">https://prerender.io/?p=15434</guid>
<description><![CDATA[Senior Product Manager, Venessa Chege, joins us for episode two for a special internal guest episode to unpack the problem of machine access! She sheds light on how Prerender's AI Insight bridges that gap direct from the dashboard. Tune in! ]]></description>
<content:encoded><![CDATA[
<p class="wp-block-paragraph">Your page can look finished to you and still arrive broken to the machines that decide whether you get found. That’s the premise of this season of Get Discovered. </p>
<p class="wp-block-paragraph">In our latest episode, host Joe Walsh sat down with someone who has spent the year inside that problem: <a href="https://www.linkedin.com/in/venessa-chege-b96425139/">Venessa Chege</a>, Senior Product Manager at Prerender and product owner of <a href="https://prerender.io/blog/ai-insights/">AI Insights</a>.</p>
<p class="wp-block-paragraph">It started with a sentence customers kept repeating: “I’m disappearing from search.” They’d typed a prompt into ChatGPT, expected to show up, and didn’t. Their competitors did. As Venessa explains, “search” no longer just means Google. It means AI Overviews, ChatGPT, Claude, amongst others, and most teams had no idea how to show up there.</p>
<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://youtu.be/3Y0nmXSNyiI?si=-C_4qcKOdyFLN54J">Listen now</a></div>
</div>
<h2 class="wp-block-heading">First, what is rendering?</h2>
<p class="wp-block-paragraph">Tell people you work at Prerender and the follow-up is always: what’s rendering? Venessa borrows from architecture: before a house is built, you have blueprints, measurements and specs. Combine those instructions and you get the finished picture or render.</p>
<p class="wp-block-paragraph">Web pages work the same way. Content, styling, reviews and product data are all instructions waiting to be assembled. Rendering executes them and produces the final version a machine can actually read. Skip that step, and the machine gets the blueprints, not the house.</p>
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-9-16 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="What even is rendering? Rendering explained with Venessa Chege." width="540" height="960" src="https://www.youtube.com/embed/gE_xxBjywH0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
<h2 class="wp-block-heading">Why we didn’t build an AI prompt-tracking tool</h2>
<p class="wp-block-paragraph">The obvious answer to “am I visible in ChatGPT?” is a prompt-tracking tool. So that’s what the team prototyped first, after interviewing in-house SEOs, agency leads, ecommerce teams and even CFOs. Three worries kept surfacing: we showed up once, then vanished. Competitors are getting surfaced instead. And even when we’re missing, we don’t know what to fix.</p>
<p class="wp-block-paragraph">Customers loved the prototype. Then technical discovery began. Prompt tracking meant choosing between API calls and UI scraping, each with real trade-offs, in a market already crowded with tools doing the same thing.</p>
<p class="wp-block-paragraph">Meanwhile, Prerender already held something rarer: raw crawl logs showing every request machines make to a site. </p>
<h2 class="wp-block-heading">Machine access is the floor, not the party</h2>
<p class="wp-block-paragraph">If the machine that decides your visibility can’t reach your page, nothing else matters. Not your keywords, not your content structure, not your FAQ section. The front door is shut.</p>
<p class="wp-block-paragraph">Joe is careful about the limits of that claim. A closed door means your own pages can’t be cited, though third-party mentions are a different story. But the reverse isn’t proven: nobody has shown that fixing access gets you cited more. Access puts you in the running. It doesn’t win the race.</p>
<p class="wp-block-paragraph">For ecommerce, that distinction is costly. A shopper asks an AI assistant for running shoes and wants a direct link to buy. If your product page fails for that crawler, you might still be mentioned. But the link that drives the sale is gone.</p>
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-9-16 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Machine access is the gate to action." width="540" height="960" src="https://www.youtube.com/embed/Y-WwRJIbp74?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
<h2 class="wp-block-heading">Half the sites checked were blocking machine access</h2>
<p class="wp-block-paragraph">The episode’s most striking number: about half of the sites that ran diagnostics in AI Insights had at least one major AI crawler blocked. Most didn’t know.</p>
<p class="wp-block-paragraph">The culprit is rarely a strategy decision. It’s usually a firewall or CDN rule set years ago to keep out unwanted traffic and never revisited, while CDN providers keep adding new blocking defaults. Blocking can be a valid choice. A publisher protecting content from AI training may happily accept the trade-off. The point is that it should be a choice.</p>
<p class="wp-block-paragraph">The telling detail is that many sites unblocked access the same day they saw their results.</p>
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-9-16 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Are you unknowingly blocking machines from your site?" width="540" height="960" src="https://www.youtube.com/embed/nqCWVk8zpbk?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
<h2 class="wp-block-heading">How AI agents raise the stakes for machine access</h2>
<p class="wp-block-paragraph">Today, AI platforms mostly read your content. Next, they’ll act on it. Google’s AI Mode already handles accommodation booking inside the platform, and bookings through Claude using an MCP server are already happening, with no website involved.</p>
<p class="wp-block-paragraph">Neither expects fully delegated buying tomorrow. But when research, comparison and purchase all happen inside one AI platform, a closed gate removes you from the entire buyer journey. Start tracking access now, and you’ll have the data to see how site changes affect it before the stakes rise.</p>
<h2 class="wp-block-heading">The takeaway</h2>
<p class="wp-block-paragraph">Venessa’s advice is blunt. Before you add another FAQ block because a LinkedIn post said so, confirm the gate is open. Access is binary, allowed or not, which makes it the easiest place to start.</p>
<p class="wp-block-paragraph">Check your server logs. See which crawlers are actually arriving. Audit your CDN and firewall rules. Then optimize.</p>
<p class="wp-block-paragraph"><a href="https://prerender.io/blog/ai-insights/">AI Insights </a>is included with Prerender at no extra cost, and it’s available from day one of your <a href="https://auth.prerender.io/auth/realms/prerender/protocol/openid-connect/registrations?client_id=prerender-frontend&response_type=code&scope=openid%20email&redirect_uri=https://dashboard.prerender.io/integration-wizard&_gl=1*c90zno*_gcl_au*MTUzNzk2ODU0Ni4xNzg4MjU0MjQwLjgzMzg2MzI0Ni4xNzkxODk1MzEyLjE3OTE4OTUzMTQuMjA0NDM3ODI4Ny4xNzkxODk1MzEyLjE3OTE4OTUzMTQ.*_ga*NTM1Mjg5Mzg5LjE3Nzk4MDcwNDY.*_ga_5C99FX76HR*czE3OTE5NjE2ODgkbzIxOCRnMSR0MTc5MTk2MzUwNiRqNTgkbDAkaDE1NTc5ODk0MjE.">free trial</a>.</p>
<h2 class="wp-block-heading">Tune in to the full conversation</h2>
<p class="wp-block-paragraph">Listen to the full episode of <em>Get Discovered</em> to hear how it was built, and <a href="https://www.linkedin.com/in/venessa-chege-b96425139/">follow Venessa on LinkedIn</a> for more on AI visibility. Subscribe across <a href="https://www.youtube.com/playlist?list=PLT0E2vMvCuQU">YouTube</a>, <a href="https://open.spotify.com/show/0rzmrAPI063Y0LYpHipII8">Spotify</a>, and <a href="https://podcasts.apple.com/us/podcast/get-discovered-by-prerender-io/id1840604392">Apple Podcasts</a> so you don’t miss any conversation on the fundamentals of online discovery and machine experience.</p>
<figure class="wp-block-embed is-type-rich is-provider-spotify wp-block-embed-spotify wp-embed-aspect-21-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Spotify Embed: Why Machines Can’t See Your Site with Senior Product Manager, Venessa Chege" style="border-radius: 12px" width="100%" height="152" frameborder="0" allowfullscreen allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy" src="https://open.spotify.com/embed/show/0rzmrAPI063Y0LYpHipII8?utm_source=oembed"></iframe>
</div></figure>
<h2 class="wp-block-heading">About AI Insights</h2>
<p class="wp-block-paragraph">AI Insights from Prerender.io shows you whether AI crawlers can actually reach your pages. Firewall rules, CDN defaults and outdated robots.txt files often block them without anyone noticing. Pages these crawlers can’t reach don’t show up in AI search. AI Insights gives you a daily access health status for major AI crawlers. It also shows which pages are affected, ranked by priority, with step-by-step fixes and an exportable report for your dev team. It’s included on current Prerender.io plans at no extra cost. See <a href="https://www.youtube.com/watch?v=Gzq838gSg1s">AI Insights in action</a>. Understand <a href="https://docs.prerender.io/docs/ai-insights">AI Insights in your Prerender.io dashboard.</a></p>
<p class="wp-block-paragraph"></p>
]]></content:encoded>
</item>
<item>
<title>Why Your Website Loses SEO Rankings During a Site Migration</title>
<link>https://prerender.io/blog/why-website-loses-seo-rankings-during-site-migration/</link>
<dc:creator><![CDATA[Prerender]]></dc:creator>
<pubDate>Fri, 02 Oct 2026 08:18:00 +0000</pubDate>
<category><![CDATA[Technical SEO]]></category>
<guid isPermaLink="false">https://prerender.io/?p=14945</guid>
<description><![CDATA[Passed your site migration checklist but lost traffic? Learn 3 rendering failures standard SEO plans miss.]]></description>
<content:encoded><![CDATA[
<p class="wp-block-paragraph">You completed a website migration. Redirects are working, canonicals were preserved, the sitemap was submitted, and Googlebot is crawling your new URLs. Yet weeks later, rankings remain down, and your traffic data doesn’t clearly explain why.</p>
<p class="wp-block-paragraph">A broken redirect map or an overlooked migration task doesn’t always cause that gap. Instead, it often traces to what crawlers receive after requesting your new URLs while critical content still depends on JavaScript to become available. A site migration can pass all standard checks while silently introducing a rendering dependency that restricts what crawlers can access.</p>
<p class="wp-block-paragraph">Working from infrastructure logs covering billions of monthly render requests, our team sees three recurring rendering-related failure patterns in SEO site migrations. Here’s how to identify these failure modes in your data, diagnose what your standard migration checks missed, and keep your SEO performance at its peak even during complex site migrations.</p>
<h2 class="wp-block-heading">TL;DR: Why Site Migration Causes SEO Ranking Drops</h2>
<ul class="wp-block-list">
<li>Standard migration checklists confirm important SEO signals moved correctly, but they don’t always confirm crawlers can access the full pages those signals point to.</li>
<li>Crawl budget and rendering resources come under pressure together at cutover. A large migration forces search engines to process many new or changed URLs while revisiting old URLs and following redirects.</li>
<li>Ranking losses tend to concentrate on templates with the thinnest initial HTML, usually product and category pages, which total traffic reports can hide.</li>
<li>AI crawlers, including GPTBot, ClaudeBot, and PerplexityBot, never execute JavaScript, so they receive the initial HTML response, leaving content and SEO signals unavailable if they are injected after the page loads.</li>
<li>A rendering layer such as Prerender.io can serve complete HTML to crawlers, reducing their need to execute your site’s JavaScript during and after a migration.</li>
</ul>
<h2 class="wp-block-heading">Why Standard Site Migration Checklists Miss the Real Risk</h2>
<p class="wp-block-paragraph">Standard SEO migration checklists confirm that critical signals have moved correctly—by verifying <a href="https://prerender.io/blog/do-redirect-chains-hurt-seo/" data-type="link" data-id="https://prerender.io/blog/do-redirect-chains-hurt-seo/">redirect chains</a>, canonical tags, XML sitemaps, and Search Console verification. However, they miss a critical diagnostic question: <strong>when a crawler requests one of your new URLs, what payload does it actually receive?</strong></p>
<p class="wp-block-paragraph">A successful HTTP response code doesn’t mean every important part of the page was available in the initial HTML. Server-rendered pages deliver content and SEO signals instantly, whereas JS-heavy sites require script execution before critical elements appear. Because crawling, rendering, and indexing are separate pipeline stages, rendering costs search engines significant time and resources—and many crawlers cannot execute JavaScript at all. During a website migration, this bottleneck worsens as search engines simultaneously reprocess thousands of changed URLs, follow redirects, and discover new paths.</p>
<p class="wp-block-paragraph">This is why crawl monitoring alone can give false confidence. Crawl statistics show that bots are requesting your pages, but not whether the expected HTML was available, JavaScript executed successfully, or the resulting page contained the SEO signals you intended to migrate. When standard checks pass, yet traffic drops, your priority should be investigating the rendering layer to identify clear <a href="https://prerender.io/blog/signs-of-javascript-rendering-problems/" data-type="link" data-id="https://prerender.io/blog/signs-of-javascript-rendering-problems/">signs your site has JavaScript rendering problems</a>.</p>
<h2 class="wp-block-heading">3 Reasons Your Site Migration Can Cause SEO Ranking Drops</h2>
<p class="wp-block-paragraph">Once you look beyond crawl activity alone, running a targeted JavaScript rendering audit can reveal technical bottlenecks that standard migration checks miss. The three failure modes below do not explain every migration-related ranking drop. But they matter most for JavaScript-heavy sites because they sit beneath otherwise successful redirects, canonical mappings, and crawl reports.</p>
<h3 class="wp-block-heading">1. Crawl Budget and Rendering Resources Get Stretched at the Same Time</h3>
<p class="wp-block-paragraph">Most migration guides discuss <a href="https://prerender.io/blog/crawl-budget-management-for-large-websites/" data-type="link" data-id="https://prerender.io/blog/crawl-budget-management-for-large-websites/">crawl budget management for large websites</a>, since a major migration creates a massive URL-processing workload. For JavaScript-heavy sites, however, crawling is only half the cost.</p>
<p class="wp-block-paragraph">Search engines like <a href="https://developers.google.com/search/docs/crawling-indexing/javascript/fix-search-javascript" data-type="link" data-id="https://developers.google.com/search/docs/crawling-indexing/javascript/fix-search-javascript" target="_blank" rel="noreferrer noopener nofollow">Google discover and fetch a page first</a>, then render it if the important content isn’t in the initial HTML. Those are separate stages drawing on separate resources, and a migration strains both at once.</p>
<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="423" height="301" src="https://prerender.io/wp-content/uploads/How-Google-indexes-JS-content-1.png" alt="How Google indexes JS content" class="wp-image-14949" srcset="https://prerender.io/wp-content/uploads/How-Google-indexes-JS-content-1.png 423w, https://prerender.io/wp-content/uploads/How-Google-indexes-JS-content-1-300x213.png 300w" sizes="(max-width: 423px) 100vw, 423px" /></figure>
</div>
<p class="wp-block-paragraph"><br>While well-implemented redirects carry historical signals forward, a migration still pushes thousands of URLs back through Google’s processing pipeline. When your server latency spikes or redirect chains consume initial crawl allocation, Google’s Web Rendering Service suffers the downstream bottleneck.</p>
<p class="wp-block-paragraph">Because executing client-side JavaScript requires roughly 9x more processing power than parsing static HTML (according to <a href="https://www.onely.com/blog/google-needs-9x-more-time-to-crawl-js-than-html/" data-type="link" data-id="https://www.onely.com/blog/google-needs-9x-more-time-to-crawl-js-than-html/" target="_blank" rel="noreferrer noopener nofollow">Onely’s research</a>), any delay at the crawl stage forces Google to defer the rendering stage, queuing your JS-injected content indefinitely.</p>
<p class="wp-block-paragraph">That cost gap is why two teams can run equally careful migrations and see completely different recovery curves. In our infrastructure logs, the visible result is <a href="https://prerender.io/blog/how-to-avoid-discovered-currently-not-indexed/">pages sitting at “Discovered – currently not indexed”</a> for weeks after publication.</p>
<h4 class="wp-block-heading">How to Diagnose Crawl and Render Bottlenecks</h4>
<ul class="wp-block-list">
<li><strong>Step 1: Check GSC Indexation Baselines<br></strong><br>Open Page Indexing in Google Search Console and inspect the <em>“Discovered – currently not indexed”</em> report. A post-cutover spike that fails to drain indicates Google has queued your JS pages due to rendering budget constraints.</li>
</ul>
<ul class="wp-block-list">
<li><strong>Step 2: Measure Server Latency & Bot Volume</strong><br><br>Extract four weeks of pre- and post-cutover Googlebot server logs. A sudden drop in daily request volume signals a server-level bottleneck. Check your TTFB (Time to First Byte) immediately.</li>
</ul>
<ul class="wp-block-list">
<li><strong>Step 3: Calculate Your Redirect Allocation Ratio</strong><br><br>Divide total 3xx responses by total bot requests. If 3xx responses exceed 20%, more than a fifth of your crawl budget is being consumed by redirect hops instead of live, renderable content.</li>
</ul>
<h3 class="wp-block-heading">2. Ranking Loss Concentrates on JavaScript-Heavy Page Types</h3>
<p class="wp-block-paragraph">When rankings fall after a site migration, most teams open a total organic traffic chart. It confirms the decline but doesn’t show where the problem is concentrated because migration losses are never evenly spread.</p>
<p class="wp-block-paragraph">The loss clusters on templates with the thinnest initial HTML. For example, product pages that load important details after an API request, category pages that generate listings client-side, or any template that depends on JavaScript for its main content. Meanwhile, <a href="https://prerender.io/blog/what-is-srr-and-why-do-you-need-to-know/" data-type="link" data-id="https://prerender.io/blog/what-is-srr-and-why-do-you-need-to-know/">server-rendered pages</a> in the same migration often recover faster, which is how teams reach the comfortable and wrong conclusion that the migration mostly worked.</p>
<p class="wp-block-paragraph">Two other signals go missing for the same underlying reason. Internal links rendered via a client-side router never appear in the raw HTML, so equity from the old site stops flowing to the pages that relied on it. Canonical tags injected by JS are also absent, leaving the duplicate URL variants your migration created with nothing to consolidate them.</p>
<h4 class="wp-block-heading">How to Diagnose Rendering Dependencies by Page Type</h4>
<ul class="wp-block-list">
<li><strong>Step 1: Segment Performance Data by Template Path</strong><br><br>Filter your Page Indexing and Performance reports in Google Search Console by URL pattern (e.g., <mark style="background-color:rgba(0, 0, 0, 0);color:#188038" class="has-inline-color">/product/</mark> vs. <mark style="background-color:rgba(0, 0, 0, 0);color:#188038" class="has-inline-color">/category/</mark> vs. <mark style="background-color:rgba(0, 0, 0, 0);color:#188038" class="has-inline-color">/blog/</mark>) and compare the traffic decline across each group. Look specifically for URL classes spiking in <em>“Discovered — currently not indexed,”</em> as this indicates Google found the URLs but has deferred its rendering resources.</li>
</ul>
<ul class="wp-block-list">
<li><strong>Step 2: Inspect Raw HTML vs. Rendered DOM</strong><br><br>Take a representative URL from each template and test it in GSC’s URL Inspection Tool. Compare the initial HTML response against the rendered view to audit critical SEO signals:</li>
</ul>
<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">Template</th><th class="has-text-align-left" data-align="left">Content in raw HTML?</th><th class="has-text-align-left" data-align="left">Internal links present?</th><th class="has-text-align-left" data-align="left">Canonical present?</th><th class="has-text-align-left" data-align="left">Indexing status</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">/product/</td><td class="has-text-align-left" data-align="left"></td><td class="has-text-align-left" data-align="left"></td><td class="has-text-align-left" data-align="left"></td><td class="has-text-align-left" data-align="left"></td></tr><tr><td class="has-text-align-left" data-align="left">/category/</td><td class="has-text-align-left" data-align="left"></td><td class="has-text-align-left" data-align="left"></td><td class="has-text-align-left" data-align="left"></td><td class="has-text-align-left" data-align="left"></td></tr><tr><td class="has-text-align-left" data-align="left">/blog/</td><td class="has-text-align-left" data-align="left"></td><td class="has-text-align-left" data-align="left"></td><td class="has-text-align-left" data-align="left"></td><td class="has-text-align-left" data-align="left"></td></tr></tbody></table></figure>
<ul class="wp-block-list">
<li><strong>Step 3: Evaluate Rendering Dependencies</strong><br><br>Any template where critical elements appear only after rendering has a confirmed rendering dependency. While a rendering dependency doesn’t automatically prove the root cause of every loss, it uncovers a critical blind spot no redirect map or sitemap audit will expose. For instance, Eldorado <a href="https://prerender.io/resources/case-studies/how-eldorados-traffic-grew-by-80-after-fixing-spa-rendering-issues/" data-type="link" data-id="https://prerender.io/resources/case-studies/how-eldorados-traffic-grew-by-80-after-fixing-spa-rendering-issues/">increased organic traffic by 80%</a> simply by fixing SPA rendering bottlenecks that restricted search engines from accessing core content.</li>
</ul>
<p class="wp-block-paragraph">To learn more about how client-side execution affects your search visibility, read our complete guide on <a href="https://prerender.io/blog/why-javascript-complicates-indexation-and-how-to-fix-it/" data-type="link" data-id="https://prerender.io/blog/why-javascript-complicates-indexation-and-how-to-fix-it/">why JavaScript complicates indexing performance</a>.</p>
<h3 class="wp-block-heading">3. AI Crawlers Have No Rendering Fallback, and Migration Resets Their Crawl History Too</h3>
<p class="wp-block-paragraph">While Google eventually renders and reindexes your JavaScript pages, AI crawlers give you nothing equivalent.</p>
<p class="wp-block-paragraph"><a href="https://vercel.com/blog/the-rise-of-the-ai-crawler" data-type="link" data-id="https://vercel.com/blog/the-rise-of-the-ai-crawler" target="_blank" rel="noreferrer noopener nofollow">Vercel and MERJ analyzed</a> hundreds of millions of crawler fetches and found no evidence that any major AI crawler executes JavaScript. GPTBot fetched JavaScript files in about 11.5% of requests without executing them, while ClaudeBot downloaded them in about 23.84% of requests and never ran them. PerplexityBot, Bytespider, and Meta’s crawler behave the same way. Only Google Gemini differs, since it leverages Googlebot’s Web Rendering Service.</p>
<p class="wp-block-paragraph">This is why a site migration raises the stakes. Googlebot queues your new URLs and eventually reaches them, whereas an AI crawler that requests a new URL and receives an empty shell simply records it and moves on. Nothing holds the page for another attempt, so your content stops <a href="https://prerender.io/blog/ai-optimization-technical-seo-guide/" data-type="link" data-id="https://prerender.io/blog/ai-optimization-technical-seo-guide/">surfacing in AI-generated answers</a>, and no rank tracking tool will show you it happened.</p>
<p class="wp-block-paragraph">Structured data further widens that gap. AI systems rely on schema markup to understand a page and cite it confidently, so product, FAQ, and organization schema injected through a tag manager or a JavaScript component stays invisible to every non-rendering crawler until rendering is fixed.</p>
<h4 class="wp-block-heading">How to Diagnose AI Crawler Visibility and Schema Gaps</h4>
<ul class="wp-block-list">
<li><strong>Step 1: Inspect the Raw Source Code<br></strong><br>Open View Source (Ctrl+U / Cmd+Option+U) on your live URL to view the unrendered server response.</li>
</ul>
<ul class="wp-block-list">
<li><strong>Step 2: Run a String Search for Core Elements</strong><br><br>Search the raw source response for three critical identifiers:<br>
<ul class="wp-block-list">
<li>Your main page heading</li>
<li>A distinctive line of primary body copy</li>
<li>Your JSON-LD structured data block</li>
</ul>
</li>
</ul>
<ul class="wp-block-list">
<li><strong>Step 3: Audit Template Exposure</strong><br><br>Execute this check across the same templates evaluated in your GSC audit. Anything missing from the raw source code is completely invisible to AI crawlers today, with no deferred rendering queue to fix it tomorrow.</li>
</ul>
<p class="wp-block-paragraph">To learn more about how search engines and LLM crawlers process your site differently, read our detailed breakdown on <a href="https://prerender.io/blog/understanding-web-crawlers-traditional-ai/" data-type="link" data-id="https://prerender.io/blog/understanding-web-crawlers-traditional-ai/">understanding web crawlers: traditional vs. AI bots</a>.</p>
<h2 class="wp-block-heading">How to Protect SEO Rankings During a Site Migration</h2>
<p class="wp-block-paragraph">Once you’ve identified a rendering dependency, the fix isn’t to rebuild your SEO migration plan. It’s to add a layer that gives crawlers a complete representation of your new pages immediately, without requiring each one to do the rendering work itself.</p>
<h3 class="wp-block-heading">5 Consequence Risks: What Happens to Rankings Without a Rendering Layer</h3>
<ul class="wp-block-list">
<li><strong>Indexing takes longer.</strong> Google Search Console reports blank or thin pages at new URLs while the rendering queue works through your inventory.</li>
<li><strong>Redirects fail silently for bots.</strong> Client-side and JavaScript-driven redirects fire in a browser and never execute for a crawler that does not run JavaScript.</li>
<li><strong>Pre-migration link equity goes to waste.</strong> Bots cannot render the new URLs to confirm the destination exists, so the authority pointed at your old pages has nowhere to land.</li>
<li><strong>Ranking losses becomes harder to diagnose.</strong> Aggregate traffic data shows a decline without revealing that one JavaScript-heavy template accounts for most of it.</li>
<li><strong>International SEO signals become harder to validate.</strong> Crawlers that never execute JavaScript can’t confirm hreflang annotations generated through JavaScript.</li>
</ul>
<h3 class="wp-block-heading">How Prerender.io Protects Your Site Before, During, and After Migration</h3>
<p class="wp-block-paragraph"><a href="https://prerender.io" data-type="link" data-id="https://prerender.io">Prerender.io</a> provides a rendering layer for JavaScript sites. It intercepts crawler requests at your CDN or server, <a href="https://prerender.io/blog/how-prerender-renders-javascript-websites/" data-type="link" data-id="https://prerender.io/blog/how-prerender-renders-javascript-websites/">renders the page</a> in a headless browser, caches the resulting HTML, and serves that version to the crawler.</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="624" height="296" src="https://prerender.io/wp-content/uploads/migration-timeline.jpg" alt="How Prerender.io Protects Your Site Before, During, and After Migration" class="wp-image-14961" srcset="https://prerender.io/wp-content/uploads/migration-timeline.jpg 624w, https://prerender.io/wp-content/uploads/migration-timeline-300x142.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>
<p class="wp-block-paragraph">Across a migration timeline, this infrastructure layer operates in three distinct phases:</p>
<p class="wp-block-paragraph"><strong>A. Before Migration (Pre-Cutover Indexing)</strong></p>
<ul class="wp-block-list">
<li>Phased and incremental migrations often run old and new stacks in parallel.</li>
<li>Prerender serves fully rendered pages from the new stack to search engines before full cutover.</li>
<li>Bots index the new URLs while construction is finishing, ensuring cutover happens against URLs that already have an established index history.</li>
</ul>
<p class="wp-block-paragraph"><strong>B. During Migration (Crawl Budget and Signal Preservation)</strong></p>
<ul class="wp-block-list">
<li>Prerender complements correct 301 redirects and URL mapping.</li>
<li>Once a crawler reaches a JS-heavy destination URL, Prerender serves static HTML directly rather than forcing client-side execution.</li>
<li>Crawl budget is preserved because crawlers aren’t wasting allocation on unrenderable URLs or multi-hop redirect chains.</li>
</ul>
<p class="wp-block-paragraph"><strong>C. After Migration (Cache Hygiene and Signal Validation)</strong></p>
<ul class="wp-block-list">
<li>Prerender serves cached rendered pages instantly on subsequent crawls, preventing GSC from registering blank pages.</li>
<li>Critical Cache Hygiene Step: Clear stale snapshots keyed to pre-migration URLs by clearing cache by URL pattern, submitting your new XML sitemap, and <a href="https://docs.prerender.io/docs/how-to-purge-cache">using the Recache API</a> to prioritize revenue-critical pages.</li>
<li>JS-dependent elements—including body content, internal links, schema markup, and <mark style="background-color:rgba(0, 0, 0, 0);color:#188038" class="has-inline-color">hreflang</mark> tags—become permanently visible to all supported crawlers.</li>
</ul>
<h2 class="wp-block-heading">Protecting Your Site Migration SEO Beyond the Standard Checklist</h2>
<p class="wp-block-paragraph">A website migration can fail for many reasons, but when redirects, canonical tags, and other standard checks don’t explain a lasting ranking drop, your rendering setup is the next place to look. Site migration SEO stops where a crawler requests your new URL, and the rendering layer determines what happens next.</p>
<p class="wp-block-paragraph">If important content and SEO signals depend on JavaScript, serving crawlers complete rendered HTML through Prerender.io removes a major blind spot that no migration checklist covers.</p>
<p class="wp-block-paragraph"><a href="https://prerender.io/pricing/">Try Prerender.io for free</a> and see how prerendering protects your site’s visibility before, during, and after a migration.</p>
<h2 class="wp-block-heading">FAQs on Site Migration</h2>
<h3 class="wp-block-heading">1. How long does it take to recover SEO rankings after a site migration?</h3>
<p class="wp-block-paragraph">Recovering SEO rankings after a site migration typically takes a few weeks for small to medium-sized sites, while enterprise-level migrations can take several months. <a href="https://developers.google.com/search/docs/crawling-indexing/site-move-with-url-changes" target="_blank" rel="noreferrer noopener nofollow">According to Google, recovery timelines depend on URL volume and server processing speed</a>. For JavaScript-heavy applications, rendering capacity becomes a critical third variable: a URL that has been crawled remains unindexed until search engines complete the rendering phase.</p>
<h3 class="wp-block-heading">2. Why do SEO rankings drop after a site migration even when redirects are correct?</h3>
<p class="wp-block-paragraph">SEO rankings can drop after a site migration with correct 301 redirects because a proper redirect only transfers URL signals. It does not guarantee the destination page is free of technical or rendering issues. On JS sites, ranking drops frequently trace back to rendering failures in which critical content, links, or canonical tags fail to appear in the initial HTML shell. Comparing the raw crawled HTML against the rendered view in Search Console’s URL Inspection tool will confirm if rendering dependencies are responsible.</p>
<h3 class="wp-block-heading">3. How do you check whether JavaScript rendering is affecting SEO after a migration?</h3>
<p class="wp-block-paragraph">You can check if JavaScript rendering is affecting your post-migration SEO by segmenting your affected URLs by page template rather than looking at aggregate traffic charts. Inspect representative URLs from each template using GSC’s URL Inspection Tool and compare the raw HTML response against the rendered view. If critical elements like body copy, internal links, canonical tags, or schema markup appear only after JavaScript executes, you have confirmed a rendering dependency that requires a dedicated rendering solution</p>
<p class="wp-block-paragraph"></p>
]]></content:encoded>
</item>
<item>
<title>What Hreflang Checker Misses on JavaScript Websites</title>
<link>https://prerender.io/blog/hreflang-checker/</link>
<dc:creator><![CDATA[Prerender]]></dc:creator>
<pubDate>Wed, 30 Sep 2026 15:34:53 +0000</pubDate>
<category><![CDATA[Technical SEO]]></category>
<guid isPermaLink="false">https://prerender.io/?p=14936</guid>
<description><![CDATA[Discover why JavaScript-rendered hreflang tags pass audit tools but fail for Googlebot and AI crawlers—and how to fix it.]]></description>
<content:encoded><![CDATA[
<p class="wp-block-paragraph">Your hreflang checker says every hreflang tag is in place, yet your international buyers landing on the wrong storefront (German shoppers visit the the French website) and Search Console keeps indexing the wrong locale. If that sounds familiar, the problem is not your hreflang implementation itself.</p>
<p class="wp-block-paragraph">On JavaScript-heavy sites, the tool auditing your hreflang tags and the crawler indexing them often read two different versions of the same page. Your hreflang checker reads one version and reports success, but Googlebot reads the other version and finds nothing.</p>
<p class="wp-block-paragraph">This article explains how that gap forms, why it breaks entire language clusters rather than individual tags, and why AI crawlers turn a delayed problem into a permanent one. By the end, you’ll know exactly why a passing hreflang audit can sit on top of a broken hreflang setup, and what actually closes the gap — all to help you improve your international SEO health.</p>
<h2 class="wp-block-heading">Key Takeaways: How Hreflang Checker Blind Spots Hurt International SEO</h2>
<ul class="wp-block-list">
<li><strong>Hreflang audit tools vs. search engine discrepancy:</strong> Hreflang checkers test your site after JavaScript loads, but search engines read your raw website code first—meaning they completely miss your language tags if they are added by JavaScript.</li>
<li><strong>Misleading audit results:</strong> your site can pass every test with zero errors, yet search engines will still send visitors to the wrong country’s page because the testing tools and search bots are reading two different versions of your site.</li>
<li><strong>Prerender.io for multi-language websites:</strong> by using Prerender.io to serve fully loaded, static HTML right away, every search engine and AI bot instantly sees your complete hreflang tags on the very first try.</li>
</ul>
<h2 class="wp-block-heading">How Does Hreflang Checker Work?</h2>
<p class="wp-block-paragraph">Hreflang checker validates your international SEO setup by simulating a user’s browser. When you run an audit, the tool requests each URL, lets your server return the page, and executes any client-side JavaScript before scanning the DOM for tags. It verifies that every language variant is declared, return links point back correctly, and canonical URLs align.</p>
<p class="wp-block-paragraph">Because these tools evaluate the finished, fully rendered page, they report a clean implementation as long as your tags exist once JavaScript finishes running, regardless of when or how those tags were delivered.</p>
<h2 class="wp-block-heading">Why Does an Hreflang Audit Pass When the Wrong Locales Rank?</h2>
<p class="wp-block-paragraph">You’ve run your site through Screaming Frog, Ahrefs Site Audit, or a browser-based hreflang checker. Every locale page shows its tags, return links, and the report comes back clean, but your traffic tells a different story.</p>
<p class="wp-block-paragraph">German shoppers keep resolving to the French storefront, the localized pricing you built for that market never reaches it, and Search Console’s Pages report shows the wrong locale indexed as canonical. Both things are true at once, and neither tool is malfunctioning.</p>
<p class="wp-block-paragraph">The problem is that your hreflang checker loads the page as a browser would. It waits for JavaScript to run, lets your framework inject the hreflang tags, and grades the finished result. Googlebot’s first crawl never waits. It just reads the raw HTML response off your server and moves on.</p>
<p class="wp-block-paragraph">When your hreflang tags only appear after JavaScript executes, your checker sees a complete implementation, and Googlebot sees nothing at all. That’s a false negative, and it’s the most expensive kind.</p>
<p class="wp-block-paragraph">Search Console won’t explicitly flag the issue for you either. <a href="https://support.google.com/webmasters/answer/12474899?hl=en" data-type="link" data-id="https://support.google.com/webmasters/answer/12474899?hl=en" target="_blank" rel="noreferrer noopener nofollow">Google removed the dedicated International Targeting report in September 2022</a>, meaning GSC no longer provides direct hreflang error diagnostics. Instead, the symptom shows up quietly in your GSC Pages report: Google selects the wrong country page as the primary canonical, leaving your intended localized URL unindexed or misrouted.”</p>
<p class="wp-block-paragraph">So the question isn’t whether your hreflang tags are correct. It’s <strong>which version of your page was Google reading when it decided?</strong></p>
<h2 class="wp-block-heading">How Hreflang Tags Are Served on JavaScript-Rendered Sites</h2>
<p class="wp-block-paragraph">Googlebot indexes a JavaScript site in two passes, and your hreflang tags may only exist in the second.</p>
<p class="wp-block-paragraph">The first pass, Wave 1, reads the raw HTML your server returns and processes it immediately. Links, meta tags, and hreflang annotations present in that response enter Google’s systems right away.</p>
<p class="wp-block-paragraph">The second pass, Wave 2, happens later. Google sends the page to its Web Rendering Service, a <a href="https://prerender.io/blog/how-prerender-renders-javascript-websites/" data-type="link" data-id="https://prerender.io/blog/how-prerender-renders-javascript-websites/">headless Chromium renderer</a> that executes your JavaScript and captures whatever your framework added to the page. Only then does Google see content and tags that were injected client-side.</p>
<p class="wp-block-paragraph">Wave 2 is queued, and the queue is shared across the entire web. <a href="https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics" data-type="link" data-id="https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics" target="_blank" rel="noreferrer noopener nofollow">Google’s own documentation</a> says a page may sit in that queue for a few seconds, but it can take longer. In practice, depending on your site’s size and crawl priority, the gap between Wave 1 and Wave 2 stretches from a few hours to several weeks. During that window, Google is working with a version of your page that may contain no hreflang tags at all.</p>
<p class="wp-block-paragraph">Your hreflang checker skips that window, evaluating the same output Wave 2 eventually produces. It grades the version Googlebot sees last, while Google’s language targeting begins with the version it sees first.</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="624" height="351" src="https://prerender.io/wp-content/uploads/What-hreflang-checker-vs.-Google-vs.-AI-crawler-sees.png" alt="What hreflang checker vs. Google vs. AI crawler sees" class="wp-image-14942" srcset="https://prerender.io/wp-content/uploads/What-hreflang-checker-vs.-Google-vs.-AI-crawler-sees.png 624w, https://prerender.io/wp-content/uploads/What-hreflang-checker-vs.-Google-vs.-AI-crawler-sees-300x169.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>
<p class="wp-block-paragraph">The diagram above traces both readers along the same pipeline. Your audit grades the finish line. Google’s language targeting starts at the gun.</p>
<p class="wp-block-paragraph">That mismatch explains the contradiction between your clean hreflang audit and your misrouted traffic. Both are reporting honestly on different documents.</p>
<h2 class="wp-block-heading">3 Ways JavaScript Rendering Breaks Your Hreflang Tags</h2>
<p class="wp-block-paragraph">Hreflang operates in clusters. Every language version must reference every other version, and each must link back. Google treats that bidirectional agreement as a single unit, so if it breaks anywhere, Google can discard signals for the whole group, and your English, German, and Japanese pages stop supporting each other overnight. That’s why one JavaScript-injected page can take down every locale it’s linked to.</p>
<p class="wp-block-paragraph">Rendering attacks cluster integrity in three ways: <strong>the return links, the canonical, and the timing</strong>.</p>
<h3 class="wp-block-heading">1. Missing Return Links: One-Sided Signals in Raw HTML</h3>
<p class="wp-block-paragraph"><a href="https://developers.google.com/search/docs/specialty/international/localized-versions" data-type="link" data-id="https://developers.google.com/search/docs/specialty/international/localized-versions" target="_blank" rel="noreferrer noopener nofollow">Google’s hreflang documentation</a> is explicit: if page X links to page Y, page Y must link back to page X, and where that isn’t true across all pages using hreflang — the annotations may be ignored or misinterpreted.</p>
<p class="wp-block-paragraph">Suppose your US page lists all its alternates in raw HTML, but your German and French pages inject their hreflang tags with JavaScript. On Googlebot’s first pass over those alternate pages, the return links pointing back to the US page aren’t there. Without confirmed return links, Google may treat the relationship as unverified and reject the cluster.</p>
<p class="wp-block-paragraph">Your hreflang checker won’t catch this, because it reads the rendered version of every page in the cluster. Each page looks complete. The raw HTML tells a different story, and that’s what Wave 1 indexes.</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="624" height="351" src="https://prerender.io/wp-content/uploads/Why-JS-breaks-your-hreflang-configuration.png" alt="Why JS breaks your hreflang configuration" class="wp-image-14943" srcset="https://prerender.io/wp-content/uploads/Why-JS-breaks-your-hreflang-configuration.png 624w, https://prerender.io/wp-content/uploads/Why-JS-breaks-your-hreflang-configuration-300x169.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>
<p class="wp-block-paragraph">In the comparison above, two missing return links are enough to leave the whole cluster unconfirmed.</p>
<h3 class="wp-block-heading">2. Canonical Conflicts: Raw HTML vs. JavaScript Signals to Googlebot</h3>
<p class="wp-block-paragraph">Many JavaScript frameworks inject the canonical tag and the hreflang tags together. If the raw HTML ships with a default canonical, or none at all, and JavaScript later rewrites it, Google receives two conflicting canonical signals for the same URL at two different times.</p>
<p class="wp-block-paragraph">Hreflang depends on canonicals. Google requires each annotation to point to the canonical version of its locale page, and a canonical pointing to a different language version causes Google to disregard the hreflang annotations on non-canonical pages.</p>
<p class="wp-block-paragraph">When the canonical itself is ambiguous, Google can’t resolve which URLs belong in the cluster, and ignoring the hreflang signals is the safest option from its side. One rendering inconsistency compounds into a second, and together they take down the group.</p>
<h3 class="wp-block-heading">3. Render Timing Gaps: Why Locale Pages Fail to Index at the Same Time</h3>
<p class="wp-block-paragraph">Render priority isn’t spread evenly across your site. High-traffic pages tend to get rendered sooner. Deep catalog pages, long-tail product variants, and low-priority locale pages wait longer in the render queue.</p>
<p class="wp-block-paragraph">On a multi-language ecommerce site with 300,000 to 1 million+ URLs, that means <strong>your hreflang visibility is never in a single consistent state</strong>. At any point in the crawl cycle, some pages in a cluster have rendered and show their tags while their siblings haven’t. Google keeps encountering partially confirmed clusters, and partial confirmation often reads as failure.</p>
<p class="wp-block-paragraph">React sites show this clearly. If <a href="https://prerender.io/blog/common-javascript-seo-problems/" data-type="link" data-id="https://prerender.io/blog/common-javascript-seo-problems/">hreflang tags are added during hydration</a>, each page’s tags surface only when that page clears the render queue. Two pages in the same cluster, deployed from identical code, can show Google different hreflang states for weeks. The inconsistency is structural, and it persists no matter how many times your audit passes.</p>
<h2 class="wp-block-heading">Why AI Crawlers (GPTBot, Perplexity) Ignore JavaScript Hreflang Tags</h2>
<p class="wp-block-paragraph">Googlebot does eventually run Wave 2 and pick up your JavaScript-injected tags, even if the cluster suffers while it waits. Every failure so far has been a delay.</p>
<p class="wp-block-paragraph">AI crawlers, however, remove the “eventually.” GPTBot, ClaudeBot, PerplexityBot, and the other bots feeding AI search surfaces do not execute JavaScript at all. They read the raw HTML response and stop there. There is no second wave, no render queue, and no later pass that catches up. <a href="https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics" data-type="link" data-id="https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics" target="_blank" rel="noreferrer noopener nofollow">Google’s own JavaScript SEO documentation</a> concedes the point from the other side, recommending pre-rendering partly because not all bots can run JavaScript.</p>
<p class="wp-block-paragraph">For a multi-market business, the consequence is direct. <strong>If your hreflang tags are injected client-side, every AI-driven search surface is working with zero language signal from your site</strong>. When an AI assistant answers a shopping query from a user in Germany, it has no machine-readable way to know your German-language catalog exists, because the page it fetched never declared any alternatives.</p>
<p class="wp-block-paragraph">The x-default tag shows how the checker deepens that false confidence. Checkers evaluate the rendered page, where x-default is present, and report it as fine.</p>
<p class="wp-block-paragraph">On a client-side single-page application, an x-default that only appears after JavaScript runs may never reach Googlebot’s initial index, and will never reach an AI crawler at all. The checker validates a tag that a growing share of crawlers cannot see.</p>
<p class="wp-block-paragraph">For Googlebot, JavaScript-injected hreflang is a reliability problem you can wait out. For AI crawlers, waiting changes nothing because the tag was never in the document they read.</p>
<h2 class="wp-block-heading">Prerender.io Solves Hreflang Issues for Multi-Language Websites</h2>
<p class="wp-block-paragraph">The fix to hreflang issues is to make sure there’s only one version of your page to read, and Prerender.io can help with that.</p>
<p class="wp-block-paragraph">Prerender.io does this by <a href="https://prerender.io/blog/a-guide-to-prerender-process-and-benefits/" data-type="link" data-id="https://prerender.io/blog/a-guide-to-prerender-process-and-benefits/">rendering your JavaScript pages in advance</a> and serving crawlers a static HTML snapshot with everything already in place, hreflang tags included. When Googlebot requests a page, it receives a complete document on the first pass, so the Wave 1 and Wave 2 distinction stops mattering. There’s nothing left for rendering to add.</p>
<p class="wp-block-paragraph">One change closes all four gaps. Return links and canonicals ship together in the raw HTML of every locale page, so clusters confirm on first contact instead of waiting for a render that arrives page by page. Your audit starts grading the document Google indexes, and because GPTBot, ClaudeBot, and PerplexityBot read raw HTML, your language signal reaches AI search for the first time.</p>
<p class="wp-block-paragraph">Prerender.io makes the hreflang tags you’ve already implemented visible to every crawler — pair it with your existing hreflang checker to catch misconfigurations before they ship. It makes the hreflang tags you’ve already implemented exist in the document every crawler receives, the one thing no hreflang checker can do for you. If your locale pages are rendering client-side, that gap is already costing you traffic across every market you’ve localized for.</p>
<p class="wp-block-paragraph"><a href="https://prerender.io/pricing/" data-type="link" data-id="https://prerender.io/pricing/">Start a free trial with Prerender</a> and see what Googlebot sees on the first request.</p>
<h2 class="wp-block-heading">Final Thoughts on Hreflang Checker Blind Spots</h2>
<p class="wp-block-paragraph">Your hreflang checker isn’t broken. It answers a question you didn’t mean to ask: does hreflang exist once the page has finished loading? What you needed to know was whether the tags exist in the document that the document crawlers receive.</p>
<p class="wp-block-paragraph">On a server-rendered site, those questions have the same answer, which is why the checker earned your trust. On a JavaScript site, they come apart, and every hour your tags wait in the render queue is an hour Google routes your German shoppers by guesswork.</p>
<p class="wp-block-paragraph">Check it yourself in two minutes. Disable JavaScript, view the page source of one locale page, and search it for hreflang. If the tags aren’t there, no checker result is worth acting on until they are.</p>
<h2 class="wp-block-heading">FAQs About Hreflang Checker for Multiple-Language Websites</h2>
<h3 class="wp-block-heading">Why Does My Hreflang Checker Show No Errors While the Wrong Locale Still Ranks?</h3>
<p class="wp-block-paragraph">My hreflang checker shows no errors while Search Console indexes the wrong country page because your checker evaluates the rendered page after JavaScript runs, but Googlebot’s initial pass only reads raw HTML. Client-side tags are invisible on that first crawl, and without GSC’s deprecated International Targeting report, Googlebot silently defaults to routing users without hreflang signals—indexing the wrong country page while your audit tool passes.</p>
<h3 class="wp-block-heading">If My Hreflang Cluster Looks Correct in My Checker Tool, Can Google Still Reject It?</h3>
<p class="wp-block-paragraph">If your hreflang cluster looks correct in your checker tool, Google can still reject it because your checker reads every page fully rendered, making the whole cluster look confirmed. However, if any locale page serves its return links via JavaScript, those links are absent from the raw HTML Google indexes first. Unconfirmed return links, or a canonical that conflicts with the injected tags, can make Google discard signals for the entire cluster while your audit still passes.</p>
<h3 class="wp-block-heading">Do AI Crawlers Like ChatGPT’s and Perplexity’s Bots Support Hreflang at All?</h3>
<p class="wp-block-paragraph">AI crawlers like ChatGPT’s and Perplexity’s bots support hreflang only if the tags exist in the raw HTML response. GPTBot, ClaudeBot, and PerplexityBot do not execute JavaScript, so any hreflang tag added client-side is permanently invisible to them. On a JavaScript site without pre-rendering, AI search surfaces receive no language signal from your pages.</p>
<h3 class="wp-block-heading">How Does Prerender.io Handle Localized Pricing, Currency, and Stock Variations Across Different Markets?</h3>
<p class="wp-block-paragraph">Prerender.io handles localized pricing, currency, and stock variations across different markets by rendering and caching each locale URL as its own document, so your German page is snapshotted with its German pricing, currency, and availability, and your Japanese page with its own. Crawlers requesting each URL receive the fully localized version of that page, with recaching keeping time-sensitive details like stock levels current.</p>
<h3 class="wp-block-heading">Does Using Prerender.io for Hreflang Tags Count as Cloaking?</h3>
<p class="wp-block-paragraph">Using Prerender.io for hreflang tags does not count as cloaking because cloaking means showing crawlers meaningfully different content than users see. Prerender.io serves crawlers the same content your users get after JavaScript runs, delivered as static HTML. Google’s own documentation states that it generally doesn’t treat dynamic rendering as cloaking as long as the crawler and the user receive similar content, which is how Prerender.io works.</p>
]]></content:encoded>
</item>
<item>
<title>Product-Led SEO and What AI Search Broke</title>
<link>https://prerender.io/blog/product-led-seo-and-what-ai-search-broke/</link>
<dc:creator><![CDATA[Prerender]]></dc:creator>
<pubDate>Tue, 29 Sep 2026 10:52:03 +0000</pubDate>
<category><![CDATA[AI SEO]]></category>
<category><![CDATA[Podcast]]></category>
<guid isPermaLink="false">https://prerender.io/?p=14927</guid>
<description><![CDATA[Get Discovered is back! Kickstarting season three, we discuss what AI has really changed in search and what it hasn't with Eli Schwartz, author of Product-Led SEO. Tune in! ]]></description>
<content:encoded><![CDATA[
<p class="wp-block-paragraph">For years, SEO’s job was simple: rank, get the click, own the journey from there. <a href="https://www.elischwartz.co/" data-type="link" data-id="https://www.elischwartz.co/">Eli Schwartz</a>, author of <em>Product-Led SEO</em> and strategist who took SurveyMonkey’s organic search from near-zero to a $200M-a-year growth engine, says that doesn’t exist anymore.</p>
<p class="wp-block-paragraph">Opening season 3 of <a href="https://prerender.io/podcast/" data-type="link" data-id="https://prerender.io/podcast/">Get Discovered</a> Podcast, he argued this isn’t a crisis. It’s SEO doing what it always has, adapting to a new interface</p>
<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://youtu.be/x0D_JsZoBqM">Listen now</a></div>
</div>
<h2 class="wp-block-heading">Product-led SEO was never about writing more</h2>
<p class="wp-block-paragraph">Five years after his book, Schwartz’s core idea is sharper than ever. Stop building content for the algorithm and start building a product for the searcher.</p>
<p class="wp-block-paragraph">Most companies still treat SEO as “create for the machine and hope.” Rank, trap the visitor, and figure out monetization later. Product-led SEO starts instead with why someone opens a search bar. What’s their trigger, the job to be done, and the experience that answers it?</p>
<p class="wp-block-paragraph">That matters more now. Commodity content, the kind re-explained across a thousand sites, is exactly what AI Overviews and AI Mode are built to absorb. An LLM will say it faster and never send anyone to you. The content that survives does something a summary can’t.</p>
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-9-16 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="What Does "Product-Led SEO" Really Mean?" width="540" height="960" src="https://www.youtube.com/embed/A88DtClLLtY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
<h2 class="wp-block-heading">SEO, AEO, GEO: Why the label matters less than the system behind it</h2>
<p class="wp-block-paragraph">Schwartz would rather the acronyms didn’t exist. Hiring separate SEO and AEO specialists is, in his view, as mistaken as splitting out “mobile SEO.” But with this much organizational attention flowing toward the terms, they’re probably here to stay.</p>
<p class="wp-block-paragraph">Where he and host Joe Walsh agreed: the real shift sits one layer down, in discovery and crawling, the systems most teams ignore while staring at rankings. Rankings without a click mean nothing, and being cited by an LLM doesn’t guarantee one either. AI hasn’t stolen SEO; it’s disrupted the top of the funnel SEO used to own.</p>
<h2 class="wp-block-heading">The head-term/long-tail split is dissolving</h2>
<p class="wp-block-paragraph">Search “hotel prices” and Google folds in your past searches, location, and intent signals until a two-word query behaves like a hyper-specific one. Personalization has erased the line between generic head content and pure long-tail. Anyone still designing a single “average” customer journey should take note, he advises.</p>
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-9-16 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="How Search Personalization Is Changing SEO" width="540" height="960" src="https://www.youtube.com/embed/-nyyqL1MMR8?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
<h2 class="wp-block-heading">The attribution crisis is real</h2>
<p class="wp-block-paragraph">Impressions and rankings, Schwartz argued, were vanity metrics that hid mediocre work for years. Now that AI answers have stripped that cover away, dashboards are flashing red for teams that didn’t get worse. They just lost the metric flattering them.</p>
<p class="wp-block-paragraph">His fix isn’t a new dashboard. It’s tying everything to revenue and accepting the attribution fog brand marketing has always lived with. Paid media never had to, because Google and Meta had every incentive to prove their own case. Car companies, by contrast, have always trusted that the billboard worked. SEO teams now need to build that same trust, often without the authority to change how they’re measured.</p>
<p class="wp-block-paragraph">Demand hasn’t changed; people need products and services as much as ever. The pathway has. Teams that can’t tell that story convincingly are the ones getting cut.</p>
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-9-16 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Are You Measuring the Wrong SEO Metrics?" width="540" height="960" src="https://www.youtube.com/embed/cx3fBxBCgKE?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
<h2 class="wp-block-heading">Better for users, brutal for marketers</h2>
<p class="wp-block-paragraph">Schwartz believes AI search favours users: shorter journeys and more exposure for niche, quality brands Google once buried as too risky. The tradeoff is less browsing and less serendipitous discovery.</p>
<p class="wp-block-paragraph">For marketers, the shortcuts are dying. AI can cross-reference a page’s claims against review sentiment, complaint volume, and reputation signals, so buying links and gaming rankings stop working. What survives is real quality and a real audience, which is terrifying or liberating depending on what your growth was built on.</p>
<h2 class="wp-block-heading">The takeaway</h2>
<p class="wp-block-paragraph">SEO isn’t over. The shortcuts, the vanity metrics, and the assumption that ranking equals revenue are. What’s left is the older, harder work Schwartz has always championed: know exactly who you’re building for, build something worth finding, and defend your results in a language that no longer starts with “impressions.”</p>
<h2 class="wp-block-heading">Tune in to the full conversation</h2>
<p class="wp-block-paragraph">Listen to the full episode of the Get Discovered podcast wherever you get your podcasts. Subscribe so you don’t miss any conversation on the fundamentals of online discovery and machine experience.</p>
<figure class="wp-block-embed is-type-rich is-provider-spotify wp-block-embed-spotify wp-embed-aspect-21-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Spotify Embed: Product-Led SEO and What AI Search Changed: Eli Schwartz, Author of Product-Led SEO" style="border-radius: 12px" width="100%" height="152" frameborder="0" allowfullscreen allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy" src="https://open.spotify.com/embed/show/0rzmrAPI063Y0LYpHipII8?utm_source=oembed"></iframe>
</div></figure>
<p class="wp-block-paragraph"><em><a href="https://www.linkedin.com/in/schwartze/">Eli Schwartz</a> is the author of Product-Led SEO and is currently writing Customer Intelligence*, a follow-up focused on how few companies actually understand their customers beyond a persona board. Find him on <a href="https://www.linkedin.com/in/schwartze/">LinkedIn</a> or at <a href="https://www.productledseo.com/">productledseo.com</a>.</em></p>
]]></content:encoded>
</item>
</channel>
</rss>