JavaScript(jQuery)と SEO – コンテンツキーワードに json から生成したテンポラリの非表示要素が認識されてしまった話

February 24, 2015

Google 先生のクローラーが JavaScript を解するようになっています。知ってた。いや、知っている つもりだった。でも迂闊だった。今回は筆者の大失敗を赤裸々に語ります。本記事をご覧いただいた皆さまは、これを他山の石としてくださいますよう何卒お願い申し上げます。このような悲劇は二度と起こってはならない。

SEO with JavaScript(jQuery)

筆者の失態とは、JavaScript(jQuery)で生成したテンポラリの非表示要素が、ウェブマスター ツールで確認できるコンテンツ キーワードとして大量に認識されてしまったことです。その結果、SEO に著しく悪影響を与えてしまいました。

グーグルは JavaScript を実行してページを評価している

これは公知の事実と思いますが、念のため参考リンクを掲載します。

コンテンツ キーワード一覧に並ぶ 身に覚えのないキーワード

実は、気付くのは早かったのです。これを問題と認知するのが遅れました。

ScreenShot

「alt」「class」「height」などの単語が上位に並んでいます。HTML を知る人ならば、img タグの属性だと気付くでしょう。もちろん、これらの単語はサイト コンテンツとは無関係です。img タグについて何ページも力説しているサイトなんて見たことない。

サイトのコンテンツが正しく認識されていなければ、検索結果で上位に表示されるはずもありません。

「HA HA HA グーグル先生もこんな誤認識をすることがあるんだな 時間が経てば解消されるだろう」そう考えて流してしまったのが、思い起こせば悲劇の始まりでした。

不幸の元凶はアンカー テキスト

誤認識は一向に改善されないまま、コンテンツ キーワードの異常に気付いてから約 1ヶ月が経過。ここにきて ようやく思い当たりました。このキーワード、JavaScript(jQuery)で生成しているテンポラリの要素からピックアップされている、と。

そのテンポラリの要素は、サイトに掲載している動画のすべてのサムネイル画像です。元データは json ですが、img タグにしてしまうと非表示でも src のファイルがリクエストされてしまうので、デコード前の文字列のままテンポラリ要素にしていました。ちょうど こんな風に。

<div class="itemContainer">
	<div class="item">
		<a href="/page1/">\u003Cimg width=\u0022200\u0022 height=\u0022112\u0022
 src=\u0022http:\/\/example.com\/images\/image_01-200x112.jpg\u0022
 class=\u0022itemImage\u0022 alt=\u0022...\u0022 \/\u003E</a>
	</div>
	<div class="item">
	...
	</div>
	...
</div>

このテンポラリ アイテムが、数十個という単位で全ページに存在していました。おそらく、最大の過ちはアンカー テキストだったことでしょう。テンポラリ要素の中でも、アンカー テキスト内の単語のみがキーワードとして認識されていたからです。

加えて、itemContainer は非表示(display: none)でしたが、それがアダとなり、グーグル先生は不自然なキーワードの埋め込みと判断していたかも知れません。

勝手に JavaScript を実行しておいて、大量に作成された非表示のテンポラリ要素を検索エンジン スパムと判断するなんて酷すぎる話だ。でも この推測は残念ながら当たっていると思う。グーグル先生は賢いけれど、悪意の有無まで判断できるわけがない。疑わしきは罰しないけど評価せず。たぶん そんな感じ。泣ける。

解決策は jQuery の data オブジェクト

早速、それこそ光の速さでプログラムを修正。テンポラリ要素からアンカーとデコード前の文字列を取り除き、代わりに jQuery の .data() を使ってデータを保持するよう変更。テンポラリ要素は以下の感じになりました。

<div class="itemContainer">
	<div class="item"></div>
	<div class="item"></div>
	...
</div>

変更を適用後、1週間ほどでコンテンツ キーワードから意図しないキーワードたちが消えました。それから さらに 2~ 3週間ほどで、それまで停滞していた検索流入数(むしろ下降気味だったかも)が増加傾向に転じました。

問題を放置してしまった 1ヶ月、それを修正して改善効果が表れるまでの約 2ヶ月を無駄にしました。2ヶ月は痛い。本当に。あなたの関わるサイトでは、このような悲劇が繰り返されないことを切に祈ります。

コメントを残す

メールアドレスが公開されることはありません。