Adsense publishers gets frustrated when their valuable ad space goes unoccupied. I know that hard feeling. I have been a google advertising partner for a long time & I know the cause of blank ads and how exactly to fix it, I have listed them all down below, It may help somebody.
Thin Content or Invaluable Content.
With Adsense content is the King, If you need good revenue, you just have to make quality content everyday and post it. Search engines will drive traffic to quality content, Adsense will deliver High CPC Ads on your site, Your earnings would spike. But invaluable content does not attract advertisers, Adsense algorithms does not know which ads to deliver in your site, when content is thin Media-Partners crawler will struggle to get a keyword to show relevant ads, Remember Adsense is a contextual based Ad network. Add more valuable content in every pages at-least with 500 words this will solve thin content issue.
Your Content has not been crawled by Adsense Crawler
Adsense Bot is different from Google bot, They do share a cache but their purpose are complexly different. Google bot crawls to rank your page, Adsense bot crawl to determine the best ads to show in relevant to the crawled page. This is why most static pages has good RPM when compared to dynamic pages. When you have freshly published a content or if you have very low traffic, Adsense crawler will take more time to discover your content. Simply open the newly published content in a new browser wait few hours & check back ads will be live.
You have limited Ads with Ad-Balancer
Ad Balance is a feature to generate same amount of money by showing High CPC ads, Ad balancer has received mixed reviews by experts. If you have configured Ad balance setting the value to 100% ads will solve blank ads problem. Can you predict would a user click on an ad or not? No, so how could an algorithm predict. My advice is to turn it off.
You are still using Synchronous Ad Code
Previously i have recommended synchronous ad codes for better earnings, After several years i have noticed that Synchronous ads are causing blank ads. When i replaced Synchronous ad units with Asynchronous ad codes, Ads started to show immediately. Switch all your Synchronous ad codes to Asynchronous.