AdSense ads not showing: three checks, three different answers
By Alva · Published · 16 min read
Your ad code is on the page. AdSense says the site is fine. Nothing shows up.
Search for that problem and you get lists of guesses: wait 24 hours, clear your cache, check your ad blocker, maybe it is your theme. They are not wrong. They are just in no particular order, so you try them one at a time and learn nothing from any of them.
Google's own troubleshooting page does something better. It gives you a test that tells you which of three situations you are in, because the three look identical from the outside and have different causes:
no ad request was ever sent a code or browser problem
an ad request was refused a policy or approval problem
an ad request succeeded, no ad an ads.txt, or an unfilled ad unit
Two minutes in the browser, and you know your branch. Everything below is what to do once you do.
First, the thing most of these articles will not tell you
Google has an official tool with the same name as the problem you searched for. It is called the AdSense ads not showing troubleshooter, it lives in the AdSense help centre, and it walks you through the same questions this article does.
Go and use it. If it solves your problem, that is a better outcome than reading nine more sections.
Two honest notes about it, both from the tool itself:
"This troubleshooter only diagnoses AdSense for Content serving issues."
So it covers display ads on your pages and not much else. And it is a decision tree: it asks, you answer, it branches. Which is exactly its limit, and the reason this page exists at all.
A wizard cannot tell you why. It can only tell you which branch you are on. The rest of this article is the why for each branch, in Google's own words, plus the two things the wizard does not cover at all: whether your site has been approved yet, and whether your ad code was pasted correctly. Those two sit before the wizard's first question, and they are the answer for most people who run it and get nowhere.
Before any of that: is the site approved?
This is the boring answer and it is the most common one, so it goes first.
AdSense gives every site in your account a status, and if yours is not the last one in this list, no amount of code will make an ad appear. From Google's page on checking site status:
Requires review your site has not been checked yet
Needs attention something has to be fixed before ads can show
Getting ready checks are running
Ready your site is ready to show ads
And the one that traps people, because it means submitting early actively costs you time:
"If you request a review without completing the required account setup tasks, your site will not be reviewed and will remain in the "Getting ready" status."
Then this, for anyone tempted to fix it by starting over:
"Make sure you don't remove your site and resubmit it because this can delay the process."
How long the checks take is documented, and it is not a day:
"We're running some checks on your site. The review process usually takes a few days, but in some cases can take 2-4 weeks."
If your status is "Getting ready", stop here. You are not looking at a broken site. You are looking at a site that has not been looked at yet, and the rest of this article will waste your evening.
The four things that hold a site back
When the status is "Needs attention", Google narrows it to four headings, and they are worth reading in Google's own words because most of them are not about ads at all:
Your ad code is missing or incomplete
Your site is unreachable
Your site doesn't have enough unique content or provide a good user experience
Your site has policy violations
Two of those are worth dwelling on.
"Your site is unreachable" includes a password.
"Can AdSense access your site without a password? If your site's login protected, consider temporarily removing the login so that we can reach your site."
This is the same class of mistake as a sitemap that Google cannot fetch while you can, and I have written the long version of that story in what "sitemap could not be read" actually means. A site behind a password is a site whose reviewer, crawler and reviewer's screenshot all fail, and it fails quietly: everything looks perfect from inside. If you built the site behind basic auth, as I did, this is the first thing to check, and the fix is temporary and reversible.
And the content one, which is not a checklist.
"Building a high-quality site takes effort and time."
That sentence is doing a lot of work. It is Google saying the fourth cause is not a thing you can unblock; it is a thing you build. There is no setting that turns "not enough unique content" into "enough".
The two-minute test that tells you your branch
Chrome, any page on your site with the ad code on it.
1 Right click the page, click Inspect
2 Click the Network tab
3 Type ads? into the Filter field
4 Reload the page
5 Look at what appears in the list
Google describes the filter in exactly those terms:
"Enter ads? into the "Filter" field"
What you are looking for is a request whose address starts with ads?client. That is your browser talking to Google about an ad on this page. Everything in this test is built on whether that request exists and what came back.
No request at all
"No ad requests were sent from your page which means no ads will be returned to your page. Or there was an issue on the client side which prevented the ad request from being sent."
Two very different causes, and the page sends you to the second one directly:
"Check for client-side errors as described below."
So the first thing to do when you see nothing in the Network tab is not to touch the ad code. Open the Console tab in the same DevTools window and read the errors. The next section covers the two you are most likely to find.
A request that came back 403
"The server received the ad request but responded that an ad shouldn't be served on your site or account. "Status" 403 is usually returned due to policy enforcements or because your site hasn't been approved."
That is a complete answer, and it names the two things to check, in the order they are most likely:
"Verify that there are no policy enforcements on your site through your AdSense Policy center."
"Check your site has a status of "ready" on your Sites page."
A 403 is not a code problem. Your code did its job. The ad was offered and turned down, and the reason is in your account, not in your HTML. This is the branch that leads back to the section above.
A request that came back 200 and still no ad
This is the one that feels like a trick, because a 200 means everything went fine:
"You likely have problems with your ads.txt implementation."
ads.txt is a plain text file at the root of your site that names who is allowed to sell your ad space, and it is worth reading as its own subject, because the failure mode is confusing: a file that exists and says the wrong thing still reports as missing.
Then the anticlimax, which is also documented:
"It's possible that the ad unit is left unfilled."
An unfilled ad unit is a real outcome, not an error. Google asked, the auction ran, nobody bought that slot, and the answer to your page was "nothing". Coverage is the number that measures how often this happens, and the last section of this article covers what to do about it.
The Console tab: two errors and what they mean
Both of these look like your ads are broken. One of them means your ads are fine.
ERR_BLOCKED_BY_CLIENT
"The browser prevented adsbygoogle.js (the JavaScript used by AdSense to show ads) from being downloaded. Typically, this is due to an extension (e.g., an ad blocker) installed in the browser."
Read that again as a publisher, because it is good news dressed as an error. The script that draws your ads was blocked in the browser you are looking at it from. If you have an ad blocker installed, or an antivirus that filters scripts, or a privacy extension, you have built yourself a browser that cannot see your own ads.
That is not a reason to skip the check. It is a reason to run it twice: once in your normal browser, and once in a fresh profile with no extensions, or on a phone that is not yours. Google is telling you the test measures the browser, not the site.
And never test this by clicking your own ads. Invalid traffic is its own subject with its own consequences, and it is one of the few things on this page that can end an account rather than pause it.
An adsbygoogle.js error
"The validation checks in adsbygoogle.js returned an error."
The script checks whether the ad it matched can actually be placed where you put the container. Google gives one worked example, and it is worth printing because it is a common failure with an unhelpful-looking message:
adsbygoogle.push() error: Fluid responsive ads
must be at least 250px wide: availableWidth=0
Two things to notice. The size is a real constraint, and availableWidth=0 is not a size, it is a container that was not there when the ad was requested. In practice that comes from one of three places: a CSS rule that hides the container on the layout you are testing, a layout where the sidebar collapses to nothing, or a script that shows a hidden ad later.
That last one is called out on Google's page about what to do with unfilled ad units, and the advice is not to do it:
"We also don't recommend loading AdSense ad units as initially hidden, with the goal of making them visible upon the data-ad-status parameter change. If ad units aren't initially visible on the page, we may not execute the ad request for that ad unit."
Your page never asked. Because of a display rule you wrote for something else.
The code got pasted wrong, and there are only three ways
When the request is not being sent and the Console is clean, the code itself is the suspect, and Google's list here is short and specific. These are the cases where ads will not appear:
"Your ad code does not appear in its entirety, for example, there's a missing <script> or tag."
"Your ad code displays all on one line."
"Your ad code has extra HTML tags within it."
The fix for all three is the same, and it is not editing:
"If you notice any of these issues, you should replace the broken ad code with fresh ad code copied from the Ads page in your AdSense account."
The middle one catches people, because pasting code into a rich text editor, a page builder, a theme field or a CMS that runs it through a filter is a normal thing to do, and those tools collapse newlines on the way through. Code that has been rewritten by something other than you is the failure being described. The test Google gives is a direct comparison:
"Your ad code should appear exactly as it does in your AdSense account."
Not similar. Exactly.
And the two halves go in two different places
This trips up a lot of people because "ad code" is two different snippets with two different homes.
The AdSense code, the one that runs your site-wide settings:
"After you've generated the AdSense code, you need to paste it between the
and tags of your site."
The ad unit code, the one that decides where a particular ad sits:
"After you get and copy your ad unit code, you need to paste it between the
and tags of your page. If you paste the ad code outside the tags it will prevent your ads from appearing correctly."
Put the unit code in the head and it does nothing, or produces one of the Console errors above. If your ads are missing on some pages and present on others, this is where to look first: it usually means one template was edited and a second one was not.
When an ad was returned but the box is empty
If DevTools shows a filled request and the space on the page is still blank, this is the short answer, straight from Google's description of the data-ad-status parameter that AdSense adds to every unit after the request finishes:
"An ad was returned to the ad unit and is now showing."
That is what data-ad-status="filled" means. The two other values are the ones to know:
data-ad-status="unfilled" no ads were returned and the ad unit is empty
data-ad-status="unfill-optimized" no ads were returned and AdSense has filled it itself
For an unfilled unit, what you see is not a bug, and it is explained:
"We only collapse ad units when they are not going to cause page reflow, meaning only ad units outside of the viewport are collapsed. For all other unfilled ad units, we retain the ad unit size, and instead show a blank space."
So a gap in your layout where an ad should be is Google deliberately holding the height rather than letting your text jump. Unfilled is a demand problem, not a setup problem, and the number to watch is coverage in your reports rather than a code change.
When ads do serve, just less of them
Not showing and showing less are separate subjects, and the second one is a table of names in your Policy center that sound similar and mean different things. From Google's page explaining them:
"If your site has an issue that affects ad serving, it means that your site either violates our Program policies, is affected by a regulatory requirement, or is receiving less advertising due to an advertiser preference."
Three kinds. The first is a fault. The second two are conditions.
Disabled ad serving all advertising is blocked on your site
Restricted ad serving restrictions on the advertisers that can bid
Ad serving at risk not affected yet, but there is a deadline
Limited ad serving a cap on how many ads your account can show
Restricted ad personalization no certified CMP, so no personalized ads
Confirmed Click on accidental clicks detected, extra click added
The three worth understanding:
Disabled ad serving is the hard one, and the definition is blunt:
"All advertising is blocked on your site. Your site isn't serving ads due to a policy violation."
Restricted ad serving is the quiet one, and it is the reason a site can be "approved" and still earn almost nothing:
"There are restrictions on the advertisers that can bid on your inventory."
Fewer bidders means a lower price, and Google does not hide that:
"You will not receive advertising where there are policy issues."
Ad serving at risk is the one with a clock on it, and the clock is the part people miss:
"Ad serving isn't affected yet, but you'll need to make changes to your site to ensure ad serving continues."
And what happens if you do not:
"If you do not make changes to bring your site into compliance, ad serving will be disabled on your site."
Limited ad serving is not the same as limited ads
These two names sit next to each other in the same help centre and mean opposite-feeling things, so Google wrote a page just to separate them. One limits how many ads you can show. The other limits what data an ad can use.
Limited ad serving is an account-level cap, and it is often placed before anything is wrong:
"Ad serving on your account is being temporarily limited while we assess your traffic quality."
It is not a punishment and it usually ends by itself:
"While this ad serving limit typically impacts publishers for less than 30 days, it may take longer in some cases."
The other one, limited ads, is a privacy setting rather than a restriction on you. If you have mixed those two up and spent a week looking for a violation, you were looking in the wrong place.
If ad serving is disabled, the review has one requirement
The page for disabled ad serving starts with the reason, and it is not mysterious:
"Your site isn't serving ads because it's currently in violation of the Program policies."
Then, after you fix it, the process:
"We typically respond to review requests within a week but sometimes it can take longer."
And the precondition that catches people who removed their code while fixing things:
"Ensure that the AdSense ad code is present on your site before requesting the review. If there's no ad code, your request may be rejected."
Taking the code off your site while you clean it up is a reasonable instinct and it breaks the review. Leave it in place.
The order to check things in
1 Open the Sites page. If your site is not "Ready", nothing below matters.
If it is "Getting ready", close this page and come back in a week.
2 Open DevTools, Network tab, filter on ads?, reload. Write down which of the
three you have: no request, a 403, or a 200 with nothing returned.
3 No request: open the Console tab and read the errors before touching code.
Then compare your source against your AdSense account, character for
character, and re-copy if anything differs.
4 A 403: that is policy or approval, not code. Check the Policy center, then
the site status.
5 A 200: check ads.txt, and check whether the unit is simply unfilled.
6 Empty box with a filled request: read data-ad-status. Unfilled is demand,
not a fault, and there is nothing to fix in the code.
7 Running, but earning little: read the Policy center. Restricted ad serving
is the usual reason a working site underperforms.
8 Test in a clean browser. Your own ad blocker is not a site problem, and
testing in one browser is how people talk themselves into an emergency.
The part I would have skipped two months ago
When I first put an ad code on a site, the ads did not show and I assumed the code was wrong. It was not. The site was behind a password while I built it, every visitor including the reviewer got a login box, and the honest summary of that week is that I was debugging an ad problem that was actually a reachability problem.
That is why the first section of this article is a status, not a test. Most "ads not showing" is not a fault in your code, and the shortest path is not to guess better, it is to find out which of the three situations you are in. Google wrote the test. It takes two minutes. Almost nobody runs it.
Sources
- Google AdSense Help, AdSense ads not showing troubleshooter
- Google AdSense Help, What to do when your site is not ready to show ads
- Google AdSense Help, Check the status of your AdSense sites
- Google AdSense Help, Use Chrome DevTools to troubleshoot issues with your ads not showing
- Google AdSense Help, Common issues with ad code implementation
- Google AdSense Help, Where to place the AdSense code in your HTML
- Google AdSense Help, Where to place ad unit code in your HTML
- Google AdSense Help, Use the data-ad-status parameter to hide unfilled ad units
- Google AdSense Help, Understand policy issues, regulatory issues, advertiser preferences, and ad serving statuses
- Google AdSense Help, Ad serving limits
- Google AdSense Help, Limited ad serving vs. limited ads
- Google AdSense Help, Ad serving was disabled on your page or site