Skip to content

Docs: make crawler-path verification legible, and explain pass-throughs - #5

Merged
henry-mosh merged 1 commit into
mainfrom
feat/plugin-llms-txt-404-6fb627
Aug 4, 2026
Merged

Docs: make crawler-path verification legible, and explain pass-throughs#5
henry-mosh merged 1 commit into
mainfrom
feat/plugin-llms-txt-404-6fb627

Conversation

@henry-mosh

Copy link
Copy Markdown
Collaborator

Why

A fresh install ran the README's verification snippet verbatim:

curl -si -A GPTBot https://aeotools.tech/optimized-page/
HTTP/1.1 404 Not Found

/optimized-page/ was a placeholder, but it reads like a route the plugin creates, so substituting only the domain gives a plain WordPress 404 and looks like a broken install. Nothing was wrong with the plugin.

The follow-up was worse: the same site's homepage returned no x-citecue header either, and the docs offered no way to read that. A missing header is the normal pass-through — the plugin only answers URLs CiteCue holds an optimized version of, and connecting does not generate any.

What changed

Docs only. No code touched.

README.md — Verifying

  • /optimized-page//a-page-you-optimized/, with an explicit note that no such route exists
  • Checks pipe through grep -i x-citecue
  • Table of the four outcomes: llms-txt, served, served + stale, and no header at all
  • New When nothing is served subsection: pass-through causes in likelihood order, and how to read Recent AI crawler activity
  • Notes the proxy ignores logged-in users, so a wp-admin tab always shows the normal site

readme.txt — the hand-check command plus a new FAQ entry, "My llms.txt works, but pages are not being served. Why?"

Two things a reviewer should confirm

Both are claims about existing behavior that the docs now assert, and both were wrong in my first draft:

  1. An empty activity table proves nothing. decide() records only on the paths that reach the API — served, passthrough, error. An open circuit, a negative-cached miss, serve_enabled off, or an unrecognized UA all return pass() without recording (class-citecue-proxy.php:106-127). The docs previously implied no row meant WordPress never ran, which would send someone chasing a CDN that isn't there.

  2. x-citecue: llms-txt does not prove the API is reachable. llms.txt serves from a 5-minute local cache, and keeps serving from it while the circuit is open (class-citecue-llms-txt.php:80). So a healthy-looking llms.txt is compatible with a rejected key. The README now documents flush-then-retest as the way to separate those.

If either reading is off, the wording should change with it.

Testing

None — no executable change. composer test unaffected.

🤖 Generated with Claude Code

The verification snippet told people to curl
`https://your-site.com/optimized-page/`, which reads like a route the
plugin creates. It is not — there is no such path, so substituting only
the domain produces a plain WordPress 404 and looks like a broken
install. The plugin only answers URLs CiteCue holds an optimized
version of, and connecting does not generate any.

Replace the placeholder with `/a-page-you-optimized/`, pipe the checks
through `grep -i x-citecue`, and add a table of the four outcomes so a
missing header is legible as a pass-through rather than a failure.

Document the pass-through causes in likelihood order, including two
that are easy to mistake for a broken install: the 60 s negative cache
on misses (an immediate retry makes no API call at all), and the fact
that the proxy ignores logged-in users, so a wp-admin browser tab
always shows the normal site.

Note that `Recent AI crawler activity` records nothing when the plugin
declines before calling the API — an open circuit, a negative-cached
miss, serving switched off or an unrecognized UA all leave no row, so
an empty table is not evidence of a cache or CDN in front. Since
llms.txt keeps answering from its 5-minute local cache while the
circuit is open, `x-citecue: llms-txt` does not prove the connection is
live either; document flush-then-retest as the way to tell those apart.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@henry-mosh
henry-mosh merged commit 7eb0328 into main Aug 4, 2026
7 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