oh really! well I guess this might help if they are redirectd to the md files? the HTML traffic isn't written?
Claude says 🙂
Realistic volume:
- Humans never hit .md URLs (they get HTML on /about/, which doesn't write anything). Only AI crawlers + audit tools hit the Markdown surfaces.
- AI crawler hit rates are roughly the same order as traditional search bots (Googlebot, Bingbot) — hundreds-to-low-thousands/day for a content site, not orders of magnitude more.
- 304 cache revalidations skip writing entirely. Cloudflare-fronted sites have most of their AI traffic filtered before it reaches the writer.
Defences in the package:
- Bounded channel with DropOldest — default 1024 capacity, configurable to 65536. Under pressure, oldest entries drop; never blocks the request thread or blows memory.
- Batched writes via NPoco InsertBulk: 50 rows per batch OR every 1s, whichever fires first → roughly 1 INSERT/s per node under sustained load, not 1 per request.
- 90-day retention purge by default; configurable.
- Each row is small (~150-300 bytes — path + content key + culture + UA class + referrer host).
For high-traffic adopters, three escape hatches:
- Tune the knobs: AiVisibility:RequestLog:{QueueCapacity, BatchSize, MaxBatchIntervalSeconds} + LogRetention:DurationDays
- Kill the writer entirely: AiVisibility:RequestLog:Enabled = false
- Replace IRequestLog (public DI extension point) — point at App Insights with built-in sampling, wrap with a sampling decorator (e.g. log 1 in 10), or redirect to your own store
For codeshare-scale: defaults handle it without thinking. For a major news org pushing 500k AI hits/day: tune knobs or swap IRequestLog. No adopter is forced into the default shape.