crawler-access-audit
Skill5 starsChanged 11 days agoApache-2.0View on GitHub
Audit web crawler access from server logs and robots.txt. Covers robots.txt matching and precedence (RFC 9309), user-agent groups, wildcards and end anchors, crawl-delay, meta robots and X-Robots-Tag, verifying crawler identity, real client IP behind proxies, and AI crawler user-agents. Use for log analysis of bots, compliance checks and crawl-efficiency reports.
In this repository168 other files it gives its agents.
- abel-sell-the-alphaSkill
- agent-governance-gap-analysisSkill
- agent-infra-fixerSkill
- agent-receiptSkill
- agent-skills-gapSkill
- ai-dnaSkill
- ai-festival-posterSkill
- ai-teamSkill
- albro-founder-brandSkill
- anatomySkill
- andy-raskin-strategic-narrativeSkill
- ar-aging-and-cash-applicationSkill
- asshauer-performance-contentSkill
- autonomous-researchSkill
- awwwards-sitesSkill
- better-typographySkill
- bourgoin-why-we-buySkill
- brain-scanSkill
- brath-b2b-demand-frameworkSkill
- braun-poke-the-bearSkill
- broll-pickerSkill
- claritySkill
- client-commsSkill
- cli-ux-reviewSkill
- clone-my-voiceSkill
- clone-yourselfSkill
- costa-negotiation-dynamicsSkill
- cv-job-matchSkill
- data-globeSkill
- decision-ledgerSkill
- denney-persona-angle-formatSkill
- dicks-homework-five-secondSkill
- domain-uptime-monitorSkill
- dreyer-funnel-diagnosisSkill
- dry-three-copy-testsSkill
- dunford-obviously-awesomeSkill
- edge-find-skillsSkill
- fede-cloneSkill
- fede-voiceSkill
- fehr-clarity-taste-strategySkill
- fitzpatrick-mom-testSkill
- flores-founder-content-machineSkill
- founders-handbookSkill
- foxwell-meta-creativeSkill
- frankus-geo-auditsSkill
- gahan-b2b-creator-blueprintSkill
- galloway-youtube-outlier-packagingSkill
- generate-imageSkill
- geo-dominationSkill
- gerhardt-founder-brandSkill
- german-taxes-elsterSkill
- goetz-challenger-marketingSkill
- greger-creator-squadSkill
- handley-everybody-writesSkill
- harness-firstSkill
- hire-founding-engineerSkill
- hott-ugly-adsSkill
- http-error-triageSkill
- hubspot-crm-cleanupSkill
- humanizerSkill
- The first 60 shown.
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 4 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 22
Do not conflate "disallowed to crawl" with "noindex".
- Distinctive: line 27
Search crawlers, training crawlers and user-initiated agents are different categories.
- Distinctive: line 31
Use CIDR containment with a real IP library (ipaddress), never string prefixes.
- Distinctive: line 47
Verify the group selection for each crawler token, including one with no own group.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Crawler access audit
Goal: decide, for each crawler request in a log, who really made it, which rules applied at that time, and whether it was allowed.
1. robots.txt semantics (RFC 9309)
- File is a list of groups. A group starts with one or more
User-agentlines followed by rules (Allow,Disallow,Crawl-delay,Sitemap). Blank lines and comments do not end a group; a newUser-agentline after rules starts a new group. - A crawler uses exactly ONE group: the one whose
User-agenttoken best matches its product token (case-insensitive, longest match wins). If none matches, use the*group. Groups are NOT merged across different tokens, and*rules do not apply to a crawler that has its own group. If multiple groups name the same agent, merge those groups. - Match the product token only (e.g. the name before
/version), not the whole user-agent string. - Path matching is on the URL path plus query string, starting at
/, case-sensitive, prefix-based.*matches any sequence of characters,$anchors the end of the URL. Rules are matched against the percent-decoded form of unreserved characters; compare after normalising percent-encoding consistently on both sides (encoded slashes stay encoded). - Precedence: among all matching Allow and Disallow rules in the chosen group, the MOST SPECIFIC rule wins, measured by longest pattern length (octets). On a tie, Allow wins. An empty
Disallow:allows everything. No matching rule means allowed. /robots.txtitself is always fetchable. Missing file (404) means everything allowed; server errors (5xx) mean assume disallow; unreachable for long means treat as allowed after caching limits.- Crawl-delay is not part of RFC 9309; some crawlers honour it, some ignore it. Report violations only if the task asks, comparing the gap between consecutive requests from the same crawler to the delay.
- robots.txt is time-versioned: judge each request against the version in effect at the request timestamp (a change applies from its effective time, not retroactively). Crawlers also cache robots.txt for up to 24 hours, so be explicit if the spec asks for grace periods.
2. Page-level directives
<meta name="robots" content="noindex, nofollow">andX-Robots-Tagresponse headers control indexing and snippets, not crawling. A URL blocked in robots.txt cannot have its noindex seen. Header directives can target a specific bot (X-Robots-Tag: botname: noindex). They apply to non-HTML files too. When directives conflict the most restrictive applies.- Do not conflate "disallowed to crawl" with "noindex".
3. Identify the crawler correctly
- The user-agent string is self-declared and trivially forged. A claim is only credible if the source IP falls inside the operator's published ranges (or reverse DNS then forward DNS confirms). Requests that claim a crawler name from outside its ranges are impersonated: count them separately, never as that crawler.
- Known AI-related agents (training, search, user-triggered fetch are distinct products from the same company, with separate tokens and often separate rules): GPTBot, OAI-SearchBot, ChatGPT-User (OpenAI); ClaudeBot, Claude-SearchBot, Claude-User (Anthropic); PerplexityBot, Perplexity-User; Google-Extended (a robots.txt-only control token, no separate fetcher); Googlebot; Bingbot; Applebot and Applebot-Extended; CCBot; Bytespider; Amazonbot; Meta-ExternalAgent. Match by exact product token, not by substring of a vendor name.
- Search crawlers, training crawlers and user-initiated agents are different categories; keep them separate in reports when asked by purpose.
4. Real client IP behind proxies
- Behind CDNs or load balancers the log's peer address is the proxy. Use
X-Forwarded-Foronly when the immediate peer is a trusted proxy. Walk the list from the RIGHT, skipping addresses that belong to trusted proxy ranges; the first non-trusted address is the client. Entries to the left of it are client-supplied and forgeable. - Use CIDR containment with a real IP library (ipaddress), never string prefixes. Handle IPv6 and IPv4-mapped forms.
5. Log parsing hygiene
- Logs rotate: read all files in order, including compressed ones; do not double count overlaps; deduplicate only if the spec says so.
- Parse timestamps with their timezone offsets and compare in UTC. Handle quoted fields with embedded quotes,
-placeholders, and malformed lines (count them; do not crash). - Percent-decode paths for matching but keep the raw form for output if the spec asks for it. Strip fragments; keep query strings for matching.
- Count requests, not bytes, unless told. Methods other than GET/HEAD still count as crawler requests unless told otherwise.
- Status code filters are the spec's: robots.txt checks apply regardless of whether the response was 200 or 404.
6. Typical outputs
- Per-crawler: total requests, allowed, disallowed (violations), impersonated requests, share of crawl spent on non-canonical or disallowed URLs.
- Non-productive crawl: requests to disallowed paths, URLs missing from the sitemap, parameter/duplicate URLs, redirects and errors.
- Present numbers as integers and in the exact key structure requested.
7. Self-checks
- Hand-evaluate three tricky rules (wildcard,
$, Allow vs Disallow tie) against sample paths. - Verify the group selection for each crawler token, including one with no own group.
- Re-run the count with a version change in the middle of the log and confirm each side uses its own version.
- Confirm impersonated and genuine counts add up to total claims per crawler.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

