太陽がまぶしかったから

C'etait a cause du soleil.

当ブログで配布していた「あわせて読みたいウィジット」がSEOスパムになっている可能性があるため差し替えをお願いします

最新版

「あわせて読みたいウィジット」リコールのお願い

 はてなブログ向けの勝手ツールである『あわせて読みたいウィジット』について多くのブログから利用して頂いてありがとうございます。本スクリプトにつきまして、作成当初は想定していなかった幾つかの問題が発生しておりますため、お手数ですが新バージョンへの差し替えをお願いさせて頂きます。これから新しく利用を開始される方についても、こちらのスクリプトの利用をお願いします。

  • クレジットリンクによってGoogleからスパム判定されている可能性があり、またコピーライト表記を書き換えられたり、エントリ本文に使われて更新のたびに言及通知が来るといったトラブルの火種になってきたためクレジットリンクを削除します
  • クライアントサイドで2種類のRSSを非同期に全文取得しており通信量が大きくなっていたため、サーバーサイドで本文情報を削除したRSSを合成して最低限の通信とします
  • グローバル変数が多くて他のスクリプトと干渉する可能性があるため関数化しています

 一番の問題はコピーライトのリンクにまつわる部分です。当初は使いたいと思った人への導線を作っておくのが親切だろうと『ブログパーツのクレジットリンクには、rel=”nofollow”を入れる』を参考に「rel="nofollow"」でリンクを付けていたのですが、問題になる事が増えてきたというのが正直なところです。

 このため既に独自改造していて新しいスクリプトを使うのが困難である場合についても、お手数ですがコピーライトのリンクを消す作業についてはお願いさせて頂きたいです。変数宣言の「var copyRIGHT = "〜"」を「var copyRIGHT=""」(空文字)にして頂ければ問題ありません*1

 『トラックバック』や『カテゴリ別あわせてよみたい』などの派生スクリプトを利用されている方も同様にクレジットリンクを消して頂ければと存じます。それぞれの最新版につきましては以下の通りです。お手数をおかけして申し訳ありませんが、ご対応をお願いします。

新あわせて読みたいのウィジットの設置

f:id:bulldra:20140814125828p:plain

 以下のスクリプトをデザイン画面における記事下の部分に配置します*2。本文エントリに使うのは非推奨だったのですが言及通知が来なくなるので、こちらのスクリプトであれば問題はありません。

f:id:bulldra:20140814125843p:plain

 CSSやブログのURL等については各自変更をお願いします。最近はスマートフォンのフッタに公式の人気記事が表示されるようになったので、スマートフォン側での動作を推奨しませんが、スマーフォン表示でも使う場合には「スマートフォンタブ」で「PCと同じHTMLを表示する」を選択するか、スマートフォン用の記事下にもコピーします。

<span id="relate_entry" class="hatena-module-foot">Now Loading...</span>
<script src="https://www.google.com/jsapi"></script>
<script type="text/javascript">

//ブログURL
var blogURL=""
//ブログ名
var blogTITLE = "";
//表示件数
var maxNUM = 4;
//サムネイル表示
var isCreateThumbnail = true;
//ブックマーク数表示
var isCreateBookmarkNum = true;
//ツイート数表示
var isCreateTweetNum = false;
    
google.load("feeds", "1");
var entries = new Array();
    
/* 配列にシャッフル機能を追加 */
Array.prototype.shuffle = function() {
    var i = this.length;
    while(i){
        var j = Math.floor(Math.random()*i);
        var t = this[--i];
        this[i] = this[j];
        this[j] = t;
    }
    return this;
}

function initializeRealateEntry() {
    var relRssUrl = 'http://pipes.yahoo.com/pipes/pipe.run?'
    + '&site=' + blogURL
    + '&entry=' +  document.location.href
    + '&_id=00b601cfe3bfb6e4ac1db6cfd7b70bf6&_render=rss';
    
    console.log(relRssUrl)
    var feed = new google.feeds.Feed(relRssUrl);
    feed.setNumEntries(37);
    
    feed.load(function(result) {
      if (result.error || result.feed.entries.length == 0) {
        return;
      } else {
        createRealateHtml(result.feed.entries);
      }
    });
}

