ページ内の特定のセクションをクロールさせない方法:正攻法なし、強引にやるならiframe/JavaScriptとrobots.txtの合わせ技

[レベル: 中級]

ページ内の一部分を Google にクロール、インデックスさせないようにできるのでしょうか?
正攻法はありませんが、代用策がないわけでもありません。

特定のセクションのクロールを防ぐ方法はない

2023 年 6 月の英語版 SEO オフィスアワーで次の質問が取り上げられました。

ウェブページの特定のセクションからGooglebotをブロックするにはどうすればいいですか?

商品ページには購入済みセクションもあります。これには、ウェブサイトの重要な部分ではない小さなアドオンが含まれていることがよくあります。

後半が何を言っているのかはっきりしませんが、ようは、ページの一部分の重要ではないコンテンツを Google にクロールさせたくない(評価対象にしてほしくない)という要望です。

John Mueller(ジョン・ミューラー)氏はこう回答しました。

短く答えれば、HTML ページの特定のセクションのクロールをブロックすることはできない。

しかし、似たようなことをできる方法が 2 つある。検索スニペットにテキストが表示されないようにするには、data-nosnippet HTML 属性を使用できる。また、robots.txt でブロックされたソースを持つ iframe や JavaScript を使用することもできる。

robots.txt でブロックされた iframe や JavaScript ファイルを使用するのは通常は良い考えではない。なぜなら、クロールやインデックスに問題を引き起こす可能性があり、それらを診断したり解決したりするのが難しいからだ。

ブロックしたい一部分がページ間で再利用されるコンテンツだけであれば、心配する必要はない。Googlebot にそのような重複を見せないようにする必要はない。

質問者の要望を叶えるのに最適な手段はありません。
しかし、やや強引な手段で望みを叶えることはできます。

data-nosnippet、もしくは robots.txt でブロックした iframe/JavaScript

1 つの方法は、data-nosnippet HTML 属性を使う方法です。

たとえば、下のように記述すると、「これは、検索スニペットに表示されないテキストです。」は検索結果のスニペットに表示されなくなります。

<p data-nosnippet>これは、検索スニペットに表示されないテキストです。</p>

ただし、data-nosnippet はスニペットに表示させないだけであり、クロールやインデックスを防ぐものではありません。
質問者の要望に完全には一致していないと思われます。

📝すずき補足:data-nosnippet の詳細は検索セントラルのドキュメントを参照

そこで、ミューラー氏は別の方法を提案したのです。
細かく分けると 2 つありますが、共通するのは robots.txt を利用する点です。

1 つは、クロールさせたくないコンテンツを別のページで公開し、iframe で挿入する方法です。
iframe 先のページの URL を robots.txt でブロックします。
そうすれば、iframe で読み込んだ部分のコンテンツはクロールされません。

もう 1 つは、クロールさせたくないコンテンツを JavaScript で生成する方法です。
その JavaScript ファイルを robots.txt でブロックします。
Googlebot は JavaScript を実行できないのでコンテンツを生成しません。
つまり、クロール対象になりません。

ただし、robots.txt を用いたこれらの方法は、ミューラー氏が言うように別の問題が発生する可能性があり、勧められるものではありません。

ということで、ページの特定の部分を、クロール、インデックスさせないようにするための正攻法はありません。
無理にでも実現したいのであれば、iframe または JavaScript と robots.txt の合わせ技を使うことになります。