[Next.js]ads.txtの置き方

こんにちは!
今日は「Next.js 15でads.txtをGitに含めずに管理する方法」について、わかりやすく解説していきたいと思います。

広告を扱うWebサイトではおなじみの ads.txt
このファイル、サイトのトップ(例:https://file-bin.com/ads.txt )に正しく置く必要があるのですが、Next.jsを使っているとちょっとだけ工夫が必要です。

特に「環境ごとに内容を変えたい」「ads.txtの内容をGitに入れたくない」という方には、標準的な設置方法では、駄目だと思うかもしれません。

というわけで今回は、Next.js 15のプロジェクトで ads.txtをGitに含めず、安全かつ柔軟に運用する方法 を2パターンに分けて紹介します!


そもそもads.txtって何?

ads.txt(Authorized Digital Sellers)は、IAB Tech Labが定めた仕様で、
「このサイトの広告枠は、どの広告ネットワークが正規販売者か」を明示するためのファイルです。

たとえば、Google AdSenseを使っている場合はこんな感じ。

google.com, pub-1234567890123456, DIRECT, f08c47fec0942fa0

この内容を ads.txt に書いておかないと、
Googleの広告が表示されなかったり、ポリシー違反扱いされることもあるんです。
……地味だけど、すっごく大事なやつです。


Next.jsでads.txtを置く基本的なやり方

Next.jsでは、publicディレクトリにファイルを置くことで、
そのままドメイン直下にファイルを公開できます。

your-project/
└── public/
    └── ads.txt

これで https://file-bin.com/ads.txt にアクセス可能になります。
ここまではカンタンですね。

ads.txtをGitに含めたくない理由

ところがどっこい。以下のような事情があると話が変わります。

  • 本番環境と開発環境で、ads.txtの内容を変えたい
  • 機密性のあるパブリッシャーIDをGitに入れたくない
  • サービスやドメインによってads.txtを出し分けたい

つまり、環境依存の内容を静的ファイルにしてGit管理するのはちょっと不便ってわけです。

そんなときに便利なのが、環境変数からads.txtの内容を動的 or 静的に生成する方法です!


方法①:環境変数でads.txtを動的に返す(route.ts編)

こちらは **App Router(appディレクトリ構成)**を使っている場合にオススメの方法。

ステップ1:.env.production にads.txtの内容を定義

ADS_TXT="google.com, pub-1234567890123456, DIRECT, f08c47fec0942fa0"

ステップ2:app/ads.txt/route.ts を作成

// app/ads.txt/route.ts
export async function GET() {
  const content = process.env.ADS_TXT ?? '';
  return new Response(content, {
    headers: {
      'Content-Type': 'text/plain',
    },
  });
}

これで https://file-bin.com/ads.txtにアクセスすると、
環境変数の内容をそのまま返してくれるAPIが完成です。

ステップ3:環境変数をデプロイ先に登録

  • Vercel → Project Settings → Environment Variables
  • AWS Amplifyamplify.yml やGUIで ADS_TXT を追加
  • 自前サーバー.env.production に記載して .gitignore 対象に

方法②:ビルド時にads.txtを生成してpublicに配置(静的編)

「ads.txtはCDNにキャッシュさせたい」「クロール対象として確実にしたい」
そんな方にはこちらの静的ファイル生成パターンが合っています。

ステップ1:.env.production に定義

ADS_TXT="google.com, pub-1234567890123456, DIRECT, f08c47fec0942fa0"

ステップ2:ビルドスクリプトを用意(例:scripts/generate-ads.js

const fs = require('fs');
const path = require('path');

fs.writeFileSync(
  path.join(__dirname, '../public/ads.txt'),
  process.env.ADS_TXT ?? '',
  'utf-8'
);

console.log('ads.txt generated!');

ステップ3:package.json にスクリプトを追加

{
  "scripts": {
    "generate:ads": "node scripts/generate-ads.js",
    "build": "npm run generate:ads && next build"
  }
}

これで next build 時に自動で ads.txtpublic/ に出力されます!


どちらを使う?目的別の比較表

比較項目route.ts方式(動的)ビルド生成方式(静的)
Git管理不要
CDNキャッシュ対応△(工夫すれば可)
Googleクローラー対応◎(確実)
柔軟な切り替え◎(即反映)○(ビルド必要)
セットアップの手軽さ△(スクリプト追加)

まとめ:ads.txtは「環境変数×動的 or 静的」で安全・柔軟に!

Next.js 15のプロジェクトでads.txtをGitに含めず、安全に運用する方法としては、次の2パターンがオススメです。

  • 柔軟性重視なら → App Routerで動的に返す(route.ts)
  • CDN&クロール重視なら → ビルド時に静的ファイルとして生成

どちらも「環境に応じたads.txtを、セキュアかつスマートに提供できる」手段です。
特に広告収益に依存しているサイトでは、ads.txtの不備が収益のロスに直結することもあるので、
できる限り安全な方法で管理したいですね。

というわけで、開発フローに無理なく組み込めるベストな手段を、ぜひ選んでみてください!