React makes great interfaces. Left at its defaults, though, a client-rendered app can send search engines an almost empty HTML page. Google can render JavaScript, but its own documentation describes a crawl, render and index process where rendering may be queued. Other crawlers and social preview bots often don't run JavaScript at all.
1. Choose the right rendering strategy
| Strategy | What the crawler gets | Good for |
|---|---|---|
| Client-side rendering (CSR) | Empty shell, content after JS runs | Dashboards behind login |
| Server-side rendering (SSR) | Full HTML on each request | Dynamic, public pages |
| Static generation (SSG) | Pre-built HTML | Blogs, docs, landing pages |
| Incremental / hybrid | Static + periodic refresh | Large catalogs |
Frameworks like Next.js, Remix and TanStack Start make SSR and SSG straightforward. For public content, aim to put meaningful HTML in the first response.
2. Get the metadata right on every page
- A unique
and meta description per route. - A canonical URL to avoid duplicate content.
- Open Graph and Twitter tags for link previews.
- Correct
langattribute andhreflangfor multilingual sites.
3. Use real links
Google's guidelines say it follows links. A div with an onClick handler isn't a link to a crawler. Use your router's Link component, which renders a proper anchor.
4. Add structured data
JSON-LD using schema.org types (Article, Product, FAQPage, BreadcrumbList) helps search engines understand your content and can qualify pages for rich results. Validate with Google's Rich Results Test.
5. Treat Core Web Vitals as a feature
Google uses page experience signals, including Core Web Vitals: LCP (loading), INP (responsiveness, which replaced FID in March 2024) and CLS (visual stability). For React apps that means:
- Code-split routes and lazy-load heavy components.
- Set image dimensions and use modern formats.
- Avoid long main-thread tasks during hydration.
Steve Souders' High Performance Web Sites (O'Reilly, 2007) made the point years ago that most load time is spent on the front end, and it still applies.
6. Handle status codes properly
Single-page apps often return 200 for missing pages ("soft 404s"). Return real 404 and 301 responses from the server where you can.
7. Sitemaps and robots.txt
Generate an XML sitemap from your routes, reference it in robots.txt, and don't block the JS and CSS files Google needs to render.
Testing toolkit
- Google Search Console: URL Inspection
- Lighthouse and PageSpeed Insights
- Rich Results Test
- View source vs. inspect element (compare raw and rendered HTML)
Final thought
JavaScript SEO is mostly about one idea: make sure crawlers see what users see, quickly. If your React site isn't getting the visibility it deserves, DevAiGo can audit and fix it.
Sources
- Google Search Central, "Understand JavaScript SEO basics" (developers.google.com/search).
- Google, Core Web Vitals and INP documentation (web.dev).
- schema.org vocabulary.
- Steve Souders, High Performance Web Sites, O'Reilly, 2007.



