Hugoでnoindexタグを設定する(フロントマター使用)

Hugoでnoindexタグを設定する(フロントマター使用)
目次


はじめに

ブログを書いていると、Google等検索エンジンにインデックスされたくないページが出てくると思います。

「noindex」タグをつけることで検索エンジンにインデックスされなくなります。今回はhugoでnoindexタグをつける方法を紹介します。

hugoでのnoindexタグのつけかた

こちらのサイトを参考にさせていただきました。

参考URL:HUGOで隠しコンテンツを配信する

基本的に「4. クローラにインデックスされない」の方法でnoindexタグを埋め込むことができます。ただ<HEAD>ダグを抜き出していない場合、追加場所の「head.html」は存在しない場合があります。私が使用しているテーマ「Mainroad」では「layouts/_default/baseof.html」の<HEAD> - </HEAD>部分に項目を追加しました。

この方法ですんなり行けばいいのですが、私の環境では以下のエラーが出てうまくいきませんでした。

WARN .File.ContentBaseName on zero object.

調べてみると、.FIle.Pathはトップレベルセクションには対応していないようです。

公式ページ:File variables 参照

Some of the pages on a site may not be backed by a file. For example:
・Top level section pages
・Taxonomy pages
・Term pages

このサイトのhugoのディレクトリ構造で行くと

content/
  |
  +- profile.md ※
  |
  +- policy.md ※
  |
  +- /post/ -+-記事1.md
             |
             +-記事2.md
             |
             +-記事3.md

「※」印の「profile.md」「policy.md」がトップレベルセクションにあたります。(contentディレクトリ直下のファイル)。

いろいろ調べた結果、記事毎の先頭に書くフロントマターはユーザー定義できることがわかりました。なのでトップレベルセクションのファイルには、フロントマターで個別に対応することにしました。

エラーが出たので、inhibitPaths を省略して、以下のように設定しました。

config.tomlに下記を追加

[params]
InhibitSections = ["tags", "categories"] #noindexをつけるセクション名

baseof.htmlの<head>-</head>`部分に追加

{{ if (in $.Site.params.InhibitSections .Section) }}
	<meta name="robots" content="noindex">
{{ end }}

トップレベルセクションがなければ、参考サイトそのままでいけると思います。(そうすれば、以下の記事は必要ないかも)。

フロントマターでnoindexを指定する方法

フロントマターについては公式ページ:Front matter を参考にしました。

User-defined
You can add fields to your front matter arbitrarily to meet your needs.
(Google翻訳)ニーズに合わせて、前付にフィールドを任意に追加できます。

テンプレート内での参照は「.Params.定義名」で参照できます。宣言は必要なく、自分で決めた名前を追加すれば使えます。今回は「noindex」タグを追加しました。

フロントマターにユーザー定義タグ[noindex]を記載する

各記事の先頭にあるフロントマターに[noindex]タグを追加します。

---
title: "HugoでNoIndexを設定する(フロントマター使用)"
date: "2023-08-25"
url: post/hugo-add-noindex
    categories: ["pc"]
noindex: true ← これを追加
---
  • 標準のフロントマターと重複しない名前をつけてください。(標準フロントマターのリスト )
  • 定義が必要ないので、スペルミスに注意してください(スペルミスすると「定義していない」ことになります。エラーはでません。)

baseof.htmlの変更

baseof.htmlの<HEAD>-</HEAD>タグ間に以下のコードを追加します。

{{ if or (in $.Site.Params.myparams.inhibitSections .Section) (.Params.noindex)}}
  <meta name="robots" content="noindex">
{{ end }}
  • 「.Params.noindex」がフロントマターの「noindex: true」を参照します(trueを返します)。

おわりに

hugoでnoindexを設定する方法でした。フロントマターにタグをつける方法は、記事個別に対応できるので、「この記事イマイチかな。。」ってときにも使えると思います。