こんにちは!
今日は「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の不備が収益のロスに直結することもあるので、
できる限り安全な方法で管理したいですね。
というわけで、開発フローに無理なく組み込めるベストな手段を、ぜひ選んでみてください!
