Fixing Zero Google Traffic & AdSense 'ads.txt Not Found' on Next.js 15 + Cloudflare Pages
Why did Google AdSense fail to read a 200 OK ads.txt file? How querying Cloudflare GraphQL firewall logs exposed Bot Fight Mode blocking Google crawlers, plus 5 technical SEO fixes for Next.js static blogs.
Related Articles

From Vercel to Cloudflare Pages: Migrating a Next.js 15 Blog to Static Edge Hosting
Stripping away the hidden complexity of serverless functions to bake Next.js 15 into pure static HTML on Cloudflare's global edge network.

The Code Succeeded, the Project Failed: A Retrospective on Automating My Wife's E-Commerce Shipping with FastMCP
How a hobbyist maker built a zero-click shipping label pipeline using a home NAS, FastMCP, driverless IPP printing, and 0.1mm ReportLab coordinates—only to be defeated by legacy Windows agents and unit economics.

Reverse Engineering RS485 Wallpad to Bento UI: How AI Powered My Home Assistant Overhaul
From sniffing raw RS485 serial frames to permanently curing the cold-reboot USB port mismatch bug and crafting a modern Bento Grid dashboard with AI pair programming.
© 2026 HEISENBUG. All rights reserved. Unauthorized reproduction or redistribution is strictly prohibited.
This article reflects personal experiences and opinions as of the date of publication.
Table of Contents
- "It Returns 200 OK in My Browser—Why Can't Google AdSense Find ads.txt?"
- 1. Executive Summary: The 5 Root Causes & Engineering Fixes
- 2. Diagnosis #1: Separating Bot Noise from Real Traffic via Cloudflare GraphQL
- 🔍 Root Cause: Split www vs. non-www Canonical Mismatch
- Previous output of https://dbgmy.life/robots.txt
- 3. Diagnosis #2: Catching Cloudflare WAF Challenging the Google AdSense Crawler
- 4. Two Infamous Cloudflare WAF Traps to Avoid
- Trap #1: "Can I Leave Free Bot Fight Mode ON If I Create a WAF Skip Rule?" (❌ No!)
- Trap #2: Fixing skip action parameters 'phase' and 'ruleset' cannot be used together
- 5. Three Code-Level Next.js 15 Fixes for SEO & Clean AdSense Integration
- ① Defeating the 'Thin Content' Trap (noindex, follow on Tag Pages)
- ② Server-Rendering JSON-LD Structured Data into Static HTML
- ③ Replacing Intrusive Auto Ads with a Clean Bottom-of-Post AdSenseUnit
- Conclusion: Debug SEO with Logs, Not Guesswork
Comments