日本語

When Vercel or Next.js updates break AdSense: causes, fixes, and a quick checklist

alt

Introduction

Has this happened on your Vercel site? “AdSense stopped showing,” or “impressions and revenue suddenly tanked.”
If nothing changed in your code, a recent Vercel or Next.js update may be the culprit.

This article maps the spots where AdSense is most vulnerable to platform updates, explains why issues occur, and gives practical checks you can run immediately.


Why Vercel/Next.js updates can trip AdSense

Platform releases often tweak more than the dashboard. Updates can alter:

  • Next.js behavior (App Router rendering and Script handling)
  • Build and delivery paths
  • Caching and re-execution timing
  • Edge/Serverless Functions runtime details

Because AdSense depends on external scripts and predictable execution order, these shifts can quietly break ad rendering.


Script timing changes: the classic breakage

Common symptoms after moving to the App Router

Layouts and pages get re-evaluated more often. As a result you may see:

  • Ad scripts running multiple times
  • Repeated adsbygoogle.push() calls
  • No visible errors, but no ads rendered

Often it’s not your code—it’s the updated framework execution model.

Quick checks

  • Are you injecting the AdSense script in both layout.tsx and page.tsx?
  • Are you initializing AdSense inside client components that rerender frequently?
  • Are you using next/script with strategy="afterInteractive" and ensuring it runs once?

Pitfalls in ads.txt delivery

AdSense requires ads.txt to be reachable at the root of the domain.

In Vercel + Next.js it’s easy to slip up:

  • You placed public/ads.txt, but production serves 404
  • The built path differs from what you expect
  • It works locally but fails after deployment

Points to check

  • Open https://your-domain/ads.txt in production.
  • Confirm the same URL serves the file after every deployment.

If AdSense can’t fetch ads.txt for long, serving may be limited and revenue drops.


Domain recognition mismatches

On Vercel you often juggle:

  • Your custom domain
  • The default .vercel.app subdomain

If both stay live, these can disagree:

  • Canonicals
  • Search Console verification
  • AdSense site recognition

Mismatches can make ad serving unstable.

Practical measures

  • Run production exclusively on your custom domain.
  • Block indexing of .vercel.app.
  • Ensure the URL registered in AdSense matches your live production URL.

Plan choice and monetization

AdSense technically runs on the Hobby plan. But Hobby is positioned for non-commercial use, so monetization can be a gray area.

Realistic criteria

  • Small-scale trials: Hobby is usually fine.
  • Ongoing revenue sites: consider a paid plan to minimize risk and get steadier infrastructure.

If stability matters, reduce any environment-related risks to ad serving.


Quick checklist

If AdSense acts up after a Vercel/Next.js update, run this list in order:

  • ads.txt reachable at https://your-domain/ads.txt
  • AdSense script injected once and initialized once
  • No duplicate executions introduced by the App Router change
  • Production traffic forced to your custom domain (not .vercel.app)
  • AdSense and Search Console use the exact same canonical URL

Summary

Vercel or Next.js updates rarely throw loud errors—they quietly show up as fewer impressions and lower revenue.

Look beyond code: review delivery structure, execution timing, and domain design. A calm, systematic check makes AdSense recovery reproducible.

In fast-moving Vercel and Next.js environments, “it worked yesterday” isn’t a guarantee. Periodic health checks on your ad setup are the simplest insurance for stable long-term monetization.

Related posts