Webサービス&SEO

SEO対策?のために相互RSSリーダー(他サイトのRSSを表示)を自作

RSS

2ちゃんねるまとめサイトなどによく設置されている相互RSS。他のサイトのRSSを読み込んで表示して、アクセスを送りあい、お互いにアクセスアップを図ろうとする仕組みです。

簡単に設置、管理できる無料ツールがライブドアなどから提供されており、かなり優秀なのですが、

  • 広告が表示されてしまう
  • HTMLが触れない
  • 表示が遅い

などのデメリットがあります。まぁ無料なので当たり前ですが。。。

広告が表示されてしまうなどは良いのですが、表示が遅くなってしまうのとHTMLが触れず、rel=”nofollow”を記載できない、表示が遅いなどは検索エンジン対策SEOに響いてくるので、シンプルな相互RSSリーダーを作成してみました。

設定の備忘録含めて紹介です。

この相互RSSリーダーのデメリット

いきなりデメリットというのもアレですが、もっときちんと作れば良いのですが、最低限動くように作っています。動作条件としてPHPが動く、cronが設定できる、ってのが必要です。なので、アメブロやFC2などの無料ブログ系は厳しいかと思います。。。

以下のPHPでは時間やサイト名などは表示せず、記事名だけです。

あと、普通のRSSリーダーのように更新時間順になりません。というか、していません。。もちろん、最新のRSSを取得することはできます。

この相互RSSリーダーのメリット

  1. もちろん広告なし
  2. 更新時間順ではないので、優先するサイトを上部に表示させることができる
  3. HTMLに標準でrel=”nofollowを入れているので、リンクジュースを渡さず、SEOに良い
  4. 定期的にPHPでHTMLを生成し、それをAjaxで読みこむので早いし、非同期なので他の表示を妨げない

相互RSSリーダーの設定手順

  1. ドメイン直下にでも適当にディレクトリ(フォルダ)作成(例:  rss )
  2. 以下で紹介するrss.phpを設定(簡単)
  3. 作成したディレクトリにrss.phpを設置
  4. phpの動作確認
  5. jQueryで表示設定
  6. cron設定

ドメイン直下にでも適当にディレクトリ(フォルダ)作成

適当にドメイン直下にでもディレクトリ(本サイトであれば debate.co.jpのアクセス先)を作成。わかる人はもちろん他の場所でもOKです。適当に説明のためにrssとします。

rss.phpを設定(簡単)

以下のPHPを設置。設定箇所は、以下のとおり。

  1. 5行目あたりのRSSのリスト(この順番にRSSが表示されます)
  2. 16行目あたりのnum_of_data(ひとつのRSSから表示したい記事の件数)
  3. 43行目あたりのfile_put_contentsファイル出力先(現状はCent OSの場合で、ディレクトリは適宜変更してください。)

[php]
<?php

//取得するRSSのリスト
$rssList = array(
"https://debate.co.jp/feed/",
"RSSのURL"
);

$outdata = "<ul>\n";

for($n=0;$n< count($rssList )  ;$n++){
//URL設定
$rssdata = simplexml_load_file("$rssList[$n]");

// 件数設定
$num_of_data = 1;

for ($i=0; $i<$num_of_data; $i++){

if($rssdata->channel->item[$i] != null){
$myEntry = $rssdata->channel->item[$i];
$rssDate = $myEntry->pubDate;
$myTitle = $myEntry->title; //タイトル取得
$myLink = $myEntry->link; //リンクURL取得

//出力内容(CSSOK)
$outdata .=  ‘<li><a href="’ . $myLink . ‘" target="_blank" rel="nofollow">’ . $myTitle . ‘</a></li>’ . "\n";
}else{
$myEntry = $rssdata->item[$i];
$rssDate = $myEntry->pubDate;
$myTitle = $myEntry->title; //タイトル取得
$myLink = $myEntry->link; //リンクURL取得

}

}
}

$outdata .= ‘</ul>’;

//出力先
file_put_contents("/var/www/htmlドメイン名/rss/rss.html", $outdata);

function _file_put_contents($fname, $data) {
if ($fp = fopen($fname, ‘c’)) {
flock($fp, LOCK_EX);
ftruncate($fp, 0);
fputs($fp, $data);
fclose($fp);
}
return (bool)$fp;
}

?>
[/php]

なにをやっているかというと、RSSを取得して整形して、作成したディレクトリにrss.htmlというhtmlファイルを作成しています。

このphpファイルを1時間に一度まわしてrss.htmlを生成し、それをjQueryで読み込んで表示させようということです。

作成したディレクトリにrss.phpを設置

rssディレクトリにrss.phpを設置します。

rss.phpの動作確認

sshなどで接続してコマンドで確認します。

php /var/www/htmlドメイン名/rss/rss.php

ドメイン名/rss/rss.htmlにアクセスしてRSSがリスト表示されれば成功です。

jQueryで表示設定

表示したい箇所に

<div class="rss_road"></div>

を設置します。

設置箇所のどこか(body最下部とかで良いです。)に下記jQueryコードを記述します。WordPressを想定し$でなくjQueryになっています。

<script type="text/javascript">
jQuery(function() {
        jQuery.ajax({
               type: 'GET',
               url: 'http://ドメイン名/rss/rss.html',
               dataType: 'html',
               success: function(data) {
                   jQuery('.rss_road').append(data);
               },
               error:function() {
               }
        });
});
</script>

url部分は前述のrss.htmlの出力先を指定してください。

先ほどのphpを実行した際に生成されたrss.htmlをjQueryで読みこみ、rss_road部分に表示するように指示しています。

cron設定

rss.phpを定期的に実行して、新しいRSSを取得⇒htmlに出力という設定をします。

sshなどでログインし、crontabを編集します。

crontab -e

キーボード i を押して編集モードにして、

0 */1 * * * /usr/bin/php /var/www/html/ドメイン名/rss/rss.php

を加筆、 ESCAPEして :wqで上書き保存です。上記の場合は、1時間に一度、0分の状態で実行してくださいね。という設定。

2時間に一度なら0 */2 * * * 、実行を毎時10分にするなら10 */1 * * *という感じに修正します。

その他

rss.phpやrss,htmlは外部からアクセスさせないようにパーミッションの設定を変えたり、rssディレクトリに.htaccessを置いたり、クロールさせないように設定したり、rss.phpの場所を変えたり、したらもっと幸せかもしれません。

動かない場合は、phpの所有者、パーミッションなどをチェックすると良いかもです。

サーバ負荷をかけないために、RSSのリスト作成をページアクセスごとでなく、定期的に行い、自サーバのhtmlを読み込むことで表示速度も上がるはずです。

表示速度が上がり、外部リンクが減るのでSEOにも良さそうです。

コメント

  1. 匿名 より:

    こんにちは、こちらの記事を試してみたのですが、
    4phpの動作確認までは上手く言ったのですが、5jQueryで表示設定が上手くいきません。
    「url: ‘http://ドメイン名/rss/rss.html’,」の部分を変更するだけで表示されるのでしょうか?

    ワードプレスのバージョンはWordPress 4.3.1でテーマはstinger5です。

  2. debate より:

    匿名さん

    phpの//出力先 部分に記載されている箇所にrss.htmlが生成されているかと思うので、その箇所のURLを記載してみてください。

コメントを残す