function createRealateHtml(entries) {
    /* 1件もないなら終了 */
    if (entries.length == 0) {
        return;
    }
    
    var resultEntries = new Array();
    resultEntries.push(entries[0]);
    
    if (entries.length == 1) {
        return;
    }
    entries.shift(1);
    
    /* シャッフル */
    entries = entries.shuffle();
    for(var x = 0; x < entries.length && resultEntries.length < maxNUM; x++) {
        entries[x].title = entries[x].title.replace('- '+blogTITLE , '')
        resultEntries.push(entries[x]);
    }
    
    if (resultEntries.length == 0) {
        return;
    }
    
    /* 指定数のHTMLを生成 */
    var resultHtml = "";
    for(var x = 0; x < resultEntries.length; x++) {
        var entry = resultEntries[x];
        
        var html =createThumbnail(isCreateThumbnail, entry.link)
        + createLink(entry.title, entry.link)
        
        if(!isCreateThumbnail) {
            html = '<li>'
            + html + " "
            + createBookmarkNum(isCreateBookmarkNum, entry.link)
            + createTweetNum(isCreateTweetNum, entry.link)
            + '</li>';
        } else {
            html = '<div class="intro-article-wrapper" style="width: 100%; font-size:110%; '
            + 'overflow:auto; margin-bottom:10px;>'
            + html + "<br />"
            + createBookmarkNum(isCreateBookmarkNum, entry.link)
            + createTweetNum(isCreateTweetNum, entry.link)
            + '</div>';
        }
        resultHtml += html;
    }
    if(!isCreateThumbnail) {
        resultHtml = '<div style="margin-left:30px; font-size:90%">'
        + '<ul style="list-style-type:circle">' + resultHtml + '</ul></div>';
    }
    var container = document.getElementById("relate_entry");
    container.innerHTML = '<h3>あわせて読みたい</h3>' + resultHtml;
}

function createThumbnail(isExe, entryLink) {
    if(!isExe) {
        return "";
    } else {
        var result = '<a class="intro-article-img" href="'
        + entryLink
        + '" style="float:left;" rel="nofollow">'
        + '<img src="http://capture.heartrails.com/150x130/shadow?'
        + entryLink
        + '" align="left" width="150" height="130" alt="'
        + entryLink  + '">'
        return result;
    }
}

function createLink(entryTitle, entryLink) {
    var result = '<a class="intro-article-title" href="'
    + entryLink
    + '" rel="nofollow">'
    + entryTitle
    + '</a>'
    return result;
}

function createBookmarkNum(isExe, entryLink) {
    if(!isExe) {
        return "";
    }
    var result = '<a href="http://b.hatena.ne.jp/entry/'
    + entryLink
    + '" rel="nofollow" target="_blank"><img src="http://b.hatena.ne.jp/entry/image/'
    + entryLink
    + '"style="opacity:0.8;" /></a>'
    return result;
}

function createTweetNum(isExe, entryLink) {
    if(!isExe) {
        return "";
    }
    var result = ' <a href="http://tweetbuzz.jp/redirect?url='
    + entryLink
    + '" rel="nofollow"  target="_blank">'
    + '<img src="http://tools.tweetbuzz.jp/imgcount?url='
    + entryLink
    + '"/></a>';
    return result;
}

google.setOnLoadCallback(initializeRealateEntry);
</script>

