Push index-eligible Doozer URLs to Bing/Yandex the moment they cross the quality gate, so fresh and changed pages get crawled in hours instead of weeks. Bing-first hedge against the Google scaled-content classifier that cliffed elks.
IndexNow is a free "push" protocol: you notify participating search engines (Bing, Yandex, Seznam, Naver) that a URL is new or changed, and they crawl on demand instead of waiting for a sitemap re-fetch. Google does not consume IndexNow, so this is a Bing-first play, and a deliberate hedge: elks.club cliffed on Google's scaled-content classifier (SEO cliff & recovery), so diversifying the traffic base onto Bing matters.
Shipped v2.2.359. includes/indexnow.php.
IndexNow verifies you own a URL by fetching a key file (https://<host>/<key>.txt) on the same host as each submitted URL. Doozer already serves robots.txt dynamically on every domain, so we do the same for the key file: index.php matches /<32-hex>.txt and echoes the one shared key. That means a single key (platform_settings.indexnow.key, generated on first use) verifies the entire network, with no per-domain key management. The route is on the sessionless path list so it never takes a session lock.
Because each Doozer business site is its own host (e.g. lodge.elks.club), submissions are one host per request. Directory/root hosts with many URLs batch into a single request (IndexNow allows one host, many URLs).
Submit only index-eligible URLs — the exact sitemap rule: domains.status='active' AND include_in_sitemap=1 AND businesses.ai_generated_content IS NOT NULL. Never push skeletons, noindex, or thin pages. Pushing slop to a search engine re-teaches it that we emit slop, which is the precise mistake that hurt elks. This reuses the existing quality signal rather than inventing a new one — enrich-then-index, same as the observed-world flywheel.
indexnow_submit job)saveGeneratedContent() (ai-content.php) enqueues after anywrite that leaves a business index-eligible. Covers fresh builds crossing the gate AND every regen (so a de-boilerplate fleet run doubles as a Bing recrawl signal, for free).
flipped INTO the sitemap. Removal is a no-op (IndexNow has no de-index).
Daily cap (indexnow.daily_cap, default 2000), short-window dedup (don't re-hammer a URL pushed OK in the last hour), a self-creating indexnow_submissions audit table, and loud logging on any 4xx/5xx (the elks credit-outage lesson: never swallow a provider error). Zero API cost.
dz indexnow — status (key, enabled, cap, sent today, recent rows). dz indexnow test=<url> — force one submit (bypasses the switch) to prove the pipe. dz indexnow enable=1|0 — master switch. dz indexnow rotate=1 — regenerate the key (invalidates the old key file). dz indexnow run=backfill root=<r> — queue every currently-eligible URL for a root, chunked (e.g. backfill elks.club to push the ~1,700 de-boilerplated pages at once).
Verify with Bing Webmaster Tools → IndexNow, which shows submissions landing.