We use cookies. Privacy Policy

    PageGlass - JavaScript SEO Rendering for React & Vue Sites

    AJAX SEO: make AJAX-loaded content visible to Google

    AJAX content arrives after the page loads, via fetch or XMLHttpRequest. Googlebot reads the initial HTML response, sees an empty container, and moves on before your AJAX calls resolve. Most crawlers never run JavaScript at all.

    This is a known problem, and the fix is simpler than you think.

    100+ bots supportedPre-rendered by PageGlassFive-minute setupBuilt on Cloudflare's edge
    Paste your AJAX-driven site's URL above to see what Googlebot actually sees. Takes about ten seconds.

    Don't want an external tool? We understand.

    Server-rendering the AJAX-loaded sections means moving them into the initial HTML response, restructuring data fetching, and probably changing your CMS or backend. PageGlass takes five minutes and serves crawlers a fully-rendered version without touching your AJAX code.

    Fix this in three steps

    1. Run a free AJAX scan. Confirm the bot visibility gap caused by AJAX-loaded content - the scan takes ten seconds and needs no signup. You get exactly what Googlebot, Bingbot, and the AI crawlers see when they hit your URLs today, side by side with what your users see.
    2. Add one CNAME record. Point your AJAX site's domain through PageGlass in your DNS provider. The change takes thirty seconds and is fully reversible. Zero code changes, no deploy, no impact on the bundle your real users download.
    3. AJAX content is now indexable. Bot traffic now receives fully-rendered HTML for every URL on your AJAX site, while human visitors keep getting the exact same dynamic experience as before. Come back to PageGlass and run the scan again to confirm the fix.

    Why AJAX content is invisible to crawlers

    AJAX (Asynchronous JavaScript and XML, although nobody uses XML any more) is the pattern of loading data into a page after the initial HTML has arrived. Your server sends a page with empty containers; your JavaScript makes one or more fetch or XMLHttpRequest calls; the response is parsed and injected into the DOM. For human visitors with a working JavaScript runtime, the experience feels seamless. For crawlers, the page looks empty.

    The problem is that crawlers don't watch and wait. They make a single HTTP request, parse the response, extract the meta tags and content, and move to the next URL. If the meaningful content of your page only exists after an AJAX call resolves, then for every crawler that doesn't execute JavaScript - and that's most of them - the meaningful content might as well not exist.

    Common AJAX SEO mistakes

    • Loading the article body via $.load() or fetch. The article exists, but only after a second HTTP call from the browser. Googlebot reads the initial response, sees a spinner, and moves on.
    • Setting meta tags after an AJAX call returns. The title, description, and Open Graph tags update once the data arrives. Crawlers have already read the empty <head> in the initial response.
    • AJAX-driven pagination without server-rendered fallbacks. Page two of your search results exists at /results?page=2, but the URL is handled entirely client-side by an AJAX call. Crawlers requesting that URL get the same empty shell as the home page.
    • Hash fragments for AJAX state. URLs like /products#filter=red or /article#section=2 are treated as the same URL by crawlers because everything after the # is a fragment identifier. Google stopped supporting the old hashbang convention for crawling in 2015.
    • Lazy loading with IntersectionObserver. Lazy loading is a performance pattern where content loads as it scrolls into view. Crawlers don't scroll, so lazy-loaded content below the fold often never reaches them at all.

    What actually works

    Three paths: (1) move your AJAX-loaded sections into the initial HTML response by adopting server-side rendering, which is a substantial refactor for most existing sites; (2) pre-render the AJAX-resolved versions of each URL at build time, which works if your content is stable and your routes are known; or (3) use a prerendering service like PageGlass, which detects bot user-agents at the edge, runs the AJAX calls in a headless browser, and serves the fully-rendered HTML to crawlers. Human visitors continue to get the AJAX experience exactly as before.

    Related resources

    Frequently asked questions