
Tools and providers
Part of How to audit JavaScript rendering issues for technical SEO on UK news sites
How to audit JavaScript rendering issues for technical SEO on UK news sites
A technical SEO audit for UK news sites: compare raw and rendered HTML, check hreflang and consent behaviour, and test edge caching with specialist tools.
What to take away
- JavaScript rendering issues hide behind a healthy HTTP status, so a 200 response tells you nothing about what Google indexes.
- Compare the raw HTML with the rendered DOM in Search Console before you brief developers or buy tooling.
- Server-side rendering suits news archives you cannot pre-render, while pre-rendering works well for stable template pages.
- Canonical tags, hreflang and NewsArticle markup must appear in the rendered HTML, not only in the browser.
Why React and Vue news templates break first
A newsroom publishes hundreds of URLs a day, often through a single template. React and Vue sites ship a small HTML shell and fetch headlines later, so the first crawl can return an empty container. JavaScript runs in the browser, and a crawler has to do more work to reach the same content.
For UK examples, compare public article, section and archive page types on BBC News, The Guardian, The Telegraph and MailOnline; do not infer their rendering setup from appearance.
Googlebot crawls the HTML soon after publication and renders later. On a breaking story, that gap decides whether your article is eligible for Top Stories while the topic is live.
How Googlebot renders and what it reports
Rendering is a queued second stage of crawling, not part of the first fetch. Googlebot reads the raw response, then a renderer executes scripts and stores the result for indexing. Google Search Console is where both views sit: URL Inspection shows the rendered HTML and the resources that failed to load.
Crawl Stats in the same tool reports how many render requests Google made and the response codes it received. A rise in 5xx codes during rendering points at your application server rather than the CDN.
Comparing rendering approaches
Four routes are in common use, and each trades build effort against freshness.
Rendering approaches compared
Server-side
- Crawler receives
- Complete HTML
- Best fit
- Hourly articles
- Main risk
- Server cost
Dynamic
- Crawler receives
- Pre-rendered HTML
- Best fit
- Migration templates
- Main risk
- Content drift
Pre-rendering
- Crawler receives
- Cached snapshot
- Best fit
- Section pages
- Main risk
- Stale snapshots
Client-side
- Crawler receives
- Empty shell
- Best fit
- App-like views
- Main risk
- Indexing delay
What the crawler receives
- Server-side rendering
- Complete HTML on the first response
- Dynamic rendering
- Pre-rendered HTML served to bots only
- Pre-rendering
- Cached snapshot refreshed on publish
- Client-side only
- Empty shell plus a script bundle
Where it fits
- Server-side rendering
- Article templates that change hourly
- Dynamic rendering
- Fixed templates during a migration
- Pre-rendering
- Section pages and tag archives
- Client-side only
- Logged-in or app-like views
Main risk
- Server-side rendering
- Higher server cost per request
- Dynamic rendering
- Content drift between the two versions
- Pre-rendering
- Stale snapshots after a deploy
- Client-side only
- Indexing delay and weak Discover pickup
Treat dynamic rendering as a stopgap. It adds a second build path to maintain and test, which is awkward for a newsroom shipping template changes weekly.
Audit steps that find the break
- Pull 50 article URLs from your XML sitemap, covering at least two templates and two sections.
- Fetch each URL with JavaScript disabled and save the raw HTML. Crawl the same sample with JavaScript rendering enabled in Screaming Frog SEO Spider or Sitebulb.
- Inspect the same URL in Search Console and copy the rendered HTML.
- Search both versions for the headline, byline, publication date and lead image.
- Compare canonical tags, breadcrumb markup and NewsArticle schema in each version. For multilingual URLs, check hreflang annotations and their target URLs too.
- Review server logs for Googlebot hits on the article template with Screaming Frog Log File Analyser; corroborate possible rendering fetches with URL Inspection and Crawl Stats.
- Fix one template, redeploy, then repeat steps two to five before starting the next template.
Google's documentation on consolidating duplicate URLs sets out how rel=canonical behaves, which matters when a script injects the tag after load.
Seven-step rendering audit
- Pull 50 URLs from sitemap
- Fetch each with JavaScript disabled
- Copy rendered HTML from Search Console
- Search both for headline and byline
- Compare canonical, breadcrumb, schema
- Review Googlebot render fetches in logs
- Fix one template, then repeat
Keep a before-and-after record of the rendered HTML. It is the only evidence that a fix worked when someone asks why rankings moved.
Test the response, not the browser
Fetch pages with curl using a plain user agent and save the output. Then load the same URL in a browser with JavaScript disabled and compare the two files.
If the raw HTML contains the headline but the rendered DOM does not, the problem sits in hydration. If neither contains it, the data is arriving through a separate API call the crawler never triggers.
CDN purge tools and your framework's build output show whether the empty shell came from the edge or the application. Check that before rewriting components.
UK hosting, CDN and consent quirks
Edge caches at UK points of presence can keep serving a stale pre-render after a template deploy. Cloudflare, Fastly and Akamai are examples of CDN/edge providers that can serve UK traffic; check your own DNS, response headers and hosting configuration rather than assuming which provider a site uses. Purge the cache as part of the release, not the morning after.
Consent management platforms such as OneTrust, Didomi, Sourcepoint and Usercentrics can hold back scripts until a visitor makes a choice. Check the implementation against ICO guidance and the requirements of PECR and UK GDPR. If headlines load only after a consent choice, a first visit may return a shell; keep editorial content outside the consent gate and load analytics separately.
Measure the change at scale by exporting Search Console bulk data, which lets you compare indexed counts across thousands of article URLs before and after a rendering fix.
Common questions
Does dynamic rendering still work?
It still functions, and user-agent detection remains the mechanism. Treat it as temporary: it splits your codebase and makes testing slower.
How long does reindexing take after a rendering fix?
High-demand stories tend to be recrawled quickly. Archive pages wait longer, so watch Crawl Stats and URL Inspection rather than assuming a fixed timetable.
Do I need to pre-render every article?
No. Pre-render section pages, tag archives and paginated lists. Article templates are better served by server-side rendering, so the headline arrives in the first byte of HTML.



