Hugo の robots.txt と Sitemap。
Static Site Generator Advent Calendar 2020 - Day 2
ふうせん🎈 FU-SEN と申します。……ってあれ!?
初日から Static Site Generator は投稿なしですか!!? 💻😭
海外ではかなり静的サイトジェネーターの支持が出てきてるんですけどねぇ。
仕方がない…… Hugo で記事を入れましょう。
ちなみに 静的サイトジェネレーター Advent Calendar 2019 は
誰も作ってないのぉ~!? 💻😭 って自分が設置したんですけどね。
静的サイトジェネレーター Advent Calendar 2019 - Qiita
Web サイトで重要になってきている robots.txt と Sitemap
クローラーは新たなドメインを見つけた時、まず robots.txt
を参照するんです。
ここにはクローラーの参照可否情報が入ってるからですね。
更にはサイトアップ(Sitemap)の URL も書いてある場合があります。
サイトマップが URL に日時付の場合はすでに収集している日時と比較して
新しい URL または未知の URL を参照しようとするでしょう。
日時がなければ、とりあえずすべてを参照するようになるでしょう。
これらのサイトマップ自体がなければ、 http(s)://ドメイン/
から
たどる形を取っていくか、外部でリンクされている URL からでしょう。
でもその解析を要すると後回し(優先度が低い)状態になるように感じています。
つまり、robots.txt
とサイトマップ(できれば日時付)は
重要な要素になってきているだろうと思うんですよね。🤔
Jimdo という Web サービスでも。
いつの間にか robots.txt とサイトマップを出力していました。
サイトマップは日時付ではないですけど……
(🎈 イチゴジャム レシピ より)
今や robots.txt やサイトマップは常識要素になった という事なのでしょうね。
では、Hugo では robots.txt やサイトマップがどうなっているか確認してみます。
Hugo のサイトマップ
Hugo はデフォルトでは public/
直下に sitemap.xml
を生成します。
もちろんこのブログも Hugo なので、サイトマップが生成されています。 🎈 https://balloon.asia/sitemap.xml 、ここに一部抜粋すると……
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://balloon.asia/categories/</loc>
<lastmod>2020-12-02T00:10:00+09:00</lastmod>
</url>
<url>
<loc>https://balloon.asia/tags/php/</loc>
<lastmod>2020-12-02T00:10:00+09:00</lastmod>
</url>
:
<url>
<loc>https://balloon.asia/archives/</loc>
</url>
</urlset>
通常は Hugo のデフォルトテンプレートをそのままテーマが採用しているでしょう。
テーマによっては独自のテンプレートを適用している場合があります。
ブログ運用をカテゴリー・テーマ共に使用している場合は、
デフォルトのテンプレートで問題ないかと思いますが、
使用していなくても /categories
や /tags
が生成されます。
この参照が嬉しくない場合、config.toml
に次を設定します。
disableKinds = ["taxonomy","taxonomyTerm"]
https://ドメイン/
の 1 ページしかないけど、複数のファイルで構成する場合、
サイトマップを考慮していないテーマが存在します。
生成される sitemap.xml
でそれが確認できる場合、
あえて Hugo の生成を無効にするのも手です。
disableKinds = ["section", "taxonomy", "taxonomyTerm", "RSS", "sitemap"]
static/
に sitemap.xml
を生成し、次を生成します。
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://ドメイン/</loc>
</url>
</urlset>
lastmod
を加えて更新すればなお良いですね。
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://ドメイン/</loc>
<lastmod>2020-12-02T10:20:30+09:00</lastmod>
</url>
</urlset>
Hugo の robots.txt
Hugo はデフォルトでは robots.txt
を生成しません。
「必要がない」という判断ですね。
生成されるのは HTML や画像などになり、
すべてはクローラーが参照して構わないファイルになります。robots.txt
がない→Not Found(404)、
これは Google などではすべてのファイルに許可判断、となります。
Robots.txt の仕様 | Google 検索セントラル | Google Developers
そういえば、ある Web サービスのコミュニティで、
いつまでたっても Web サイトが検索結果にでてこない!という相談があって、
その https://ドメイン/robots.txt
を見てみたら、Server Error(500) が出てきた、
というオチを見た事がありましたね…… 😆
静的サイトジェネレータを使用しているなら、動的処理がないので、
そんな事はほとんどありませんが……
……あ、脱線しました。戻します。
でも Hugo に robots.txt
生成機能がないわけではないんです。config.toml
に次を加えます。
enableRobotsTXT = true
これにより public/
には次の robots.txt
が生成されます。
User-agent: *
……すべてのクローラーを指定しているだけで、
他の記載はない=全ファイル参照許可ですね。
テンプレートも layouts/robots.txt
で生成できるのですが、
通常はわざわざ Hugo で自動生成する必要はないような気がします。
このブログ 🎈 https://balloon.asia/robots.txt は現在次にしてあります。
User-agent: *
Disallow:
Sitemap: https://balloon.asia/sitemap.xml
Disallow:
と明示して、拒否ファイルなし(=全ファイル参照許可)という事ですね。
なんか robots.txt
を検索すると、
このように記載しているところが最近多いので、合わせてみています。
サイトマップは Google Search Console や Bing Webmaster Tools から
送信を行って、参照・情報の更新を促す事ができるのですが、
他にもクローラーがいるので、サイトマップを robots.txt
に入れて
参照してほしい URL を見つけやすくしておくのは無難でしょうね。
Google・Bing も、システムがちょこちょこ更新されていて、
久々に参照したら、手動で入れていたサイトマップが
なくなっていた……という事もありました。
ちなみにすべて拒否する robots.txt
も入れておきます。
まだ制作段階のサイトなどでは重要です。
User-agent: *
Disallow: /
robots.txt
はサブドメインを含むドメイン単位になります。
例えば GitHub Pages はプロジェクトで作成するとhttps://●●●.github.io/プロジェクト/
となりますが、
この場合、robots.txt
はhttps://ユーザー.github.io/robots.txt
が有効になります。
もちろん同じ構成の GitLab Pages も同様ですね。
自分はその考慮もあって、
プロジェクトは基本的に独自ドメインで割り当ててあります。fu-sen.github.io
だと画数が悪ブツブツ…
Hugo の話題、他にも入れておきたいネタがあるので、
また後日投稿しようと思っています。😉
Static Site Generator Advent Calendar 2020