Django で robots.txt を配置する方法、個人的な考慮点を記載します。
前提
Python、Django の Version は以下の通りです。
python3 -V
Python 3.6.2
python3 -m pip list | grep Django
Django (1.11.11)
参考
- Three ways to add a robots.txt to your Django project – fredericiana
- One line robots.txt in django
- 初心者にも分かる!robots.txtの作り方
- Meta robots noindex/nofollow/noarchiveタグの使い方 | 海外SEO情報ブログ
配置方法
参考記事に記載されているのは以下 3つの方法です。
ワンライナーで書く
この記載方法は知りませんでした。ワンライナーで robots.txt の記載ができます。
from django.conf.urls import url
from django.http import HttpResponse
urlpatterns = [
url(r'^robots.txt$', lambda r: HttpResponse("User-agent: *\nDisallow: /", content_type="text/plain")),
]
テキストファイル配置して、テンプレートとして読み込む
TemplateView
を使用して、作成したrobots.txt
をテンプレートファイルとして読み込みます。
from django.views.generic import TemplateView
urlpatterns = [
# robots.txt
url(r'^robots.txt$', (TemplateView.as_view(template_name="robots.txt", content_type='text/plain', )),
name="robots.txt"),
]
django-robots を使用する
django plugin の jazzband/django-robots: A Django app for managing robots.txt files following the robots exclusion protocol を使う方法です。
過去に、Mezzanine Sitemap.xmlを生成してみる | Monotalk でインストールしてみましたが、ここまでの機能は今回はいらないかなと思いました。
Cache が設定できたり、リクエストのプロトコルに合わせて、記載内容を変更することができるので、細かい設定がしたい場合は、このpluginを使用するのが良いかと思います。
個人的な考慮点
初心者にも分かる!robots.txtの作り方 がありますが、管理画面の URL の Disallow の記載をすると、悪意のある第三者に管理画面 URL を知らせているようなものなので、管理画面の記載はせずに管理画面側に metaタグで、<meta name="robots" content="noindex, nofollow" />
を指定しておき、場合によってはHTTPサーバー側の制御も入れるのが良いかと思います。
Django の管理画面のmetaタグ指定について
Django 自体の管理画面について
Django の 管理画面に、<meta name="robots" content="noindex, nofollow" />
に該当する記述があるかですが、Django (1.11.11) の管理画面には以下の meta タグの記述がありました。
<meta name="robots" content="NONE,NOARCHIVE" />
NONE
は、noindex、nofollow
を両方とも指定した場合の挙動と等しくなり、NOARCHIVE
は検索エンジンの Cache 保持を拒否する設定になります。
検索エンジンに、インデックスもキャッシュもするなと言っています。
Mezzanine - The Best Django CMS の 管理画面にもこの設定はあります。
Wagtail CMS の管理画面について
Wagail CMS の 管理画面ですが、<meta name="robots" content="noindex, nofollow" />
に該当するタグは付与されていません。
これは少し気になるので、Customising admin templates — Wagtail 1.11.1 documentation に記載されているbranding_favicon
という Template ブロックを使って、<meta name="robots" content="NONE,NOARCHIVE" />
を設定しました。
- home/templates/wagtailadmin/login.html
{% extends "wagtailadmin/login.html" %} {% block branding_favicon %} <meta name="robots" content="NONE,NOARCHIVE" /> {% endblock %} {% block branding_login %} mutter.monotalk.xyz 管理機能へサインイン {% endblock %}
Django の robots.txt の設定方法について記載しました。
以上です。
コメント