Skip to main content
Back to Blog
Dev

Applying for Google AdSense: Two Rejections and an Ongoing Challenge

December 11, 2025·7 min read

Honestly, revenue is a big reason I keep working on this project. The sense of accomplishment is there too, but when you're carving out personal time to build something consistently, the prospect of earning money from it becomes the strongest motivator. Paid subscriptions or in-app purchases didn't seem like the right fit for a psychology test and mini-game service, and I concluded that advertising was the only realistic monetization option. So I decided to apply for Google AdSense.

Submitting the Application

Since this was a financial application, I had to fill in personal information, bank account details, and so on. Some fields were confusing, so I went through them one by one with Gemini's help — taking screenshots and asking "Should I fill this in like this?" It was the same approach I used when first deploying to Cloudflare.

The First Rejection

A rejection email arrived not long after I applied. There were two reasons listed: "screens with no content or low-value content," and "screens showing under-construction notices, redirects, or other action-focused pages." Just reading the email, I couldn't tell which pages were the problem or what exactly needed to be fixed.

As it turned out, the biggest issue was the SPA structure built with React + Vite. When the AdSense bot crawled the site, JavaScript wasn't executing, so it only saw empty HTML. The content wasn't missing — it just wasn't visible to the bot.

Fixing Things One by One

I showed the rejection reasons to Gemini and asked what needed to be fixed. Then I worked through the issues it pointed out one by one.

  • Adding prerendering: With a React SPA, pre-generating each page as HTML at build time lets bots read the content. Since content was already registered in `src/data/`, attaching prerendering wasn't difficult in itself.
  • Generating a sitemap: Set up automatic generation of `sitemap.xml` so search engines can discover all pages.
  • Adding a Privacy Policy & Terms of Service: These were required under AdSense policy. Gemini drafted them, and I adjusted them to fit the service.
  • Buying a domain: Instead of the `.pages.dev` development URL provided by Cloudflare Pages, I purchased and connected `qfitlab.com`. A custom domain is practically required for AdSense.

After finishing these improvements, I reapplied. This time I thought it might go through.

The Second Rejection

Rejected again. This time I looked more closely into why. Google AdSense fundamentally favors text-heavy content like blogs and articles. The idea is that sites with readable text content that search traffic lands on are more suitable for advertising. Q-Fit is a service centered around images, games, and questionnaires — it's structurally short on text content.

I need to add more text, but that means more reading for users. If someone comes to take a psychology test and sees a wall of text first, they might lose interest. I still haven't resolved this dilemma.

Still Working on It

The direction I'm thinking now is to avoid forcing text into the main service and instead create separate text-centered content alongside it — something like an about page or a blog. If I provide readable articles about the games and tests, they can satisfy the text requirements without touching the experience of the main service.

I've been rejected twice and haven't resolved it yet. But I figure it'll work out eventually one way or another, so I'm not particularly discouraged. I have a direction I want to go, and I'm moving toward it bit by bit — that's where things stand right now.

More Posts