Googleからのペナルティの可能性について

 過去にあったGoogle八分問題からは回復してたのに、また検索流入が10分1ぐらいに減っています。このウィジットの本家ページすら圏外。パンダアップデートについても平行して対策していますが、今のところ効果はありません。もちろん生成リンクには「rel="nofollow"」を付けていたし、そもそもJavaScript生成されたリンクは評価対象にならないと当時は考えていたのですが、現在のGoogleはJavaScriptを読み取ってリンクを評価できるようになっています。

 ウェブマスターツールを見ても、以下のようにウィジェットから張られたリンクを認識しており、特定ドメインからの大量リンクを「不自然なリンク」とみなしていてもおかしくありません。また「適切な言葉を使ってリンクする」というガイドラインにも違反しており、「rel="nofollow"」を付けていれば無敵という見解があるわけでもありませんでした。

 手動ペナルティは発生しておらず、『Panguin Tool | Technology by Barracuda Digital』で確認すると最近の「ペイデイローン3.0」の自動ペナルティに引っかかった可能性が濃厚なグラフになっています。これまでは何の問題がなくてもアルゴリズムの変更で「クロ」になってしまった可能性があるということですね。旧ドメインの深い階層のエントリに 「id:bulldra」というアンカーテキストで飛ぶようなリンクが大量に自動生成されているため、いわゆる「アンカーテキストペナルティ」を疑っています。

今回のGoogle順位変動をもたらしたとされるもう一つの原因が、ペイデイローン・アップデートです。これは、消費者金融関連やアダルト関連などのワードで検索した結果画面に、スパムサイトがたくさん出てきていたのを改善するためのアルゴリズムアップデートです。

ペイデイローン(Payday Loan)とは、アメリカでよくみられる消費者金融のことですが、米Googleでは、この単語で検索すると、スパムサイトが大変多く出てきていたようで、それらのスパムサイトを一掃するためにできたのが、この「ペイデイローン・アルゴリズム」です。

今では消費者金融だけでなく、あらゆる検索キーワードでのスパムサイトを一掃する目的でこのアルゴリズムが適用されていますが、通称として今も「ペイデイローン」という言葉が用いられています。(Googleが名づけた正式名称ではないそうです) ペイデイローンアルゴリズムが標的とするのは、自動的にコンテンツとか外部リンクとかが増え続けるようなスパム的手法を実際に使っているサイトたちです。

  パンダアップデート4.0とペイデイローン・アルゴリズム | SEO Packの最新SEO情報ブログbyディーボ パンダアップデート4.0とペイデイローン・アルゴリズム | SEO Packの最新SEO情報ブログbyディーボ

 「ペイデイローン3.0」の特性とウィジットの動作を重ねると「自動的にコンテンツとか外部リンクとかが増え続けるようなスパム的手法」と認識されてペナルティを受けたという説明がついてしまうような気もします。ページランクを渡さない作りになっているのでSEOとしての価値はないし、スパムの認識もなかったのですが「自動的に増える宣伝」と言われればグレーゾーンです。

まとめ

 SEOに詳しい方の見解もお聞きしたいところですが、どうしたって確証を持つのは難しいため、出来ることからしていこうと考えています。今のところは他サイトでの問題は観測されてませんが、今後は使用者側のリンクジュースにも悪影響がでないとも言い切れませんし、早めに憂いを断っておきたい所でもあります。拙い状態で作ったものが広がってしまい申し訳ないです。

 大変お手数ですがバージョンアップ作業をお願いさせて頂きます。今回の修正についてのご不明の点がありましたらbulldra@gmail.comまでお願いします。ご迷惑をおかけして申し訳ありませんが、ご対応をお願いします*3

いちばんやさしい新しいSEOの教本 人気講師が教える検索に強いサイトの作り方

いちばんやさしい新しいSEOの教本 人気講師が教える検索に強いサイトの作り方

追記

 「rel=nofollow」がないバージョンが見つかりました。

*1:僕の考えた最強の「あわせて読みたい」ブログパーツ(はてなブログ向け) - 太陽がまぶしかったから 』に当時の修正版を配置しております

*2:将来的には外部サーバーにJSファイルを置いて、各ブログからはリンクするだけの作りにすべきだろうと思っています。

*3:個別にも連絡させて頂きます。