Test bed

next.jsseo.dev is the research test surface. Not human-readable content — a research instrument used to measure how bots and LLM fetchers see different JavaScript content patterns.

Architecture

The test bed is a Next.js 15 application deployed on Cloudflare Pages. Every URL maps to one cell in the experimental matrix:

/{mode}/{js_content_pattern}/{page_type}

For example, /ssr/js-fetched/article is an article page using Server-Side Rendering for the page shell but fetching the main body client-side after mount. A crawler without JS execution gets the shell with a "Loading content…" placeholder and no body text.

  • 3 rendering modes: ssr (primary baseline), csr (negative control), ssg (sanity check)
  • 8 JS content patterns: see methodology for details
  • 5 page types: homepage, article, category, product, search
  • 55 cells total (40 SSR + 10 CSR + 5 SSG)

Try it yourself

Open these URLs in a browser, then view the HTML source (Ctrl+U / Cmd+Option+U). The contrast between server-rendered HTML and what the browser eventually displays after JS execution is the experimental signal.

Pattern axis — 8 patterns, same page type (homepage)

Page type axis — 5 page types, same pattern (clean)

Rendering mode axis — clean pattern across modes

  • SSR / clean — primary baseline
  • CSR / clean — negative control. View source: empty shell, no main content. Content only after JS hydrates.
  • SSG / clean — sanity check vs SSR baseline (hypothesis H1).
  • CSR / mixed — realistic worst case combining CSR mode with 4 antipatterns.

Full 55-cell list: next.jsseo.dev/sitemap.xml. Project root with curated link list: next.jsseo.dev.

Why the test bed is hidden from search

next.jsseo.dev/ root carries robots: noindex so it doesn't compete with this landing for "JS SEO Lab" queries. Cells themselves are crawlable (sitemap submitted to GSC and Bing WMT) — they need to be discoverable by bots for the experiment to work. Only the root project index is noindexed.

Content on every cell is auto-generated for research purposes and is not authoritative on any topic. The content strategy doc explains the production workflow.

What gets recorded

Every request to a cell is captured by the three-layer tracker. The aggregated view lives at /dashboard; the raw data is open in the repo under data/.