Keep key content in the raw HTML
Crawlers and AI retrieval systems may read raw HTML before executing JavaScript. Server-render the main copy, prices, answers and links, and keep metadata in the initial head. Verify with curl and with JavaScript disabled, and hydrate widgets on top of real markup.
Why this matters
Retrieval systems often read the first response, not the DOM.
Before you start
- Access to the rendering model
- A representative URL per template
How to apply it
Curl a representative page
Fetch the URL without executing JavaScript and check for the H1, first paragraphs, prices and primary links in the response body.
Check: The raw response contains the H1 and the first two paragraphs of content.
Move content rendering to the server
Use SSG or SSR for content routes and keep interactive UI in leaf components. Do not gate essential text behind click-only interactions.
Check: The raw HTML contains all essential text and links for the template.
Confirm with no-JavaScript browsing General best practice
Disable JavaScript and load the page. The user should still read the main content and navigate through links.
Check: With JavaScript disabled, the page shows the main content and at least one working navigation link.
Source: seo-mcp playbook · curated entry · report an error
Framework notes
nextjs-app
Keep content in server components and avoid `use client` at page roots; `generateMetadata` keeps the head server-rendered per route. Pre-render content routes with static generation or ISR (`export const revalidate = 3600`) so the HTML ships complete.
sveltekit
Use `+page.server.ts` load functions so content is rendered in the SSR response; `ssr = false` disables exactly what retrieval systems need.
remix
Loader data renders during SSR; avoid fetching primary content in `useEffect`, which only runs after hydration.