Static Site Generator Advent Calendar 2020 - Day 2

ふうせん🎈 FU-SEN と申します。……ってあれ!?
初日から Static Site Generator は投稿なしですか!!? 💻😭
海外ではかなり静的サイトジェネーターの支持が出てきてるんですけどねぇ。
仕方がない…… Hugo で記事を入れましょう。

ちなみに 静的サイトジェネレーター Advent Calendar 2019 は
誰も作ってないのぉ~!? 💻😭 って自分が設置したんですけどね。


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 などではすべてのファイルに許可判断、となります。

そういえば、ある 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

Static Site Generator Advent Calendar 2020 | Qiita