[{"data":1,"prerenderedAt":254},["ShallowReactive",2],{"blog-\u002Fblog\u002Fclient-reports-and-javascript-rendering":3,"blog-more-\u002Fblog\u002Fclient-reports-and-javascript-rendering":227},{"id":4,"title":5,"author":6,"body":7,"cover":215,"date":216,"description":217,"extension":218,"meta":219,"navigation":220,"path":221,"readingTime":222,"seo":223,"stem":224,"tag":225,"__hash__":226},"blog\u002Fblog\u002Fclient-reports-and-javascript-rendering.md","Client reports, JavaScript rendering and a new way around a crawl","The CrawlStat team",{"type":8,"value":9,"toc":207},"minimark",[10,19,24,27,33,36,80,93,100,104,107,118,122,140,144,200],[11,12,13,14,18],"p",{},"The most common question since launch has been some version of ",[15,16,17],"em",{},"\"how do I send this to my client?\""," The answer used to be a CSV and a lot of explaining. This update fixes that, along with a few other things you asked for.",[20,21,23],"h2",{"id":22},"client-reports","Client reports",[11,25,26],{},"Open a crawl and click the report button in its header. CrawlStat writes the crawl up as a branded A4 PDF, or a self contained web page, for someone who will never open CrawlStat.",[28,29],"screenshot",{"alt":30,"caption":31,"src":32},"The cover of a CrawlStat client report with a health score and four headline figures","Your name and colour on the cover, and the four figures a client asks about first.","\u002Fscreenshots\u002Freport-cover.png",[11,34,35],{},"It reads top to bottom, the way you'd explain the crawl in a meeting:",[37,38,39,48,55,61,67,73],"ul",{},[40,41,42,43,47],"li",{},"a ",[44,45,46],"strong",{},"health score"," and the headline figures,",[40,49,50,51,54],{},"the ",[44,52,53],{},"written summary"," from the Plan tab, if you've had the local model write one,",[40,56,57,60],{},[44,58,59],{},"where things stand",": responses, indexable pages, response times and click depth,",[40,62,50,63,66],{},[44,64,65],{},"action plan",", with how much work each fix is (one template change or page by page),",[40,68,69,72],{},[44,70,71],{},"accessibility"," barriers against WCAG 2.1 AA,",[40,74,75,76,79],{},"and ",[44,77,78],{},"every issue found",", worst first.",[11,81,82,83,86,87,92],{},"With an earlier crawl of the same site, the report also shows ",[44,84,85],{},"progress",": what was fixed, what is new, and which issues got better or worse. It uses the same matching as ",[88,89,91],"a",{"href":90},"\u002Fdocs\u002Fcomparing-crawls","Comparing crawls",", so a page that disappeared never counts as fixed.",[11,94,95,96,99],{},"Client reports are free, like every other feature. Everything is made on your machine. See ",[88,97,23],{"href":98},"\u002Fdocs\u002Fclient-reports"," for the details.",[20,101,103],{"id":102},"javascript-rendering","JavaScript rendering",[11,105,106],{},"Some sites send an almost empty page and build the content in the browser. CrawlStat used to read only what the server sent, which made those sites look thin and broken.",[11,108,109,110,113,114,117],{},"There's now a ",[44,111,112],{},"Render JavaScript"," switch in the New crawl dialog. Turn it on and each page is run in the Chrome, Edge or Brave you already have before CrawlStat reads it. Nothing extra to install. It's several times slower, so it stays off unless you need it. See ",[88,115,112],{"href":116},"\u002Fdocs\u002Fyour-first-crawl#render-javascript",".",[20,119,121],{"id":120},"every-crawl-has-its-own-page","Every crawl has its own page",[11,123,124,125,128,129,132,133,136,137,117],{},"The sidebar is simpler. ",[44,126,127],{},"Projects"," lists your crawls, either as recent cards or as one row per site with its health and the history of every crawl. Open one and everything about it is a tab away: Overview, Issues, Pages, Plan, Visualise, UX Testing and Accessibility. ",[44,130,131],{},"Recrawl"," runs it again with the same settings; ",[44,134,135],{},"Recrawl with changes"," opens them ready to change. See ",[88,138,127],{"href":139},"\u002Fdocs\u002Fprojects",[20,141,143],{"id":142},"smaller-things","Smaller things",[37,145,146,164,172,179,190],{},[40,147,148,151,152,155,156,159,160,117],{},[44,149,150],{},"Pages"," (formerly Results) has ",[44,153,154],{},"lenses"," that count broken, slow and thin pages before you click, along with pages search engines can't index. It also has an ",[44,157,158],{},"Issues"," column with each page's worst severity. See ",[88,161,163],{"href":162},"\u002Fdocs\u002Fresults-table#lenses","The Pages table",[40,165,166,168,169,117],{},[44,167,158],{}," are now ranked within each severity by what they cost you, with three figures: impact, reach and effort. Issues one template change can fix are marked. See ",[88,170,158],{"href":171},"\u002Fdocs\u002Fissues",[40,173,174,175,178],{},"The ",[44,176,177],{},"Plan"," tab exports the written report as Markdown, or straight into a client report.",[40,180,181,182,185,186,117],{},"A new ",[44,183,184],{},"Monochrome"," colour theme sits alongside Ember, Gold on graphite and Graphite in ",[88,187,189],{"href":188},"\u002Fdocs\u002Fsettings","Settings",[40,191,192,194,195,199],{},[88,193,91],{"href":90}," and ",[88,196,198],{"href":197},"\u002Fdocs\u002Fux-testing","UX Testing"," are free for everyone, like every other feature.",[11,201,202,206],{},[88,203,205],{"href":204},"\u002Fdownload","Download the latest version"," to try it.",{"title":208,"searchDepth":209,"depth":209,"links":210},"",2,[211,212,213,214],{"id":22,"depth":209,"text":23},{"id":102,"depth":209,"text":103},{"id":120,"depth":209,"text":121},{"id":142,"depth":209,"text":143},null,"2026-10-26","CrawlStat now turns a crawl into a branded PDF for your client, renders sites built with JavaScript in the browser you already have, and gives every crawl its own page. Here's what changed.","md",{},true,"\u002Fblog\u002Fclient-reports-and-javascript-rendering",4,{"title":5,"description":217},"blog\u002Fclient-reports-and-javascript-rendering","Announcement","BvMKSbkJsz36qJVGELO1MVrQSXqbV--bn5VQYeaTt3o",[228,234,235,240,245,250],{"title":229,"path":230,"date":231,"tag":232,"readingTime":233},"CrawlStat is now free and open source","\u002Fblog\u002Fcrawlstat-is-open-source","2026-11-04","News",5,{"title":5,"path":221,"date":216,"tag":225,"readingTime":222},{"title":236,"path":237,"date":238,"tag":225,"readingTime":239},"Introducing CrawlStat","\u002Fblog\u002Fintroducing-crawlstat","2026-10-21",6,{"title":241,"path":242,"date":243,"tag":244,"readingTime":239},"The database is the frontier: how CrawlStat keeps memory flat","\u002Fblog\u002Fflat-memory-crawling","2026-10-14","Engineering",{"title":246,"path":247,"date":248,"tag":249,"readingTime":239},"Redirect chains: the chain is the finding","\u002Fblog\u002Fredirect-chains-the-chain-is-the-finding","2026-10-07","SEO guide",{"title":251,"path":252,"date":253,"tag":244,"readingTime":233},"Licensing without a database","\u002Fblog\u002Flicensing-without-a-database","2026-09-30",1793827598337]