How I Fixed Google AdSense's "Low Value Content" Rejection
I hit a wall applying a side project to AdSense
I built a site that generates a printable WiFi QR code. It's simple: type in the SSID, password, and encryption type, get a QR code, print it, stick it on a table. A perfect little tool for café owners or Airbnb hosts.
The feature worked fine, but AdSense review kept sending back the same message.
"Low value content"
At first I thought, "the feature works, why does it need content?" Turns out AdSense doesn't see it that way. From AdSense's point of view, this site was just "a page with one form on it."
What AdSense actually means by "low value content"
Re-reading the guidelines, the core requirements were:
- There needs to be enough content for ads to sit alongside
- The content needs to provide real, substantive information to users
- The site needs to show evidence of being a trustworthy service (About, Privacy Policy, Contact, etc.)
A single-feature tool site struggles to clear this bar. One form, one QR code — the verdict is "there's a page, but nothing to read." Specifically:
| Problem | Reason |
|---|---|
| Only one page | AdSense evaluates the whole site |
| Not enough text content | Form + result QR = nothing to read |
| No trust pages | No About/Contact/Privacy means zero trust signal |
| No topical articles | No informational content = no perceived "value" |
How I responded
I set a minimum bar to clear for AdSense approval.
- Page count: home + 5+ informational articles + 3 baseline trust pages
- Article length: informational articles at least 1,000–1,500 characters
- Trust structure: About, Contact, Privacy Policy are non-negotiable
Here's the order I worked through them in.
Step 1 — A standalone FAQ page (/faq)
The homepage already had an FAQ, but it was just 15 accordion items buried under the form. No URL, effectively invisible to search engines.
I split /faq into its own page and expanded the content significantly.
20 Q&As, organized by category:
- Security & Privacy (4) — password safety, why a QR code is safer than writing out a password, etc.
- Device Compatibility (4) — iOS/Android support range, how to scan on each device
- Network Settings (5) — WPA/WEP/None differences, hidden networks, how to check your encryption type
- Using the Generator (4) — offline use, saving images, printing tips
- Guest Networks (3) — what a guest network is, rotation schedule, running multiple networks
Each answer got 3–5 solid sentences. This wasn't just "make an FAQ page" — it was gathering real questions people might actually search for onto one page.
The homepage itself was changed to show a 6-item preview with a "View all FAQs →" link.
Step 2 — Scenario-based use case pages
The homepage already had cards like "for cafés" and "for hotels," but each card was just two lines of description. I turned each into its own standalone page.
/use-cases/cafe — for cafés and restaurants
Written as a practical guide, 1,500+ characters.
- Problems with the old approach: writing the password on a chalkboard, staff repeating it verbally — the limits of both
- Advantages of a QR card: no interruption, no typos, decor value, quick to swap
- Practical operating tips: where to place the card, setting your SSID to your shop's name, separating a guest network
- Step-by-step setup guide: 8 steps from generating the code to placing it on the table
I also added a "Create Your WiFi QR Card" CTA button mid-article, linking back to the homepage.
/use-cases/airbnb — for Airbnb and short-term rentals
Focused on the WiFi-sharing problem at check-in.
- The situation where a guest can't find the password even after you text it
- How to rotate the password after every checkout (a QR card makes this a 2-minute job)
- Tip: include the QR card in the welcome guidebook
- Why you'd separate a guest network if you have smart home devices
/use-cases/home — for households and families
Written for "anyone who's exhausted from explaining the WiFi password to their parents."
- The hassle of repeating the password for every visitor
- The idea of a separate printed card for elderly family members
- Tips for setting the SSID and password (a passphrase format is recommended)
- A guide to placement in the living room or kitchen
Step 3 — A Contact page (/contact)
This one never misses an AdSense review checklist. A single line of email on the About page and a dedicated /contact page are treated very differently in review.
Kept the structure simple:
- Email address + a Send Email button
- Cards guiding users by inquiry type (bug report / feature request / general feedback)
- Response time expectations
- Nudge users to check the FAQ/guides first
No need to overdo it. The goal is just to signal "there's a real person behind this site."
Site structure after the work
/ → main QR generator
/guide → the complete WiFi QR guide (existing)
/resources → printing tips, checklists, security guide (existing)
/faq → standalone FAQ page (new) ✅
/use-cases/cafe → guide for cafés & restaurants (new) ✅
/use-cases/airbnb → guide for Airbnb & short-term rentals (new) ✅
/use-cases/home → guide for households & families (new) ✅
/about → about the service (existing)
/contact → contact page (new) ✅
/privacy → privacy policy (existing)
10 pages total. I also updated sitemap.xml to include every new URL.
Cleaning up footer links
More important than it sounds. Every page's footer needs to be able to reach every other important page. AdSense reviewers check whether the whole site is navigable from anywhere.
Before:
Guide | Resources | About | Privacy
After:
Guide | Resources | FAQ | About | Contact | Privacy Policy
I also linked each use-case card on the homepage directly to its corresponding page.
Adding pages in a React setup
This site is built with React + wouter (router). Adding a page is straightforward.
1. Create the page component
// client/src/pages/Faq.tsx
export default function Faq() {
return (
<>
<Helmet>
<title>WiFi QR Code FAQ | WiFi QR Print</title>
<meta name="description" content="..." />
<link rel="canonical" href="https://wi-fi-qr.xyz/faq" />
</Helmet>
{/* page content */}
</>
);
}
2. Register the route in App.tsx
import Faq from "@/pages/Faq";
function Router() {
return (
<Switch>
<Route path="/" component={Home} />
<Route path="/faq" component={Faq} /> {/* added */}
{/* ... */}
</Switch>
);
}
3. Update sitemap.xml
<url>
<loc>https://wi-fi-qr.xyz/faq</loc>
<lastmod>2026-06-01</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
With Next.js, one app/faq/page.tsx file would be enough. A wouter-based SPA needs the route registered explicitly like this.
Troubleshooting
Q. I added a new page but refreshing it gives a 404
An SPA does client-side routing, so the server has no idea what /faq is. If you're deploying to Vercel, you need a rewrite rule in vercel.json.
{
"rewrites": [{ "source": "/(.*)", "destination": "/index.html" }]
}
If it's already set up, you're fine. If not, this one line fixes it.
Q. I added content but AdSense keeps rejecting it anyway
Review takes time. Wait at least 1–2 weeks after adding content before reapplying. Also check Google Search Console first to confirm the new pages have actually been indexed.
Summary
The core loop for resolving an AdSense "low value content" rejection looks like this.
1. Check trust pages → Do you have About / Contact / Privacy Policy?
2. Check page count → Home + 5 or more informational articles?
3. Check article length → Is each article 1,000+ characters?
4. Check internal links → Does the footer/body link to each page?
5. Check the sitemap → Are the new URLs included in sitemap.xml?
Even a single-feature tool site can meet AdSense's bar if it's paired with enough writing that explains how to use the tool and in what situations it's needed. Adding content is more tedious than building the feature itself, but it helps SEO too, so it's worth doing alongside everything else.
backtodev
A 40-something PM returns to code. Learning, failing, and growing.