I once shipped a React app whose Google result still said "Vite + React App". The content was great. Crawlers just never saw a real title, description, or canonical URL.
Most JavaScript SEO bugs aren't mysterious. They're missing basics that nobody tests. In this post I'll show how to check what crawlers actually receive , fix metadata and structured data, and gate your CI on content quality. I'll use a few open source packages along the way.
Disclosure: I'm part of the team behind @power-seo, which appears in the examples. The techniques work with any library.
1. First, see what a crawler sees
Stop guessing and fetch the raw HTML. This script flags what's missing before JavaScript runs (Node 18+, no dependencies):
// seo-check.mjs const url = process . argv [ 2 ] ?? ' http://localhost:3000 ' ; const html = await ( await fetch ( url )).…