AdSense approval is the most predictable rejection most people meet online. The application form is short, the requirements are published, and the rejection email is almost always the same generic text that names no specific problem. That combination produces an afternoon of guessing. This guide is the opposite: here is what Google checks, in what order, and what you change to satisfy each one.
The one thing to do first
The rejection email will almost certainly not tell you why. Google states plainly that the specific reason is visible only when you sign in to your AdSense account. Before you rebuild anything, open the account and read the reason there.
This matters more than it sounds. A rejection for site content and a rejection for a duplicate account look identical in the email but have completely opposite solutions. In one case you rewrite pages. In the other you close an account and resubmission works immediately. Fixing the wrong thing wastes weeks.
If your email contains no publisher ID or duplicate-account mention, the cause is almost certainly your site — and therefore fixable.
Reason 1: insufficient content
This is the most common rejection by a wide margin, and the most misdiagnosed. Google describes it as "too little text" and/or being deemed "under construction".
Concretely, the check looks like this:
- Is there enough real prose on the site as a whole?
- Do pages contain complete sentences and paragraphs, rather than headings and keywords?
- Does the site look finished, or does it look like a template awaiting content?
- Is there anything a visitor could actually read?
What "enough" means
There is no published word count, which is why people get this wrong. What matters is the ratio of substance to chrome. A site with four pages of genuine writing will often pass where a twenty-page site of marketing one-liners fails. Judge your site by "would I read this if I had arrived from Google?", not by a word counter.
The trap that costs people their second application
A blog index page listing six articles that do not exist. Each card shows a title, a date, a reading time and a paragraph — but there is no article behind the link. To a reviewer this is the single most damaging pattern on the internet: it is a content farm template, and it is exactly what "made for AdSense" looks like.
If you show a reading time, the article must exist. If you promise depth, deliver depth. Writing six real articles from drafts you already have is the fastest genuine fix available.
Reason 2: site navigation issues
Google explicitly lists redirects, broken links, pages behind a login, excessive pop-ups and pages "not yet launched" as navigation problems. Broken links are the common self-inflicted one, and they are trivially avoidable.
Check every internal link on every page. Not just the navigation — the footer, the body copy and the buttons. A footer link to /privacy when the policy lives at /privacy-policy/ is a 404 that reads as carelessness to anyone reviewing you.
The other half is redirect hygiene. Redirects themselves are fine; that is how migrations work. What hurts is chains and loops, and pages that serve 200 at both /about and /about/ so that two URLs claim the same content. Pick one canonical form per page and redirect the other to it.
Reason 3: ad code that cannot display anything
Google's guidance is blunt: "place the ad code on a live page of your site. Test pages that are empty except for the code won't be approved."
Most rejections in this category come from one mistake. Plenty of sites include the AdSense loader script and nothing else:
<script async src=".../adsbygoogle.js?client=ca-pub-XXXXXXXXXXXXXXXX"></script>
That is the library, not an ad unit. With no <ins class="adsbygoogle"> element and no slot ID anywhere, nothing can ever render — on any page, ever. You would be approved into zero revenue.
There are two valid configurations. Either use Auto ads, where the loader script genuinely is the complete integration and placement is controlled from your dashboard. Or use manual ad units, where each unit needs the publisher ID, a slot ID from AdSense, and the push call that initialises it:
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-XXXXXXXXXXXXXXXX"
data-ad-slot="YOUR_SLOT_ID"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>
Decide which one you are using and be deliberate about it. Half-configured is the worst of both worlds.
Where ads should and should not go
Put units on pages with real publisher content. Do not put them on your privacy policy, your terms, thank-you pages, login screens or error pages — pages with little or no content are exactly where AdSense policy says not to place ads, and an ad on an empty page is an easy policy flag.
Reason 4: duplicate account
AdSense allows one account per publisher. If two accounts share a payee name, address or phone number, the second is closed automatically. A rejection email for this normally includes the publisher ID or email address of the duplicate — so if yours does not mention one, this is probably not your problem.
It is worth checking anyway. Sometimes people apply twice by accident, six months apart, and only discover it when the second account closes.
Reason 5: content policy and traffic sources
Prohibited content is straightforward: no adult material, violence, drugs, gambling or misleading claims. If your business is legitimate you are almost certainly clear, and this is rarely the actual cause.
Traffic sources are the reason you cannot self-diagnose from your website. Publishers do not get ads on pages receiving traffic from paid-to-click programs, unwanted email or automated scripts. Google also looks at landing page quality. Low or suspicious traffic is a common and legitimate rejection that has nothing to do with how good your site is.
Reason 6: unsupported language
AdSense supports a fixed list of languages including English, Arabic, German, French and Spanish. If the majority of your content is in a language outside that list, no amount of site work will help. Translate the site into a supported language, or apply with a site that already is in one.
The legal pages people forget
Not a named rejection reason, but their absence causes problems. Have all three, clearly linked from every page:
- Privacy Policy — must describe what you collect, cookies and advertising partners including Google, and how to opt out of personalised ads.
- Terms of Service — what your business does, what the site is and is not for, liability limits, governing law.
- Contact page — a real route to a human, with a working form or a published address.
Our own privacy policy and terms are published openly; ours is not the policy you need, but it shows the level of detail that satisfies a review.
Technical hygiene that supports approval
- HTTPS on every page, with HSTS.
- A
robots.txtthat permits crawling and points at your sitemap. - An XML sitemap listing only canonical, indexable URLs.
- A self-referencing
rel="canonical"on every page. - No
noindexon anything you want reviewed. ads.txtat the domain root with your publisher ID.- A custom domain, not a
.pages.devsubdomain.
A sensible order of operations
- Read the actual reason in your dashboard. Do not skip this.
- Fix everything under "navigation issues" — it is fast and it is unambiguous.
- Get the ad code genuinely working, not just present.
- Publish the legal and contact pages, and link them everywhere.
- Raise real content. Write the articles your pages already promise.
- Submit the sitemap in Search Console and request indexing.
- Wait long enough for Google to actually crawl the changes — a fortnight is realistic.
- Resubmit.
Step 7 is the one people skip. Resubmitting five minutes after publishing means Google reviews the version it last crawled. Give the crawler time to see the new pages.