以前からやろうと思っていたので段階的に始めた。

動機


このサイトは完全個人のどうでも良い日記を垂れ流している。そういったものに貴重なインターネットリソースが消費されるのは忍びない。検索に引っかかる必要性など皆無で、最初からインデックスされなければ良いだろう。

※あくまでこのサイトの記事の話で合って、人様の日記が引っかかることに対してではない

というのを結構前から思っていたが、ここ最近は以前にもましてそういう類の記事を増やしていっているので思い切っていっちょここいらでやることにした。(もちろん、Googleとかは優秀なのでそもそもそんな記事が検索で引っかからないようにしているかもしれないけれども、そもそもこちらからすれば最初から完全対象外にしたい)

やりかた


このサイトはHexoで構築されているのでHexoのScript機能を使って、一定条件を満たしていると<head><meta name="robots" content="noindex">を挿入することにした。

v5.0.0からInjectorという機能が本体に導入されており、こちらでも出来ると思うが使い方を把握していないということもあって、手っ取り早く済ませたかったので従来通りのScriptで行くことにした。

対象とした記事


とりあえず、タグに月報が入っているものとタグが一つのみで日記のものを対象にした。この辺りもっとやりようがあると思うが、タグとかカテゴリーを綺麗に整理していないツケがまわってきた。

コード


まず、テーマのscriptディレクトリにno_index.jsというファイルを作成して下記のコードを書いた。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const headerMeta = '<meta name="robots" content="noindex">';

function noindex() {

const page = this.page;

if (page.tags && page.tags.length > 0) {
const tags = page.tags.map((tag) => tag.name);
if (tags.includes("月報")) {
return headerMeta;
}
if (tags.length === 1 && tags.includes("日記")) {
return headerMeta;
}
}
}
hexo.extend.helper.register('no_index', noindex);

それでもって、後はhead向けのEJSテンプレートエンジンに <%- no_index() %>を足した。

1
2
3
4
5
6
7
8
9
10
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><%= title %></title>
<meta name="author" content="<%= config.author %>">

...

<%- no_index() %>
</head>

これで終わり。

良い感じに挿入されている。対象とかはもう少し調整したい。