Skip to content

Rule · AI search

Main content only appears after JavaScript runs

geo/js-dependencyerrorvoid geoupdated

Why it matters

OpenAI, Anthropic, Perplexity, Meta and ByteDance crawlers fetch HTML without executing JavaScript, so client-rendered text doesn't exist for them. Measured as 1 − (5-word shingles of rendered main text found in raw HTML fetched as GPTBot); above 0.20 is a scoring gate.

How to fix it

Render primary content in Server Components (or prerender it). Keep 'use client' for interactive leaves and fetch data on the server, not in useEffect.

Example

tsx
// ✗ app/pricing/page.tsx
'use client'
export default function Page() { const [plans, setPlans] = useState([]); useEffect(() => { fetch('/api/plans')... }, []) }

// ✓ Server Component: the HTML response contains the plans
export default async function Page() {
  const plans = await getPlans()
  return <PlanTable plans={plans} /> // PlanTable may be a Client Component for toggles
}

References

void geo reports 41 rules in this category. Generative-engine optimisation: whether AI crawlers that don't run JavaScript see the same content, valid and visible JSON-LD, an explicit AI robots policy, llms.txt, Markdown mirrors and answer-first writing.