サーチコンソールでインデックスカバレッジエラーが発生した理由と直す方法

このブログではアフィリエイト・アドセンス広告を利用しています

当ブログでは、アドセンス・アフィリエイト広告を掲載しています。
消費者庁が発表しているルールに沿って記事を作成していますが、問題のある表現を見つけた際にはご連絡ください。

Google Search Consoleから「インデックス カバレッジの問題が新たに検出されました」というエラー発生のお知らせメールが送られてきました。運用中のWordPressサイトでエラーが発生していた原因とその解決方法についてご紹介します。

目次(読みたいところへジャンプ!)

    サーチコンソールからのエラー発生のお知らせメールの内容

    Googleから届いたメールは、次のような内容でした。

    サイト https://~ で「インデックス カバレッジ」の問題が新たに検出されました

    Search Console により、貴サイトに影響する「インデックス カバレッジ」関連の問題が新たに 1 件検出されました。 「インデックス カバレッジ」は Google 検索結果で悪影響を受ける可能性がございます。 この問題をご確認のうえ、修正することをご検討ください。

    「Google検索結果で悪影響を受ける可能性がある」と書かれているので、SEOに悪影響がある可能性が!少しでも早く対応しなければいけないと思い、すぐにメールのサーチコンソールへのリンク先で確認してみると真っ赤っ赤。

    インデックス カバレッジの問題が新たに検出された理由

    サーチコンソールへログインし、インデックスカバレッジエラーの詳細を見てみると、エラーが発生したのは、「送信されたURLにnoindexタグが追加されている」ことが原因でした。

    詳細を見てみると、エラーが発生したのは、「送信されたURLにnoindexタグが追加されている」ことが原因でした。
    インデックスカバレッジエラー

    エラー表示部分をクリックすると、発生していたURLを一覧で確認することができます。チェックしてみると、カテゴリーとタグのアーカイブページにnoindexを指定していることが問題だったのです。

    noindexを指定しているのはプラグインとテーマ

    カテゴリーとタグページにnoindexを指定しているのは、プラグインかテーマのどちらか、あるいは両方が考えられます。

    今回、エラーが発生したサイトでは、All in One SEOプラグインを使用していました。
    ダッシュボードのAll in One SEOプラグインメニューから、一般設定を確認してみると、「noindex指定」ボックスにて「カテゴリーをnoindexにする」にチェックがされていました。

    「カテゴリーをnoindexにする」「タグをnoindexにする」の2つのチェックは外しておきましょう。
    All in one SEO noindex設定

    これで問題が解決したと思ったのですが、1週間後に再びGoogleからエラーが改善されていないというメールが送られてきていたのです…
    サーチコンソールで確認してみると、タグページには、まだnoindexメタタグが追加されている状態が続いているとのこと。

    プラグインの設定は修正したので、あとは使用中のテーマがやっているとしか考えられません。テーマのfunctions.phpファイルを確認してみると、その名も「no_index」関数が存在していて、タグ・検索結果・日付アーカイブページにはno_indexを付けるという余計な処理をしていたのです。

    テーマがカテゴリーとタグページにno_index指定を修正する方法は3つ

    使用中のWordPressテーマがカテゴリーとタグページにno_index指定をしている場合、テーマ作者の作り方によって解決方法は大きく2つに分かれます。

    1. テーマ作者がきめ細やかでカスタマイズメニューでチェックを外すだけで解決する場合
    2. 子テーマを作って解決する場合

    1)テーマ作者がきめ細やかでカスタマイズメニューでチェックを外すだけで解決する場合

    テーマ作者が神対応であらゆる状況を想定している場合、ダッシュボードメニューの「外観」→「カスタマイズ」へ行ってみると、「カテゴリーとタグページにno_index指定をする」というようなチェックボックスが用意されている場合があります。この場合はラッキー!チェックを外すだけで解決します。詳しくは、使っているテーマのサイトを確認してみてくださいね。

    また、現在は対応していなくても、もう少し待つと対応してくれる可能性も無きにしもあらず。有名テーマで愛用者が多いなら、期待して待っていてもいいかもしれません。

    2)子テーマを作って解決する場合

    テーマカスタマイズ設定が用意されていない場合は、子テーマを作成してテーマをカスタマイズする必要があります。使っているテーマをそのままカスタマイズしてしまうと、テーマが更新されるタイミングでせっかくの労力が全て消えてしまうからです。

    子テーマの作り方は、次の記事を参考にしてみてください。サンプルを配布しているので、自分用に書き換えるだけですよ。
    https://demo.kimoba.com/dic/child-theme.html

    子テーマが用意できたら、レンタルサーバーへアップロードしていきます。アップロードする方法は2種類あるので、簡単だと感じる方法を選びましょう。

    1. 子テーマを圧縮してWordPressから取り込む
    2. FTPアプリで子テーマフォルダごとアップロードする

    子テーマを圧縮してWordPressから取り込む

    作った子テーマを、MacならFinderアプリで右クリックをして表示されるメニューから「XXXを圧縮」を選ぶと、圧縮ファイルが作成されます。
    子テーマをファインダーの右クリックで圧縮する方法

    WordPressの管理画面のメニューから、「外観」→「テーマ」をクリックし、テーマ画面で「新規追加」を選びます。
    テーマの新規追加

    「テーマのアップロード」ボタンをクリックします。
    テーマのアップロード

    「ファイルの選択」ボタンをクリックし、表示されるファイル一覧から作成した子テーマの圧縮ファイルを選ぶと、子テーマがWordPressにアップロードされます。子テーマのファイルの選択
    正しく子テーマがテーマ一覧に追加されているのを確認できたら、子テーマの追加は完了です!

    FTPアプリで子テーマフォルダごとアップロードする

    普段からFTPアプリを使いなれている方なら、子テーマフォルダーごとアップロードする方が早いかもしれません。アップロードするのは、レンタルサーバー上のWordPressがインストールされたパス¥wp-content¥themesフォルダの下です。

    アップロード後、WordPressの管理画面から「外観」→「テーマ」をクリックし、テーマ一覧に子テーマが追加されていたら、無事に作業完了です。

    子テーマが用意できたら、親テーマのfunctions.phpファイル内のno_index指定をしている関数にif(!function_exists())が書かれているかどうかで対応が2つに別れてくるので、確認してみましょう。

    1) 子テーマを作って解決する場合①if(!function_exists())有

    親テーマのno_index指定をしている関数がif(!function_exists())でエスケープ処理されている場合は、子テーマのfunctions.phpファイルで全く同じ名前の関数を作成していきます。

    親テーマのfunctions.php

    
    <strong>if ( ! function_exists( 'no_index' ) ) </strong>:
    function no_index(){
    if (is_date() || <strong>is_tag()</strong> || is_search())
    {echo '<meta name="robots" content="noindex,nofollow">';}
    }
    add_action('wp_head','no_index');
    

    親テーマでno_index指定している関数を探します。その関数の前にif(!function_exists('関数名'))と書かれていたら、子テーマで同じ名前の関数を作って中身を変更してしまうのです。

    子テーマのfunctions.php

    
    function no_index(){
    if (is_date() || is_search())
    {echo '<meta name="robots" content="noindex,nofollow">';}
     } 
    add_action('wp_head','no_index'); 

    今回は、タグのアーカイブページだけno_indexを止めたいので、関数内のif (is_date() || is_tag() || is_search())からタグ部分を取って、if (is_date() || is_search())へ書き換えるのです。そうすると、タグページのno_index指定がされなくなります。

    ちょっと詳しく解説すると、if(!function_exists('関数名'))という命令文は、「もし同じ’関数名’の関数が存在しないなら実行してね」という意味になります。

    WordPressでは、子テーマのfunctions.phpファイルが先に読み込まれた後に、親テーマファイルが読み込まれます。そのため、子テーマで先に同じ名前の関数を作って内容を書き換えることで親テーマの関数が実行されなくなるのです。

    2) 子テーマを作って解決する場合②if(!function_exists())無

    親テーマの関数にif(!function_exists('関数名'))が書かれていないなら、さらに子テーマでの対応にテクニックが必要です。

    親テーマのfunctions.php

    function no_index(){
    if (is_date() || is_tag() || is_search())
    {echo '<meta name="robots" content="noindex,nofollow">';} } add_action('wp_head','no_index');

    子テーマのfunctions.php

    function remove_action_noindex() {
    	remove_action('wp_head','no_index');
    }
    add_action('after_setup_theme','remove_action_noindex');
    

    子テーマ内で、親テーマのno_index関数を除去するプログラム関数をコピー&ペーストしましょう。これで、親テーマのno_index関数が丸ごと処理されなくなります。

    関数の一部分を残したい場合は、親テーマの関数を子テーマへコピペした後で、新しい関数名にし、必要な処理だけを残します。下の関数no_index_newを追加すると、日付アーカイブと検索結果ページにはno_indexがメタタグに追加される処理だけは残ります。

    function no_index_new(){
    if (is_date() || is_search())
    {echo '<meta name="robots" content="noindex,nofollow">';} } add_action('wp_head','no_index_new');

    最後に、サイトをブラウザーで表示したら右クリックのコンテキストメニューで「ページのソースを表示」を選び、メタタグ内のno_index指定がなくなっているか確認してみましょう。

    難しく感じる場合は、相談してくださいねー。お金取りますけど(笑。良心的な価格ですよ。

    同じカテゴリの関連記事リスト