1ヶ月強の作業を経て公開した新サイトをGoogleのサーチコンソール(旧ウェブマスターツール)に登録しました。
サーチコンソール上でサイトマップのインデックス数が一旦増え始めたものの、減ってしまいました。思い当たる原因を修正したので、多分サイトマップのインデックス数は増えるハズ・・・現在進行形なので、期待を込めて記事にしています。
サイトマップのインデックス数減少の経緯
これまでのSEO
これまでに行っていたSEO対策は、多言語用の特殊タグ(Google用のhreflang属性とBing用のlangタグ)をつけて翻訳が終わっていないページはメタタグでnoindexに設定したり、別URLで同じ記事が表示されてしまう場合のカノニカルURL設定です。
サイトマップ送信!
サイトマップを送信して、待つこと数日後、サーチコンソールで見るとインデックスされ始めていました。Google検索で「site:サイト名」で検索しても順調にインデックス数が増えていきました。(新ドメインでソーシャル拡散も全然まだなので、Google Analyticsでのアクセス数は一日1~3件程度でそのアクセスもBOTっぽいものだけのですが・・・)
あれ?インデックスが減った!?
増えてくるかなと期待していた矢先、サイトマップのインデックス数が激減し始めました。数日待っても、また増えてくる気配はありません。

最大44、数日後には10程度に減少
公開直後に158もページがあるのは、サブディレクトリに設定してあって、サーチコンソール上にも宣言してある多言語のページがダブっているからです。
インデックス数が最大になった時はサイトマップは140程度でしたが、実質は翻訳を徐々に進めているので72~73ページです。タイムラグやリストページもあるので、インデックス数41ならタイムラグを考えたら上出来だと思っていました。
これはヤバイと思いつつ、思い当たる原因があったので修正しました。
原因はカノニカルURLか?
思い当たった原因は、カノニカルURLの設定です。このサイトでは、CMS(コンテンツマネジメントシステム)のJoomla!に追加でFLEXIcontentというカノニカルURLも設定してくれる拡張機能をインストールして作っています。
XML形式のサイトマップを作る拡張機能を別にインストールしているのですが、その拡張機能がFLEXIcontentのカノニカルURLとは違うURLで送信していました。
そのせいで、
- サイトマップのURLへGoogleがアクセスしてインデックス
- サイトマップ内のインデックス数が上昇
- 「site:サイト名」で検索した時の結果も増えていく
- インデックスされたページ内にカノニカルURLが別のURLで設定してある
- 数日後にインデックスされていたサイトマップのURLが削除され、カノニカルURLに変わる
- サイトマップ内のインデックス数は減少
- 「site:サイト名」で検索できる数は変わらない
ということが起こったのではないかと(希望的に)予想しています。
検索結果は予想が正しそうと示してる
この予想をサポートする証拠もあり、「site:サイト名」の検索結果は、投稿してから数日以上経った者はカノニカルURL、新しい投稿はサイトマップのURLを指しています。
インデックス数は復活した
数日後、書き換えたサイトマップURLでインデックスされている数が増え始めました。サイト公開直後だったので「0」のまま動いていなかったサイト全体のインデックス数も100オーバーにジャンプアップしました。
サイトマップ拡張機能「JSitemap」を編集
気持ちが悪いので、サイトマップを出力させている拡張機能「JSitemap」を書き換えてFLEXIcontentのカノニカルURLを出力するようにしました。オープンソースは素敵ですね。JSitemapは頻繁に更新される拡張機能なので、更新するたびに消えてしまうのが残念です。
自分の覚えのために・・・・編集内容を書いておきます。
/components/com_jmap/views/sitemap/tmpl/default_xml_content.php
require_once (JPATH_BASE . '/components/com_flexicontent/helpers/route.php'); $seolink = str_replace("/en/", "/", JRoute::_ ( FlexicontentHelperRoute::getItemRoute ( $elm->slug, $elm->catslug ).'&lang='. $elm->language ) );
ヘルパー関数を使わなくても出来ますが面倒です。また、「adapters/」ディレクトリにあるようにcom_flexicontent用のルート関数を定義したほうが後々良いかもしれませんが、JSitemapで呼び出されているページ自体はcom_contentのページで、com_contentの拡張でcom_flexicontentを呼んでいる感じなので、とりあえずコード書き換えで終わっておきます。
同じディレクトリにdefault_rss_content.phpや、dafault_html_content.phpなどがあるので、必要ならそちらも編集するようにします。
コメント