環境
- Python 3.12.1
- sphinx 7.2.6
やりたいこと
sphinxでHTMLを生成しています。
生成したHTMLはインターネット上に公開していて、誰でもアクセスできる状態です。
しかし、検索エンジンからは検索されないようにしたいです。
現在の状態
$ tree
.
├── Makefile
├── _build
├── _static
├── _templates
├── conf.py
└── index.rst
project = 'test'
copyright = '2024, yuji38kwmt'
author = 'yuji38kwmt'
extensions = []
templates_path = ['_templates']
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
html_theme = 'alabaster'
html_static_path = ['_static']
================================
test
================================
以下のコマンドでHTMLが生成されます。
$ make html
生成されたHTMLファイルのheadタグの中身です(フォーマット済)。
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>test — test documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
<script src="_static/documentation_options.js?v=5929fcd5"></script>
<script src="_static/doctools.js?v=888ff710"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
</head>
やったこと
検索エンジンから検索されないようにするには、以下のmetaタグを追加する必要があります。
<meta name="googlebot" content="noindex">
shpinx テンプレートを作成するという記事を参考にして、_template
ディレクトリに以下のlayout.html
を作成して対応しました。
{% extends "!layout.html" %}
{% block extrahead %}
{# 検索エンジンの検索結果に表示されないようにする #}
<meta name="robots" content="noindex" />
{% endblock extrahead %}
{% extends "!layout.html" %}
の意味は、以下の通りです。
"!"を継承するテンプレート名につける事で、ユーザが用意したテンプレートを継承元として参照する事になります。
ユーザが用意したテンプレートとは、"conf.py"の templates_path で設定されているパスに配置されているものです。ドキュメントに使用されるテンプレートは以下の順番で探索されます。
選択しているテーマalabaster
のextrahead
ブロックは、以下のコードで定義されています。
_template/layout.html
は、alabaster
テーマのextrahead
ブロックの最後に<meta name="robots" content="noindex" />
を追加しているだけです。
make html
でHTMLファイルを生成すると、headタグの中身は以下のようになりました。
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>test — test documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
<script src="_static/documentation_options.js?v=5929fcd5"></script>
<script src="_static/doctools.js?v=888ff710"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<meta name="robots" content="noindex" />
</head>
期待通り、headタグの最後に<meta name="robots" content="noindex" />
が追加されました。
補足: 特定のページのみ検索されないようにする
meta
ディレクティブを使えば、特定のページのみ検索されないようにできます。
================================
test2
================================
.. meta::
:googlebot: noindex
生成された_build/html/test2.html
のheadタグの中身です。
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta content="noindex" name="googlebot" />
<title>test2 — test documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
<script src="_static/documentation_options.js?v=5929fcd5"></script>
<script src="_static/doctools.js?v=888ff710"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
</head>