The toolkit Β· 9 scripts
Tools
Stdlib-only Python, no pip install. Each has an offline --demo self-check and a docstring with usage. The lesson teaches the why; the tool is the how.
All live in tools/ in the repo. Each splits a network/UI edge from
an offline, testable core β so the logic is verifiable without hitting the wire.
crawl_audit.py from Lesson 0002 β Is a URL crawlable AND indexable? Checks robots.txt, status, noindex, title, canonical β the two gates before ranking.
$ python3 tools/crawl_audit.py https://example.com/page schema_tool.py from Lesson 0003 β JSON-LD structured-data linter. Validates required vs recommended schema.org properties, and lints the JSON-LD on a live page.
$ python3 tools/schema_tool.py --demo geo_lint.py from Lesson 0004 β GEO / writing-for-retrieval linter. Flags buried answers and non-self-contained chunks; rewards answer-first prose.
$ python3 tools/geo_lint.py --demo citation_share.py from Lesson 0005 β Measures AI-citation coverage and share of voice from a set of answer-engine responses β the proxy every AEO tracker builds.
$ python3 tools/citation_share.py --demo build_prompts.py from Lesson 0005 β Assembles a buyer-question prompt library (from an LLM fan-out or Search Console rows) in the shape citation_share.py consumes.
$ python3 tools/build_prompts.py --demo render_gap.py from Lesson 0006 β Diffs raw HTML vs the rendered DOM and flags content/links/JSON-LD that exist only after JavaScript β what no-JS bots miss.
$ python3 tools/render_gap.py --demo sitemap_ping.py from Lesson 0007 β Generates + validates a spec-compliant sitemap.xml, and builds a verified IndexNow push payload. The publish-and-notify step.
$ python3 tools/sitemap_ping.py --demo eeat_audit.py from Lesson 0008 β Audits a page for the machine-detectable E-E-A-T proxy signals (author, sameAs, dates, publisher, sourcing). Not a score β a gap-finder.
$ python3 tools/eeat_audit.py --demo site_audit.py from Lesson 0009 β The capstone: crawls a whole site BFS from a seed and runs every gate from 0002β0008 on each page, then rolls findings into one prioritized report (a check failing site-wide = a template bug).
$ python3 tools/site_audit.py --demo