sphinxで生成したhtmlファイルに、検索エンジンから検索されないようにするためmetaタグを追加する

# 環境
* Python 3.12.1
* sphinx 7.2.6

# やりたいこと
sphinxでHTMLを生成しています。
生成したHTMLはインターネット上に公開していて、誰でもアクセスできる状態です。
しかし、検索エンジンからは検索されないようにしたいです。

# 現在の状態

```
$ tree
.
├── Makefile
├── _build
├── _static
├── _templates
├── conf.py
└── index.rst
```

```python:conf.py
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']
```

```:index.rst
================================
test
================================
```

以下のコマンドでHTMLが生成されます。

```
$ make html
```

生成されたHTMLファイルのheadタグの中身です（フォーマット済）。

```html:_build/html/index.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 &#8212; 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タグを追加する必要があります。


```html
<meta name="googlebot" content="noindex">
```

https://developers.google.com/search/docs/crawling-indexing/block-indexing?hl=ja


[shpinx テンプレートを作成する](https://sphinx-users.jp/cookbook/makingwebsite/template.html#:~:text=%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%92%E7%B6%99%E6%89%BF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%A8%E3%81%97%E3%81%A6%E3%80%81%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%22!%22%E3%82%92%E8%A8%98%E8%BF%B0%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%82%82%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82)という記事を参考にして、`_template`ディレクトリに以下の`layout.html`を作成して対応しました。



```html:_template/layout.html
{% extends "!layout.html" %}
{% block extrahead %}
{# 検索エンジンの検索結果に表示されないようにする #}
<meta name="robots" content="noindex" />
{% endblock extrahead %}
```

`{% extends "!layout.html" %}`の意味は、以下の通りです。

>"!"を継承するテンプレート名につける事で、ユーザが用意したテンプレートを継承元として参照する事になります。
ユーザが用意したテンプレートとは、"conf.py"の templates_path で設定されているパスに配置されているものです。ドキュメントに使用されるテンプレートは以下の順番で探索されます。

選択しているテーマ`alabaster`の`extrahead`ブロックは、以下のコードで定義されています。

https://github.com/sphinx-doc/alabaster/blob/master/alabaster/layout.html#L3-L14

`_template/layout.html`は、`alabaster`テーマの`extrahead`ブロックの最後に`<meta name="robots" content="noindex" />`を追加しているだけです。


`make html`でHTMLファイルを生成すると、headタグの中身は以下のようになりました。

```html
<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 &#8212; 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`ディレクティブを使えば、特定のページのみ検索されないようにできます。

https://sphinx-users.jp/reverse-dict/html/meta.html


```test2.rst
================================
test2
================================


.. meta::
   :googlebot: noindex

```

生成された`_build/html/test2.html`のheadタグの中身です。

```html:_build/html/test2.html
<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 &#8212; 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>
```