Skip to content

llms.txt overhaul: full-content index, markdown mirrors, crawler policy - #55

Merged
rivassec merged 1 commit into
mainfrom
llms-index-improvements
Sep 11, 2026
Merged

rivassec merged 1 commit into
mainfrom
llms-index-improvements

Conversation

@rivassec

Copy link
Copy Markdown
Owner

What

Ten improvements to the AI-crawler index surface, plus one independent SEO fix.

llms.txt / llms-full.txt

  • llms-full.txt now carries full post content (was expanded metadata only; the 400-char summary truncate was inert since every summary is <=160 chars). 159KB, under the new 384KB soft-warn and existing 512KB hard cap. Header notes formatting is flattened and points at the Markdown mirrors.
  • Per-post Markdown mirrors: new plugins/md_mirror.py copies each published article's source to output/{slug}.md (reads generator.articles, so drafts structurally cannot leak; runs after the sitemap generator so mirrors stay out of the sitemap). Both llms files link them.
  • Topical grouping by category, per-entry (YYYY-MM) dates, provenance line (Generated: <date> | N posts).
  • Expanded Key pages (IAM Blast Radius tool, Categories, Accessibility) and new Tools and code section (secure-iam-lint, iam-safe-defaults, elasticsearch-tools, pwnagotchi plugins - all URLs verified live).
  • Meta section: author, security.txt pointer, Atom/RSS feeds, citation preference.
  • Header description single-sourced (LLMS_DESCRIPTION in pelicanconf) and refreshed to cover the AI-security, threat-intel/OSINT, and hiring-security threads.
  • .well-known/llms.txt alias (byte-identical include shim) for crawlers that probe there first.

robots.txt

Explicit allow groups for GPTBot, ClaudeBot, Claude-Web, PerplexityBot, Google-Extended - each with the same /drafts/ exclusion - and comments naming both llms URLs. Publishing an llms.txt means AI readership is wanted; this makes the policy deliberate instead of implicit.

CI guard hardening (check_wellknown_llms.py)

Now also fails on: any /drafts/ URL in either llms file, a post missing from llms-full (parity with the short index), a missing markdown mirror, or a missing .well-known alias. Soft size warning at 384KB.

Independent fix

  • testing-an-iam-analyzer-against-its-own-claims.md: Summary trimmed 212 -> 157 chars (meta descriptions truncate at ~160; check_descriptions flagged it). This changes the live meta description - review the wording.

Verification

  • Publish build clean (20 articles + 3 drafts, drafts in no index file)
  • check_wellknown_llms.py: 0 issues (including the new guards)
  • canonical/noindex: 0 bad; link graph: 0 issues; em-dash: clean
  • .well-known/llms.txt byte-identical to /llms.txt; 20 markdown mirrors written

…nown alias

- llms-full.txt now inlines each post's full text (was metadata-only;
  the 400-char truncate was inert since all summaries are <=160)
- new md_mirror plugin publishes {slug}.md next to every published
  article; both llms files link the markdown variants
- llms.txt: posts grouped by category with per-entry dates, expanded
  key pages (IAM Blast Radius tool, accessibility), tools/code section,
  meta section (author, security.txt, feeds, citation), provenance line
- header description single-sourced via LLMS_DESCRIPTION and refreshed
  to cover AI security, threat intel, and hiring-security threads
- .well-known/llms.txt alias via include shim
- robots.txt: explicit allow for GPTBot/ClaudeBot/Claude-Web/
  PerplexityBot/Google-Extended, each with /drafts/ excluded
- check_wellknown_llms: guard draft-URL leaks, llms-full parity,
  markdown mirrors, .well-known alias; soft warn at 384KB
@rivassec
rivassec force-pushed the llms-index-improvements branch from 9d6b716 to 10388e6 Compare September 11, 2026 22:44
@rivassec
rivassec merged commit 3d8d97c into main Sep 11, 2026
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant