はじめに
ぶっちゃけ、僕は自分のこのブログのSEOとかPVには、これまでほとんど興味がなかったんですよね。個人のブログだし、書きたいときに書きたいことを書いて、読みたい人が読めばいいやくらいのスタンス。一応Google AnalyticsとかGoogle Search Consoleの設定はしてたんですが、正直ほぼ見たこともありませんでした。
そんな感じだったんですが、この週末の予定がなくなってしまい急遽ちょっと時間に余裕が出たので、Claudeとともに向き合ってみることにした。特にこれといった目的があったわけではなく、なんとなくClaudeに聞きながら、言われるままにブログ周りのデータを眺めてみるか、くらいで。
そうすると、「この記事ちょっと検索結果に出てるのまずいかも」みたいなものが2〜3本見つかったんですね。具体的には月に2万回以上も検索結果に表示されてるのに、クリック率は0.1%みたいな記事。つまり検索結果には出るんだけど、ほぼ誰にもアクセスされていない。Claudeいわくタイトルと検索意図が致命的にミスマッチだそうだ。
こういうのは削除するほどじゃないんだけど(過去の思考の記録として残しておきたいのもある)、検索結果に出続けるのはちょっと、って感じ。どうやらGoogleから見たときに「低品質なページを抱えるドメイン」と判断される可能性もあるそうで、サイト全体の評価にも影響するかもしれない。
というわけで該当の記事だけnoindex化して検索に表示されないようしようとなったわけですが、はてなブログは個別記事のnoindex設定ができない。正確にはその設定がない。
ググってみると「記事本文の先頭にJavaScriptを埋め込む」という方法が解説記事の大半で紹介されているんですが、正直これって微妙だなーと。
というわけで今日、自分なりに考えてちょっと違うやり方にしてみた。
よくある方法とその問題点
定番として紹介されているのが、対象記事の本文先頭にJavaScriptを埋め込むやり方。HTML編集モードで以下みたいなコードを書いておくってやつ。
<script> document.write('<meta name="robots" content="noindex">'); </script>
動くには動くだろうけど、微妙に感じたのが以下のあたり。
- 対象記事が増えるたびに記事本文の編集が必要。だるい
- 僕は基本Markdown編集で書いているので、HTMLを混ぜるとちょっと気持ち悪い
- どの記事をnoindex化したかわからない。数ヶ月後に「あれ、どの記事に仕込んだっけ?」ってなるかも。これが問題あるかはわからんし、仮にはてなで個別に設定できても同じだが
対象が1〜2記事ならまだいいかもだが、数記事をまとめて処理したい今の状況だと明らかに微妙。
詳細設定に書いて一元管理する
そこで思いついたのが、はてなブログって全体設定でheadに要素を追加できるんですね。なのでそこにURL判定するJavaScriptを1つだけ書いて複数記事をまとめて管理しようかと。この設定自体はブログ全体の詳細設定にあります。
で、コードはこちら。
<script> (function() { var noindexPaths = [ "/entry/2025/10/25/000000", "/entry/2026/01/07/000000" ]; if (noindexPaths.indexOf(location.pathname) !== -1) { var meta = document.createElement("meta"); meta.setAttribute("name", "robots"); meta.setAttribute("content", "noindex"); document.getElementsByTagName("head")[0].appendChild(meta); } })(); </script>
やってることは単純で、現在のパスが配列noindexPathsに含まれていたら<meta name="robots" content="noindex">を<head>に差し込むだけ。即時実行関数でラップしてるのは他のJSと変数名がぶつからないようにするおまじない。
これだと、こんなメリットがある。
- 記事が増えても配列に1行追記するだけ。記事本文には触らなくていい。
- noindexの対象が1箇所に集約されるので、どの記事をnoindex化したかが配列を見れば一発でわかる。
- 記事の編集モード(Markdown / みたまま / HTML)に依存しない。全記事共通で動く。
設置手順
手順自体はシンプル。
- はてなブログの管理画面を開く
- 「設定」→「詳細設定」
- ページ内の「要素にメタデータを追加」セクションを探す
- 上記のコードを貼り付ける(既に何か書いてある場合は改行して追記で大丈夫)
- ページ最下部の「変更する」ボタンを押す
これで完了。あとはnoindexPaths配列にnoindex化したいパスを足していくだけ。
パスの書き方は、記事URL(例: https://www.keisuke69.net/entry/2020/11/19/204631)のうちドメインより後ろ、/entry/2020/11/19/204631の部分だけでOK。
動作確認
ChromeであればDeveloper Toolで見るのが吉。Elementsで<head>内に<meta name="robots" content="noindex">が入っていればOK。
ついでにトップページも開いて、そっちには入っていないことも見ておくと安心かも。ミスると全ページnoindex化される事故があり得るので、確認しておいたほうが無難。
反映までの期間
noindexを設定しても即座に検索結果から消えるわけではなく、Googlebotが再クロールしてJSを実行してインデックスから外すまでには数週間〜1ヶ月くらいかかるらしい。
というわけでGoogle Search Consoleの「URL検査ツール」で対象URLを検査して「インデックス登録をリクエスト」を押すと少し早まると思うのでこっちもやっておくといい。このあたりは自分もまだ様子見中。
まとめ
というわけで、はてなブログで個別記事をnoindex化するなら、記事本文にJSを埋め込むよりも詳細設定の「headに要素を追加」で一元管理するほうが楽だし、事故リスクも少ないはず。対象記事が増えてもコードに1行足すだけで済むし、管理場所が1箇所にまとまっているので運用負荷もほぼないはず。
とはいえ設置したばかりで、実際に検索結果から消えるかはまだ確認中。変化があったらまた追記するかも。