こんにちは!
今日は「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 Amplify →
amplify.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.txt
が public/
に出力されます!
どちらを使う?目的別の比較表
比較項目 | route.ts方式(動的) | ビルド生成方式(静的) |
---|---|---|
Git管理不要 | ◎ | ◎ |
CDNキャッシュ対応 | △(工夫すれば可) | ◎ |
Googleクローラー対応 | ◎ | ◎(確実) |
柔軟な切り替え | ◎(即反映) | ○(ビルド必要) |
セットアップの手軽さ | ○ | △(スクリプト追加) |
まとめ:ads.txtは「環境変数×動的 or 静的」で安全・柔軟に!
Next.js 15のプロジェクトでads.txtをGitに含めず、安全に運用する方法としては、次の2パターンがオススメです。
- ✅ 柔軟性重視なら → App Routerで動的に返す(route.ts)
- ✅ CDN&クロール重視なら → ビルド時に静的ファイルとして生成
どちらも「環境に応じたads.txtを、セキュアかつスマートに提供できる」手段です。
特に広告収益に依存しているサイトでは、ads.txtの不備が収益のロスに直結することもあるので、
できる限り安全な方法で管理したいですね。
というわけで、開発フローに無理なく組み込めるベストな手段を、ぜひ選んでみてください!