1. HOME
  2. SEO
  3. 【サンプルコード付】ペンギンアップデートのペナルティ回避方法
SEO

【サンプルコード付】ペンギンアップデートのペナルティ回避方法

SEO

ペンギンアップデートが自動適用になって、検索エンジン経由のトラフィックが多いウェブサイトであるほど、自分が担当しているサイトが急にペナルティになって検索順位が下がってしまうのではないか?と言う漠然とした不安や心配を抱えているウェブ担当者も多いと思います。

被リンク調査のため、Googleウェブマスターツールからサンプルリンク(被リンクのURL一覧)を取得できますが、ダウンロードできるファイルにはURLが列挙されているだけで何の情報も付加いないため扱いに困ります。

サンプルリンクを元にペンギンアップデートによるペナルティを回避するため、「どのページにSEOキーワードを含んだアンカーテキストがあるのか」を抽出し否認ファイルにまとめて申請する手順にしたいのですが、サンプルリンクの数は数万件に及ぶ事もあり、この抽出作業を手作業で行っていては、いつ終わるのか分からない終わらない作業になってしまいます。

本記事ではペナルティリスク回避のため、SEOキーワードを含んだアンカーテキストを抽出する方法、類似するドメインの抽出方法を紹介します。実際に動作するソースコードを含むので、分からない所があれば社内のシステム担当者やプログラマーに本記事を紹介して相談してみて下さい。

※サンプルコードはrubyで記述しています。

URL一覧からSEOキーワードを含んだアンカーテキストが存在するページを抽出する

ペンギンアップデートは、ブラックハットSEOと呼ばれる主にテキストリンクで検索順位を上げようとしていたサイトにペナルティを与えるGoogleのアルゴリズムです。よってページ内に自サイトへのSEOキーワードが含まれるリンクがあるかを抽出し、それを否認申請する事がリスク回避の第一歩になります。(否認申請の方法はGoogleウェブマスターツールヘルプに説明がありますので省略します)

以下サンプルコードは、ページ内にペナルティリスクのあるSEOキーワードを含んだ被リンクがあるかを抽出します。HTMLパーサーのNokogiri を利用しているため、事前にgemインストールが必要です。

インストール:gem install nokogiri –no-ri –no-rdoc

rubyのソースコードここから—-
require ‘open-uri’
require ‘nokogiri’

# サンプルのため、自サイトを「yahoo.co.jp」とします。
mydomain = “yahoo.co.jp”

# サンプルのため、SEOキーワードを「Yahoo」とします。
keyword = “Yahoo”

# urls はGoogleウェブマスターツールからダウンロード出来るサンプルのリンク一覧です。
# ここではサンプルのため直接URLを記述しています。
urls = [
“http://yahoo-mbga.jp”,
“http://ja.wikipedia.org/wiki/Yahoo!”,
“http://yahoo.bravely.jp/lp/”,
“http://ybb.softbank.jp/support/”,
“https://bizx.jword.jp/”,
]
# URLを実際に取得してパースし、アンカーテキストを発見する。
urls.each{|url|
page = open(url).read
Nokogiri::HTML.parse(page).css(‘a’).each{|a|
if a[:href] =‾ /#{mydomain}/
if a.inner_text =‾ /#{keyword}/
puts “ペナルティリスク検出: #{url}, アンカーテキスト: #{a.inner_text}”
end
end
}
}
—-rubyのソースコードここまで

2015/5/2日時点で上記のサンプルコードを動かすと以下の実行結果になります。

実行結果ここから—-
ペナルティリスク検出: http://yahoo-mbga.jp, アンカーテキスト: Yahoo! JAPAN
ペナルティリスク検出: http://yahoo-mbga.jp, アンカーテキスト: Yahoo!ゲーム
ペナルティリスク検出: http://ja.wikipedia.org/wiki/Yahoo!, アンカーテキスト: Yahoo! JAPAN
ペナルティリスク検出: http://ja.wikipedia.org/wiki/Yahoo!, アンカーテキスト: Yahoo!の歴史、Yahoo! JAPANの歴史
ペナルティリスク検出: http://ja.wikipedia.org/wiki/Yahoo!, アンカーテキスト: Yahoo! JAPAN
ペナルティリスク検出: http://yahoo.bravely.jp/lp/, アンカーテキスト: Yahoo! JAPAN
ペナルティリスク検出: http://ybb.softbank.jp/support/, アンカーテキスト: お気に入りのYahoo! JAPAN IDへの変更
ペナルティリスク検出: http://ybb.softbank.jp/support/, アンカーテキスト: Yahoo!オークション
ペナルティリスク検出: http://ybb.softbank.jp/support/, アンカーテキスト: Yahoo! BB会員専用ページ
ペナルティリスク検出: https://bizx.jword.jp/, アンカーテキスト: Yahoo!ビジネスエクスプレス
ペナルティリスク検出: https://bizx.jword.jp/, アンカーテキスト: Yahoo!ビジネスエクスプレス
ペナルティリスク検出: https://bizx.jword.jp/, アンカーテキスト: Yahoo!カテゴリ
ペナルティリスク検出: https://bizx.jword.jp/, アンカーテキスト: Yahoo!ビジネスエクスプレス
—-実行結果ここまで

例えば変数mydomainが自社の「債務整理」を目的したサイトURLで、変数keywordが「債務整理 弁護士」に置き換えると、自社サイト宛てに「債務整理 弁護士」で存在する被リンクを検出できるかと思います。

抽出された全てのリンクに問題がある訳ではありませんのでご注意下さい。抽出結果を見て、問題があるサイトやドメインであれば否認申請に回すようにしてもらえればと思います。

URLの一覧から類似しているドメインを抽出する

