この記事の対象者
- Webサイトを公開しているが robots.txt を設置していない方
- 管理画面が検索エンジンにインデックスされるのを防ぎたい方
- robots.txt の基本的な書き方を知りたい方
robots.txt とは
robots.txt は、検索エンジンのクローラーに「どのページをクロールしてよいか」を伝えるファイルです。サイトのルート(https://example.com/robots.txt)に配置します。
重要な注意
robots.txt はあくまで「お願い」であり、悪意のあるクローラーは無視します。機密ページへのアクセス制御には、認証やIP制限を併用してください。
なぜ必要なのか
robots.txt がないと、以下のリスクがあります。
robots.txt なし
クローラーが全ページをインデックス
/admin/ が検索結果に表示
攻撃者が管理画面のURLを容易に発見
攻撃対象になる
ブルートフォース攻撃やゼロデイ攻撃
基本的な書き方
robots.txt
User-agent: *
Disallow: /admin/
Disallow: /drive/
Disallow: /manage/
Sitemap: https://example.com/sitemap.xml
| ディレクティブ | 意味 |
|---|---|
User-agent: * |
すべてのクローラーに対する指示 |
Disallow: /admin/ |
/admin/ 以下をクロールしない |
Sitemap: |
サイトマップの場所を通知 |
よく使うパターン
全ページをクロール許可
robots.txt
User-agent: *
Disallow:
全ページをクロール禁止
robots.txt
User-agent: *
Disallow: /
特定のクローラーのみ許可
robots.txt
User-agent: Googlebot
Disallow:
User-agent: *
Disallow: /
Djangoでrobots.txtを配信する
Djangoでは、ビュー関数で robots.txt を返す方法が簡単です。
urls.py
from django.http import HttpResponse
def robots_txt(request):
lines = [
"User-agent: *",
"Disallow: /admin/",
"Disallow: /drive/",
"Disallow: /manage/",
f"Sitemap: https://{request.get_host()}/sitemap.xml",
]
return HttpResponse("
".join(lines), content_type="text/plain")
urlpatterns = [
path("robots.txt", robots_txt, name="robots_txt"),
# ...
]
静的ファイルとして配置する方法もある
static/ ディレクトリに robots.txt を置き、Nginxで直接配信する方法もあります。ただしDjangoのビューで生成する方が、環境ごとにホスト名を動的に変更できるメリットがあります。
設定を確認する
ターミナル
curl https://example.com/robots.txt
User-agent: * Disallow: /admin/ Disallow: /drive/ Disallow: /manage/ Sitemap: https://example.com/sitemap.xml
まとめ
- robots.txt: 検索エンジンにクロール範囲を指示するファイル
- 必ず設置: 管理画面やプライベートなパスを
Disallowに指定 - 注意: アクセス制御ではないため、認証やIP制限と併用する
- Django: ビュー関数で動的に生成するのが簡単