Does Oh Dear's crawler execute JavaScript? Can it monitor SPAs (React, Vue, Inertia.js)?
Short answer: our broken links and mixed content crawler does not execute JavaScript. It fetches the raw HTML response and parses the markup directly. Our Lighthouse and AI checks do render pages in a real browser, so they see the final DOM.
For single-page applications built with React, Vue, Svelte, Inertia.js, and friends, that distinction matters. Most of your content (links, images, meta tags, etc.) is injected by JavaScript after the initial HTML load. Our non-rendering checks never see it, so they'll often report an empty-looking page or a handful of bootstrapping links.
Which checks render JavaScript?
- Uptime, performance, broken links, mixed content, sitemap — raw HTTP. No JavaScript execution.
- Lighthouse — runs in real Chrome. Sees the fully rendered page.
- AI monitoring — navigates with a real browser session. Sees the rendered page and can interact with it.
Working with SPAs on Oh Dear
You have a few options:
- Server-side render (SSR) or pre-render your pages. If your framework supports SSR (Next.js, Nuxt, Inertia with SSR, etc.), the crawler will see fully-rendered HTML just like a search engine would. This is the recommended approach, because it also helps SEO and first-paint performance.
- Use the AI monitor for critical user flows. It navigates with a real browser and can verify things like "make sure the checkout button is visible on the pricing page".
- Rely on Lighthouse for monthly rendered-performance insights on your key URLs.
- Add a sitemap listing the URLs you care about. The sitemap monitor then checks each URL independently, which sidesteps the "crawl finds no links" problem on SPAs.
Why don't we just render everything?
Running a real browser per crawl is a few orders of magnitude more expensive (CPU, memory, time) than an HTTP request. Doing it for every broken-links crawl on every monitor, every day, would massively change our cost structure, and with it our pricing.
Most of our customers have SSR-rendered sites where raw HTTP crawling gives accurate results, so we keep the broken links check fast and lightweight, and expose the browser-rendered option through Lighthouse and AI monitoring when you need it.
If you're evaluating Oh Dear specifically for a JavaScript-rendered site and none of the above works for you, let us know. It's useful context for us to have.