過去に大量のリンク集に登録していた、サテライトサイトからテキストリンクを受けていた等のSEO業者による機械的に作られたリンクファームから被リンクを受けていると、Googleウェブマスターツールからダウンロードしたサンプルリンクに似たようなドメイン名がたくさん並んでいる事があります。

このような場合、URLからドメインを抽出し、ドメイン名の類似度を測る事で怪しいと思われるドメインを一括で抽出が出来ます。

以下サンプルコードでは、URL一覧からドメイン名の類似度を測って、類似するドメイン名の上位2件を表示します。文字列の類似度算出にtrigram を利用しているため事前にgemインストールが必要です。

インストール:gem install trigram –no-ri –no-rdoc

rubyのソースコードここから—-
require ‘trigram’

# urls はGoogleウェブマスターツールからダウンロード出来るサンプルのリンク一覧です。
# ここではサンプルのためリンク集やサテライトサイトでありそうなドメイン名を例として登録しています。
urls = [
“http://super-link-a.com/link-a.html”,
“http://super-link-a.com/link-b.html”,
“http://super-link-b.com/link-a.html”,
“http://awesome-link-a.com/link-a.html”,
“http://awesome-link-b.com/link-a.html”,
“http://yahoo-mbga.jp/link-a.html”,
“http://satellite-blog-a.com/link-a.html”,
“http://satellite-blog-b.com/link-a.html”,
“http://satellite-word-a.com/link-a.html”,
“http://satellite-word-b.com/link-a.html”,
“http://yahoo.bravely.jp/lp/”,
“http://ybb.softbank.jp/support/”,
“https://bizx.jword.jp/”,
]

# ドメインの抽出
domains = urls.collect{|url|
url.gsub(/http[s]?:¥/¥//, “”).split(/¥//).first
}.uniq # ドメインの抽出
# ドメインの類似度を算出
domain_scores = {}
domains.each{|a|
domains.each{|b|
next if a == b
next if (score = Trigram.compare(a, b)) == 0
domain_scores[a] ||= []
domain_scores[a] << [b, score]
}
}
# 類似しているドメイン上位2件を表示
domain_scores.each_pair{|domain, scores|
scores = scores.sort{|a, b| b[-1] <=> a[-1]}[0..1]
puts “#{domain}の類似ドメインは”
scores.collect{|other_domain, score|
puts ” > #{other_domain}:#{score.round(3)}”
}
}.size
—-rubyのソースコードここまで

上記のサンプルコードを動かすと以下の実行結果になります。

実行結果ここから—-
super-link-a.comの類似ドメインは
> super-link-b.com:0.647
> awesome-link-a.com:0.429
super-link-b.comの類似ドメインは
> super-link-a.com:0.647
> awesome-link-b.com:0.429
awesome-link-a.comの類似ドメインは
> awesome-link-b.com:0.684
> super-link-a.com:0.429
awesome-link-b.comの類似ドメインは
> awesome-link-a.com:0.684
> super-link-b.com:0.429
yahoo-mbga.jpの類似ドメインは
> yahoo.bravely.jp:0.19
> bizx.jword.jp:0.048
satellite-blog-a.comの類似ドメインは
> satellite-blog-b.com:0.714
> satellite-word-a.com:0.5
satellite-blog-b.comの類似ドメインは
> satellite-blog-a.com:0.714
> satellite-word-b.com:0.5
satellite-word-a.comの類似ドメインは
> satellite-word-b.com:0.714
> satellite-blog-a.com:0.5
satellite-word-b.comの類似ドメインは
> satellite-word-a.com:0.714
> satellite-blog-b.com:0.5
yahoo.bravely.jpの類似ドメインは
> yahoo-mbga.jp:0.19
> bizx.jword.jp:0.042
ybb.softbank.jpの類似ドメインは
> yahoo-mbga.jp:0.043
> bizx.jword.jp:0.043
bizx.jword.jpの類似ドメインは
> satellite-word-a.com:0.074
> satellite-word-b.com:0.074
—実行結果ここまで

super-link-b.com, awesome-link-a.com等の類似しているドメインに1に近い大きい数字が振られている事が分かります。類似ドメインは数件調査した後に、全て同じと判断してまとめて処理してしまって問題ないかも知れません。

まとめ・要約

GoogleウェブマスターツールからダウンロードできるサンプルURLの一覧から、問題となるURLとドメインを抽出する具体的な方法を紹介しました。本記事のように簡単なプログラムを用いてリンク精査を部分的に簡略化できるケースも多いと思います。

Googleウェブマスターツールで検出されない被リンク情報や、既に存在していない過去のリンクを調べる方法として、Moz社提供のOpen Site Explorer、Majestic社提供のSite Explorer、ahrefs社のSite Explorerがあります。実業務で利用する際には調査量的に無料プランではなく有料プランでの契約が必要になるかと思いますが、被リンク監査やペナルティリスク低減のために役に立つツールです。

ただ、単発の被リンク調査のために契約がするのは難しい場合があるかと思います。特にAPI利用したい場合は月額料金が高くなりますので、契約がさらに難しくなると思います。このような場合は、これら被リンク調査ツールと契約し被リンク調査を行っているSEOベンダーに相談し、被リンク精査業務を代行してもらう方法があります。

2015/3/30にMoz社に被リンクのスパムスコアという新しい指標が追加され、2015/4/22にはMoz API経由で利用できるようになりました。本記事ではアンカーテキストの実在という1つの指標でスパム性を評価していますが、Moz社にスパムスコアは17の指標によってスパム性を判断しています。より細かい指標を元に判断したい場合は、Moz社にスパムスコアが参考になるかも知れませんのでご検討下さい。
seo