To resolve the Google AdSense “Earnings at risk: ads.txt not found” error: 1) Upload a plain text ads.txt file to your web server root directory (accessible via HTTP 200 at https://example.com/ads.txt); 2) Add your official AdSense record: google.com, pub-XXXXXXXXXXXXXXXX, DIRECT, f08c47fec0942fa0; 3) Sanitize the file to strip invisible non-breaking spaces (ASCII 160 / U+00A0); and 4) In your AdSense console, navigate to Sites > click your domain > click Check for updates. Google re-crawls and clears the warning banner within 24 to 72 hours.
100% Free ads.txt Validator & Auto-Fixer
Test your live domain, validate TAG certification hashes, remove invisible ASCII 160 characters, and export clean syntax.
Table of Contents: How to Fix ads.txt Not Found [Click to Expand]
- 1. What is ads.txt & Why Google Blocks Bids
- 2. Googlebot Crawler Lifecycle (Visual Architecture)
- 3. The 6 Root Causes of “Status: Not Found”
- 4. Official AdSense Record Format & TAG IDs
- 5. The ASCII 160 Invisible Space Pitfall
- 6. CMS Deployment (WordPress, Cloudflare, Shopify)
- 7. 6-Point Pre-Flight Diagnostic Checklist
- 8. Frequently Asked Questions
1. What is ads.txt & Why Google AdSense Blocks Bids
Authorized Digital Sellers (ads.txt) is an open-source technical standard developed by the IAB Technology Laboratory to prevent programmatic domain spoofing and counterfeit advertising impressions.
When an advertiser places a programmatic bid on your website inventory through Google Ad Manager, Display & Video 360, or third-party Demand-Side Platforms (DSPs), the buying algorithm instantly requests https://yourdomain.com/ads.txt to confirm that the ad network has verified legal authority to sell your impressions.
If Google’s automated crawler encounters a 404 error, firewall block, or syntax corruption, AdSense tags your property with the dreaded notice: “Earnings at risk: You need to fix some ads.txt file issues to avoid severe impact to your revenue.” Left unresolved for 30 to 45 days, DSPs drop bid prices to zero, effectively cutting off your monetization.
2. Googlebot Crawler Verification Lifecycle
Understanding the exact path Google’s automated crawler takes to validate your ads.txt file helps pinpoint why your dashboard may still report an error despite a file existing:
3. The 6 Root Causes of “Status: Not Found”
Across thousands of technical audits, six structural mistakes account for 98% of all AdSense ads.txt rejections:
| Error Type | Technical Cause | Diagnostic Signal | Severity |
|---|---|---|---|
| Incorrect URL Path | Placed inside a subfolder or secondary CMS directory (e.g. /blog/ads.txt) |
404 Not Found at root example.com/ads.txt |
Critical |
| Hidden ASCII 160 Space | Copy-pasting from email/PDF injects non-breaking spaces (U+00A0) |
Looks normal to human eyes; rejected by crawler regex | Critical |
| WAF / Bot Challenge Block | Cloudflare or server security challenging Google-Adwords-DisplayAds |
HTTP 403 Forbidden in web server access logs | High |
| Trailing Slash Redirect | Server redirects /ads.txt to /ads.txt/ causing infinite loop |
301/308 redirect loop or text treated as directory | High |
| Publisher ID Mismatch | Typo in 16-digit ID or omitting the mandatory pub- prefix |
AdSense reports file found but record missing | Critical |
| Wrong MIME-Type Header | Server sends Content-Type: text/html instead of text/plain |
Crawler parser skips non-plain text payloads | Medium |
4. Official AdSense Record Format & TAG Certification
Under the IAB Tech Lab v1.1 specification, every Google AdSense record must strictly comprise four comma-separated fields:
google.com, pub-XXXXXXXXXXXXXXXX, DIRECT, f08c47fec0942fa0
google.com)
The canonical domain of the ad exchange system. Must be lowercase google.com.
pub-16Digits)
Your unique 16-digit publisher account identifier located in AdSense under Account > Settings > Account info.
DIRECT)
Must always be uppercase DIRECT for personal AdSense accounts. Third-party syndication uses RESELLER.
f08c47fec0942fa0)
Google’s official Trustworthy Accountability Group ID. All 16 hex characters are strictly lowercase and case-sensitive.
5. The ASCII 160 Invisible Space Pitfall
The most vexing issue webmasters encounter is the Non-Breaking Space (ASCII 160 / Unicode U+00A0). When copying syntax from email clients, web forms, or word processors, standard whitespace (ASCII 32) is often converted to non-breaking spaces.
To human eyes in text editors, both spaces appear 100% identical. However, Google’s automated crawler relies on strict regex parsing. When it encounters an ASCII 160 byte, field separation fails, causing Googlebot to discard the line and flag your status as Not Found.
You can instantly sanitize your file by pasting your records into our client-side ads.txt Validator & Auto-Fixer, which strips non-standard Unicode bytes, enforces uppercase DIRECT values, and outputs compliant UTF-8 plain text.
6. CMS Deployment (WordPress, Cloudflare, Shopify)
WordPress Implementation
- Method 1 (File Manager / FTP): Upload a file named
ads.txtinto your site root (e.g./public_html/ads.txt). Set permissions to644. - Method 2 (Rank Math SEO): Navigate to Rank Math > General Settings > Edit ads.txt. Paste your string and click Save Changes without installing extra plugins.
Cloudflare WAF Configuration
If using Cloudflare, go to Security > WAF > Custom Rules and ensure automated bots are not being challenged on the path /ads.txt. Allow the user-agent Google-Adwords-DisplayAds-Web-Crawler through without JS Captchas or managed challenges.
Shopify Configuration
In Shopify Admin, go to Settings > Files, upload ads.txt, and copy the CDN URL. Then go to Online Store > Navigation > View URL Redirects and add a 301 redirect from /ads.txt to your CDN file URL.
7. 6-Point Pre-Flight Diagnostic Checklist
-
✓
Root Resolution:
https://yourdomain.com/ads.txtopens directly and returns HTTP Status 200. -
✓
Canonical Parity: Both
wwwandnon-wwwvariants resolve cleanly to the same file without redirect loops. -
✓
Exact Publisher ID: Contains the 16-digit ID matching your AdSense console, prefixed with
pub-. -
✓
Uppercase Relationship: The 3rd field is uppercase
DIRECT. -
✓
TAG Authority ID: The 4th field matches Google’s hash:
f08c47fec0942fa0. - ✓ Priority Re-Crawl Queued: Navigated to AdSense > Sites > Check for updates to trigger priority robot indexing.
8. Frequently Asked Questions (FAQ)
How long does it take for the AdSense “Earnings at risk” banner to disappear?
Google’s automated crawler passes through sites on batch cycles every 24 to 72 hours. Once your file returns HTTP 200 at the root domain, clicking “Check for updates” in your AdSense Sites tab queues priority indexing. The red alert banner typically disappears within 24 to 48 hours after successful verification.
What happens if I don’t fix the ads.txt not found error?
If left unresolved, Google AdSense and programmatic demand partners progressively drop bids on your inventory. Within 30 to 45 days, ad delivery halts entirely, leading to a 100% loss in advertising revenue until a valid ads.txt file is verified.
Can I include comments or headers in my ads.txt file?
Yes. Under the IAB standard, any line starting with a hash symbol (#) is treated as a comment and ignored by crawlers. This allows you to label ad networks, for example: # Primary Google AdSense Account followed by the record on the next line.
Do subdomains require their own separate ads.txt files?
By default, crawlers check the root domain (example.com/ads.txt) to validate impressions across all subdomains (such as blog.example.com). You only need a distinct ads.txt on a subdomain if you intend to authorize unique, separate ad exchanges that do not apply to the main website.
Why is my ads.txt returning 404 even though the file is in public_html?
Common reasons include server edge caching (e.g. LiteSpeed, Nginx, or Varnish cache serving an older 404 response), security plugins blocking .txt file execution, or WordPress .htaccess rewrite rules intercepting requests. Purging your web cache and testing in private browsing will confirm if the file is live.
Explore More Webmaster Utilities
Validate your advertising setups and calculate digital yields with our suite of free tools:
