08 / Crawl
SiteAuditLint crawls raw HTML by default, which is fast and matches what crawlers see first. Turn on Render JavaScript to audit client-side rendered content and see which tracking tags really fire.
Search engines read the raw HTML first and render JavaScript later. Comparing the two is how you find content and links that only exist after rendering. SiteAuditLint keeps rendering optional: the option stays hidden until the Playwright component is installed.
1. Setting it up
pip install playwright
playwright install chromium
After installing, restart SiteAuditLint and switch on Render JavaScript in Settings > Crawl.
2. What rendering adds
| Without rendering | With rendering |
|---|---|
| Links and content in the HTML source | Links and content added by JavaScript |
| Tags found in page code and GTM containers | Tracking requests each page really sends while loading and scrolling |
| No dataLayer contents | The dataLayer and its events |
| No cookies | Cookies set during the page load |
| Consent tool detected in code | Pixels and cookies that fire before the visitor accepts anything |
3. Fired tracking hits
With rendering on, the Tracking & Pixels audit records real hits for GA4, Meta, TikTok, Google Ads, LinkedIn, Pinterest, Microsoft Ads and Clarity. This is how double page views and tracking before consent are detected.
CriticalPage view sent twice on one page load
The browser sent the same page view event twice while loading this page, so traffic is double counted in reports.
How to fix: Find the second source (hard-coded gtag plus GTM, or two GA4 config tags) with GTM Preview and remove one.
CriticalTracking before consent
The page has a consent banner, but a first-time visitor who has not accepted anything is already tracked: pixels fire or tracking cookies are set. That is what consent rules (GDPR, UK GDPR, ePrivacy) are meant to prevent. GA4 pings sent with Consent Mode denied are not counted here.
How to fix: Load these tags only after consent: use the consent tool's GTM integration or Consent Mode, set tags to require ad_storage / analytics_storage, and remove hard-coded pixels.
Rendering loads each page in a real browser, so audits take longer. Start with a smaller page limit on large JavaScript sites.
Frequently asked questions
Do I need JavaScript rendering?
Only if important content, links or tags are added by JavaScript after the page loads, as on many React, Vue and Angular sites. Most server-rendered sites audit fully without it.
How do I enable it?
Install the optional Playwright component with pip install playwright and playwright install chromium. The Render JavaScript option then appears in Settings > Crawl.
Does rendering click buttons or submit forms?
No. Pages are loaded and scrolled, but nothing is clicked or submitted, so sign-ups and purchases are never triggered on a live site.
Want the background first? Browse the SiteAuditLint Academy, or see all features.