[{"data":1,"prerenderedAt":469},["ShallowReactive",2],{"docs-navigation":3,"docs-\u002Fdocs\u002Fcrawler-logs\u002Fchoosing-a-log-path":213},[4],{"title":5,"path":6,"stem":7,"children":8,"page":30},"Docs","\u002Fdocs","docs",[9,31,56,98,118,138,163],{"title":10,"description":11,"group":11,"path":12,"stem":13,"children":14,"page":30},"Getting started",null,"\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",[15,20,25],{"title":16,"path":17,"stem":18,"description":19,"group":11},"Overview","\u002Fdocs\u002Fgetting-started\u002Foverview","docs\u002F1.getting-started\u002F1.overview","What Shruwd does and what you get out of it.",{"title":21,"path":22,"stem":23,"description":24,"group":11},"Quickstart","\u002Fdocs\u002Fgetting-started\u002Fquickstart","docs\u002F1.getting-started\u002F2.quickstart","From an empty account to your first measurement.",{"title":26,"path":27,"stem":28,"description":29,"group":11},"Reading your results","\u002Fdocs\u002Fgetting-started\u002Freading-your-results","docs\u002F1.getting-started\u002F3.reading-your-results","What the four numbers mean, and when to trust them.",false,{"title":32,"description":11,"group":11,"path":33,"stem":34,"children":35,"page":30},"What you track","\u002Fdocs\u002Ftracking","docs\u002F2.tracking",[36,41,46,51],{"title":37,"path":38,"stem":39,"description":40,"group":11},"Brands","\u002Fdocs\u002Ftracking\u002Fbrands","docs\u002F2.tracking\u002F1.brands","Add, rename and archive the brands you measure.",{"title":42,"path":43,"stem":44,"description":45,"group":11},"Prompts","\u002Fdocs\u002Ftracking\u002Fprompts","docs\u002F2.tracking\u002F2.prompts","Choose and manage the questions Shruwd asks each engine.",{"title":47,"path":48,"stem":49,"description":50,"group":11},"Competitors","\u002Fdocs\u002Ftracking\u002Fcompetitors","docs\u002F2.tracking\u002F3.competitors","Track the brands you are compared against, and how they are matched.",{"title":52,"path":53,"stem":54,"description":55,"group":11},"Connecting Search Console","\u002Fdocs\u002Ftracking\u002Fconnecting-search-console","docs\u002F2.tracking\u002F4.connecting-search-console","Add per-page search demand so two diagnostics can run.",{"title":57,"description":11,"group":11,"path":58,"stem":59,"children":60,"page":30},"Crawler logs","\u002Fdocs\u002Fcrawler-logs","docs\u002F3.crawler-logs",[61,66,72,77,82,87,93],{"title":62,"path":63,"stem":64,"description":65,"group":11},"Choosing a log path","\u002Fdocs\u002Fcrawler-logs\u002Fchoosing-a-log-path","docs\u002F3.crawler-logs\u002F1.choosing-a-log-path","Pick the way of sending crawler logs that matches your hosting.",{"title":67,"path":68,"stem":69,"description":70,"group":71},"Platform log drains","\u002Fdocs\u002Fcrawler-logs\u002Fplatform-log-drains","docs\u002F3.crawler-logs\u002F2.platform-log-drains","Send logs from Vercel, Netlify, Fly and similar. No code.","Setup guides",{"title":73,"path":74,"stem":75,"description":76,"group":71},"Cloudflare Worker","\u002Fdocs\u002Fcrawler-logs\u002Fcloudflare-worker","docs\u002F3.crawler-logs\u002F3.cloudflare-worker","Forward crawler hits from behind Cloudflare, on any plan.",{"title":78,"path":79,"stem":80,"description":81,"group":71},"Cloudflare Logpush","\u002Fdocs\u002Fcrawler-logs\u002Fcloudflare-logpush","docs\u002F3.crawler-logs\u002F4.cloudflare-logpush","Send zone request logs straight to Shruwd. Enterprise zones, no code.",{"title":83,"path":84,"stem":85,"description":86,"group":71},"Server middleware","\u002Fdocs\u002Fcrawler-logs\u002Fserver-middleware","docs\u002F3.crawler-logs\u002F5.server-middleware","Forward crawler hits from a Nuxt or Nitro origin. Last resort.",{"title":88,"path":89,"stem":90,"description":91,"group":92},"Crawlers tracked","\u002Fdocs\u002Fcrawler-logs\u002Fcrawlers-tracked","docs\u002F3.crawler-logs\u002F6.crawlers-tracked","Which bots Shruwd recognises, and how a hit is verified.","Reference",{"title":94,"path":95,"stem":96,"description":97,"group":92},"Ingest not arriving","\u002Fdocs\u002Fcrawler-logs\u002Fingest-not-arriving","docs\u002F3.crawler-logs\u002F7.ingest-not-arriving","Diagnose a log drain that is not delivering.",{"title":99,"description":11,"group":11,"path":100,"stem":101,"children":102,"page":30},"Findings and fixes","\u002Fdocs\u002Ffindings","docs\u002F4.findings",[103,108,113],{"title":104,"path":105,"stem":106,"description":107,"group":11},"How findings work","\u002Fdocs\u002Ffindings\u002Fhow-findings-work","docs\u002F4.findings\u002F1.how-findings-work","What a finding is, how much to trust it, and how to prove your fix worked.",{"title":109,"path":110,"stem":111,"description":112,"group":11},"Rechecks","\u002Fdocs\u002Ffindings\u002Frechecks","docs\u002F4.findings\u002F2.rechecks","How Shruwd proves whether your fix moved the number.",{"title":114,"path":115,"stem":116,"description":117,"group":11},"Findings reference","\u002Fdocs\u002Ffindings\u002Ffindings-reference","docs\u002F4.findings\u002F3.findings-reference","Every diagnostic Shruwd runs, what triggers it and what to do.",{"title":119,"description":11,"group":11,"path":120,"stem":121,"children":122,"page":30},"Metrics","\u002Fdocs\u002Fmetrics","docs\u002F5.metrics",[123,128,133],{"title":124,"path":125,"stem":126,"description":127,"group":11},"Metric definitions","\u002Fdocs\u002Fmetrics\u002Fmetric-definitions","docs\u002F5.metrics\u002F1.metric-definitions","Exactly what each number counts, and when it is undefined.",{"title":129,"path":130,"stem":131,"description":132,"group":11},"Confidence and sample size","\u002Fdocs\u002Fmetrics\u002Fconfidence-and-sample-size","docs\u002F5.metrics\u002F2.confidence-and-sample-size","Why every number has a range, and why some are withheld.",{"title":134,"path":135,"stem":136,"description":137,"group":11},"When a number has moved","\u002Fdocs\u002Fmetrics\u002Fwhen-a-number-has-moved","docs\u002F5.metrics\u002F3.when-a-number-has-moved","The rule Shruwd uses before calling a change real.",{"title":139,"description":11,"group":11,"path":140,"stem":141,"children":142,"page":30},"Account","\u002Fdocs\u002Faccount","docs\u002F6.account",[143,148,153,158],{"title":144,"path":145,"stem":146,"description":147,"group":11},"Plans and limits","\u002Fdocs\u002Faccount\u002Fplans-and-limits","docs\u002F6.account\u002F1.plans-and-limits","What each plan includes and what happens when you reach a limit.",{"title":149,"path":150,"stem":151,"description":152,"group":11},"Team and roles","\u002Fdocs\u002Faccount\u002Fteam-and-roles","docs\u002F6.account\u002F2.team-and-roles","Invite people, set what they can change, and remove access.",{"title":154,"path":155,"stem":156,"description":157,"group":11},"Billing","\u002Fdocs\u002Faccount\u002Fbilling","docs\u002F6.account\u002F3.billing","Change plan, read your usage, and handle a failed payment.",{"title":159,"path":160,"stem":161,"description":162,"group":11},"Email notifications","\u002Fdocs\u002Faccount\u002Femail-notifications","docs\u002F6.account\u002F4.email-notifications","What Shruwd emails you, and how to turn it off.",{"title":164,"description":11,"group":11,"path":165,"stem":166,"children":167,"page":30},"Build on Shruwd","\u002Fdocs\u002Fapi","docs\u002F7.api",[168,173,178,182,187,192,197,203,208],{"title":169,"path":170,"stem":171,"description":172,"group":11},"API overview","\u002Fdocs\u002Fapi\u002Fapi-overview","docs\u002F7.api\u002F1.api-overview","Authentication, errors, limits and the rules every endpoint follows.",{"title":37,"path":174,"stem":175,"description":176,"group":177},"\u002Fdocs\u002Fapi\u002Fbrands","docs\u002F7.api\u002F2.brands","Create, read, rename and archive brands over the API.","Endpoints",{"title":42,"path":179,"stem":180,"description":181,"group":177},"\u002Fdocs\u002Fapi\u002Fprompts","docs\u002F7.api\u002F3.prompts","Add, edit and retire the questions asked every cycle.",{"title":183,"path":184,"stem":185,"description":186,"group":177},"Entities","\u002Fdocs\u002Fapi\u002Fentities","docs\u002F7.api\u002F4.entities","Manage the brand and its competitors, and the aliases that count.",{"title":188,"path":189,"stem":190,"description":191,"group":177},"Measurement","\u002Fdocs\u002Fapi\u002Fmeasurement","docs\u002F7.api\u002F5.measurement","Run cycles and read visibility, crawlers and individual answers.",{"title":193,"path":194,"stem":195,"description":196,"group":177},"Findings","\u002Fdocs\u002Fapi\u002Ffindings","docs\u002F7.api\u002F6.findings","Read diagnosed findings and move them through their lifecycle.",{"title":198,"path":199,"stem":200,"description":201,"group":202},"TypeScript SDK","\u002Fdocs\u002Fapi\u002Ftypescript-sdk","docs\u002F7.api\u002F7.typescript-sdk","A typed client for the Shruwd API.","Clients and agents",{"title":204,"path":205,"stem":206,"description":207,"group":202},"MCP server","\u002Fdocs\u002Fapi\u002Fmcp-server","docs\u002F7.api\u002F8.mcp-server","Give Claude or Cursor tools to run Shruwd.",{"title":209,"path":210,"stem":211,"description":212,"group":202},"For AI agents","\u002Fdocs\u002Fapi\u002Ffor-ai-agents","docs\u002F7.api\u002F9.for-ai-agents","Machine-readable versions of everything here.",{"id":214,"title":62,"body":215,"description":463,"extension":464,"group":11,"meta":465,"navigation":466,"path":63,"section":57,"seo":467,"stem":64,"__hash__":468},"docs\u002Fdocs\u002F3.crawler-logs\u002F1.choosing-a-log-path.md",{"type":216,"value":217,"toc":454},"minimark",[218,222,226,229,234,237,245,249,339,342,352,356,359,367,377,380,384,391,433,436,440],[219,220,62],"h1",{"id":221},"choosing-a-log-path",[223,224,225],"p",{},"Sending your own server logs tells Shruwd which AI crawlers actually reach your pages\nand which get refused. It is the only first-party evidence in the product, and it is\nincluded on every plan, free one included.",[223,227,228],{},"This page picks the right path for your hosting. Each one is a separate guide.",[230,231,233],"h2",{"id":232},"why-bother","Why bother",[223,235,236],{},"Two of the four access diagnostics work from your domain alone. The other two need logs,\nincluding the most valuable rule in the catalogue: your server returning an error to a\nverified AI crawler while serving the same page fine to everyone else. Most people who\nhave this problem do not know it — it is usually a bot-protection setting nobody\nremembers switching on.",[223,238,239,240,244],{},"Without logs you still get findings. With logs you get the ones that say ",[241,242,243],"em",{},"we watched this\nhappen",", which are the ones worth acting on first.",[230,246,248],{"id":247},"pick-your-path","Pick your path",[250,251,252,268],"table",{},[253,254,255],"thead",{},[256,257,258,262,265],"tr",{},[259,260,261],"th",{},"Your setup",[259,263,264],{},"Path",[259,266,267],{},"Code?",[269,270,271,286,299,316,328],"tbody",{},[256,272,273,277,283],{},[274,275,276],"td",{},"Vercel (Pro or Enterprise), Netlify, Fly and similar",[274,278,279],{},[280,281,282],"a",{"href":68},"Platform log drain",[274,284,285],{},"None",[256,287,288,291,296],{},[274,289,290],{},"Behind Cloudflare, any plan",[274,292,293],{},[280,294,295],{"href":74},"Forwarder Worker",[274,297,298],{},"Deploy a small Worker",[256,300,301,309,314],{},[274,302,303,304,308],{},"Cloudflare ",[305,306,307],"strong",{},"Enterprise"," zone",[274,310,311],{},[280,312,313],{"href":79},"Logpush",[274,315,285],{},[256,317,318,321,325],{},[274,319,320],{},"Dynamic origin with no CDN in front",[274,322,323],{},[280,324,83],{"href":84},[274,326,327],{},"A middleware file",[256,329,330,333,336],{},[274,331,332],{},"Vercel Hobby, no Cloudflare in front",[274,334,335],{},"None yet. Hobby has no log drains; put Cloudflare in front, any plan, and use the Worker",[274,337,338],{},"—",[223,340,341],{},"When two rows fit, take the higher one. Platform drains and Logpush need no code and\ncannot drift out of date, and Logpush also records the requests Cloudflare itself\nrefused, which the Worker never sees.",[343,344,346],"callout",{"type":345},"warning",[223,347,348,351],{},[305,349,350],{},"If your site is static, prerendered or ISR, do not use server middleware."," Middleware\nonly sees requests that reach your origin, and the pages worth measuring are exactly the\nones your CDN answers without ever calling you. On a typical marketing site that hides\nmost of your traffic. Use the Worker instead — it runs before cache lookup.",[230,353,355],{"id":354},"client-ip-is-required","Client IP is required",[223,357,358],{},"Every path must send the client IP of each request.",[223,360,361,362,366],{},"A user-agent string is a claim — spoofing ",[363,364,365],"code",{},"GPTBot"," takes seconds. Shruwd verifies each\nhit against the crawler vendor's published IP ranges, and only verified hits count toward\nanything. A log source with no client IP is refused at setup rather than accepted and\nquietly ignored:",[368,369,374],"pre",{"className":370,"code":372,"language":373},[371],"language-text","HTTP 422\nNo line carried a client IP.\n","text",[363,375,372],{"__ignoreMap":376},"",[223,378,379],{},"That refusal is deliberate. Accepting the data would mean you did the setup and got a\ndashboard of numbers that cannot be used.",[230,381,383],{"id":382},"what-happens-after-logs-arrive","What happens after logs arrive",[223,385,386,387,390],{},"Your brand's ",[305,388,389],{},"Crawlers"," page starts showing hits per day and a per-bot breakdown, split\nthree ways:",[250,392,393,401],{},[253,394,395],{},[256,396,397,399],{},[259,398],{},[259,400],{},[269,402,403,413,423],{},[256,404,405,410],{},[274,406,407],{},[305,408,409],{},"Live retrieval",[274,411,412],{},"Verified crawling that feeds AI answers.",[256,414,415,420],{},[274,416,417],{},[305,418,419],{},"Training",[274,421,422],{},"Batch crawling for model training.",[256,424,425,430],{},[274,426,427],{},[305,428,429],{},"Unverified",[274,431,432],{},"Claimed to be a crawler and could not be verified. Shown, never counted.",[223,434,435],{},"Each plan includes a monthly line allowance — 100k on Crawl, 500k on Starter, 2M on Pro.\nPast it, lines are discarded until the month turns and the page says so rather than\nshowing you a flat chart.",[230,437,439],{"id":438},"next-steps","Next steps",[441,442,443,449],"ul",{},[444,445,446,448],"li",{},[280,447,88],{"href":89}," — which bots are recognised and how they are verified",[444,450,451,453],{},[280,452,94],{"href":95}," — if nothing shows up",{"title":376,"searchDepth":455,"depth":455,"links":456},3,[457,459,460,461,462],{"id":232,"depth":458,"text":233},2,{"id":247,"depth":458,"text":248},{"id":354,"depth":458,"text":355},{"id":382,"depth":458,"text":383},{"id":438,"depth":458,"text":439},"Four ways to send AI-crawler hits to Shruwd. Which one is right depends on whether a CDN answers for your site.","md",{},{"title":62,"description":65},{"title":62,"description":463},"PrtMwKtqCXx71UZMjOBK92DyrKaCkbRVbLS_J8ePVbc",1790003438663]