Why AdSense Shows Blank Ads And How to Fix It
A blank AdSense slot means one of two things: Google returned no ad for that space (called "unfilled"), or the ad request never finished because something blocked or broke it. You can tell which in about two minutes by checking one attribute on the ad's code, and the fix depends entirely on the answer.
Key Takeaway: Do not guess. Inspect the blank slot first. If it shows data-ad-status="unfilled", your code works and the problem is ad demand or page content. If the attribute never appears, the ad request is being blocked or your code is broken.
Step 1: Check Whether the Slot Is Unfilled or Broken
Open the post with the blank space in a desktop browser, right-click the empty area, and choose Inspect. Look for an <ins class="adsbygoogle"> tag. Once an ad unit finishes requesting an ad, AdSense adds a data-ad-status attribute to that tag. There are two main values: "filled" means an ad came back and is showing, and "unfilled" means no ad came back and the unit is empty. A third value, "unfill-optimized", shows up when the "Fill empty in-page ads" setting is turned on and AdSense has optimized the empty unit.
One limit worth knowing: this attribute is only added to ad units on the top window, not to units served through a cross-domain window. On a standard Blogger post that is not usually a problem, but if you see nothing, check the code before assuming the worst.
If It Says Unfilled: Why No Ad Came Back
Unfilled is the good news. Your code and account are talking to Google fine. Nobody bid for that space on that page at that moment. These are the usual reasons:
| Cause | What it looks like | What to do |
|---|---|---|
| New ad unit or new site | Blank right after you place the code | Leave the code alone and re-check later. Do not delete and recreate the unit. |
| Thin or media-only page | Blank on posts that are mostly images or video | Add real text with clear headings so Google has something to match ads to. |
| Content policy issue | Blank on one specific post, fine elsewhere | Review that page against AdSense content policies and remove the problem content. |
| Ad size does not fit the space | Blank in a narrow sidebar or tight container | Use a responsive unit and check the width and padding of the area around it. |
| ads.txt or invalid traffic problems | Ads were filling, then stopped | Check ads.txt (see below) and the AdSense Policy center for warnings. |
Some of this is well documented. A newly created ad unit can show blank space for a while until AdSense analyzes your site and finds relevant ads, and pages made up mostly of images or video are a common trouble spot. Another known cause is that Google may have no ad that fits the space you provided, so checking the padding around the block and choosing a matching ad size helps.
Is this normal on a new site? Yes, it is a common pattern, especially in the first days after you place a new unit. How long until it improves? Google does not give a set number of days, so treat any post that promises an exact timeline with suspicion. Keep publishing real content, and check your unfilled percentage instead of refreshing the page. AdSense reporting shows the percentage of unfilled units through your average coverage.
If your ads were filling fine and then went blank, that is closer to the fill-rate drop I covered in the AdSense RPM dropped guide, where the first checks are ads.txt errors and invalid traffic warnings.
If There Is No Status at All: Blocked or Broken
If the <ins> tag exists but never gets a data-ad-status after the page finishes loading, the ad request most likely did not complete. Work through these in order:
- Your own ad blocker. Ad blockers can stop AdSense from showing, so try an incognito window with extensions off. Your blank slot may look normal to everyone else.
- Broken or edited ad code. Copy the code again from your AdSense account and compare it line by line with what is on your blog. Every line of the code should match what Google provided, nothing more and nothing less.
- A script conflict. A custom theme or another gadget with conflicting JavaScript can prevent ads from loading.
Set Up ads.txt in Blogger
If you pasted AdSense code by hand instead of using the built-in gadget, you need to set up the ads.txt file yourself. A missing ads.txt is one of the common reasons ads fail to show. Here is the path:
- In Blogger, choose your blog and click Settings.
- Under Monetization, turn on Enable custom ads.txt.
- Click Custom ads.txt and paste the line from your AdSense account. It follows the pattern
google.com, pub-XXXXXXXXXXXXXXXX, DIRECT, f08c47fec0942fa0, but copy it from AdSense instead of typing your publisher ID. - Click Save, then open
yourblog.com/ads.txtto confirm the text appears.
Why Some Blank Slots Collapse and Others Do Not
This confuses a lot of bloggers. When a unit is unfilled, AdSense tries to collapse it or show a blank space. It only collapses units that will not cause the page to reflow, which means only units outside the viewport. Every other unfilled unit keeps its size and shows blank space. So the empty box in the middle of your post is intentional: Google is holding the space so the text does not jump.
You can hide unfilled units with CSS, and Google's help page even shows how. But hiding them reflows your layout, which is exactly what Google avoids by default, so test it on a phone before you keep it.
Does mobile traffic change anything? It changes what you see. Auto ads often appear as a sticky banner at the top on mobile while showing nothing on desktop, and that is typical behavior. If you only test on a desktop, you may think ads are blank when they are working on phones.
When to Go to AdSense
Only after the steps above: open the AdSense ads-not-showing troubleshooter, which checks your account for ad serving issues that can lead to zero coverage or ads not showing. Then look at the Policy center for warnings. If both are clean and the status says unfilled, the slot is working and you are waiting on demand, so the best use of your time is better content on that page.
Pro Tip: Test on a real phone in a fresh incognito tab, on a post with plenty of text. It removes your ad blocker and cached data, and shows what a first-time visitor actually sees.
Sourcing note: The status values, unfilled-slot behavior, ads.txt steps and gadget re-save steps come from Google's AdSense and Blogger help pages. Google does not publish a set timeline for blank ads to start filling, so none is given here. Other causes come from publisher troubleshooting guides and should be treated as common patterns, not guarantees.
