【最短5分】早くGoogleインデックスさせる方法。feedとPabsubhubbubの話!

SEO対策実例・コラム
SEO検証
WEB制作・開発実例・コラム
2017.07.27

以下に早くページの追加や更新をgoogleに知らせるかは
SEO(検索エンジン最適化)にとって重要な要素の一つです。

この記事では、googleに自身のサイトを早くインデックス化してもらうためには
どうしたら良いのか?についてwordpress以外のサイトにおいて
これらを実施するためにPHPを使用してフィードとpubsubhubbub
の実装方法について簡単にまとめていきたいと思います。



まずはフィードを作成!

そもそも何故フィードを作成するのでしょうか?

今回の目的は、googleの検索結果により早く自身のサイトを表示してもらう(=インデックス化)ことです。

その為にはpubsubhubbub(後述でまとめております)を使用するようにとgoogleのマット・カッツ氏も推奨しております。

 参考:[海外SEO情報ブログ]

しかし、どうやらこのpubsubhubbubなのですが、
利用するためにはフィード(のURL)が必要なようです。

という訳でまず初めに自身のサイトのフィードを作成する必要があるということになります。


早速フィードを作成していきましょう!

まずは作成するフィードについて確認します。

フィードとはウェブサイトやブログの中身(コンテンツ)を読んでもらうために配信出来る形に編集したファイルのフォーマットを指します。
このフィードのフォーマットには”RSS1.0″や”RSS2.0″、”atom1.0″などのいくつかの種類があります。

今回はatomフィードの作成についてまとめていきます。

フィートとは何かなんとなくわかったところでフィードの中身を確認します。
atomフィードのフォーマットを確認します。

<!-- 以下、必須項目の一例です-->
<feed xmlns='http://www.w3.org/2005/Atom' xml:lang='ja'>
<!--フィードのタイトル-->
<title type='text'>PHP & JavaScript Room:更新情報</title>
<!--自身のサイトのURL-->
<link>http://sample.co.jp/</link>
<!--HubサーバーのURL-->
<link rel="hub" href="http://pubsubhubbub.appspot.com/" />
<!--atom.xmlのURL=フィードのURL-->
<link rel="self" type="application/atom+xml" href="http://example.co.jp/atom.xml" />
<!--フィードの最終更新日時-->
<updated>2008-06-11T15:30:59+0900</updated>
<author>
	<name>pecopla</name>
        <email>info@pecopla.net</email>
</author>
<!--以下はページの情報-->
<entry>
        <!--ページまたは記事のタイトル-->
	<title type="html"><!&#91;CDATA&#91;記事タイトル&#93;&#93;></title>
        <!--ページのURL-->
	<link href="http://open01.sample-link.info/" rel="alternate"/>
        <!--ユニークID-->
	<id>urn:uuid:xxxxc05938b9aed05598e71eada4d55d</id>
        <!--このエントリーの概要=今回はディスクリプション-->
	<summary type="html"><!&#91;CDATA&#91;ディスクリプション&#93;&#93;></summary>
	<updated>2017-07-26T12:47:29+09:00</updated>
	<author>
		<name>pecopla</name>
        	<email>info@pecopla.net</email>
        </author>
</entry>
</feed>

atomフィード(xmlファイル)のフォーマットを確認します。

では、フィードの作成をといきたいのですが、イチから作り込むには時間が掛かるので
PHPでフィードを作成する上で便利なライブラリがありますので、そちらを使用していきます。

PHPにはフィードを作成するための、様々なライブラリがありますが今回は以下のサイトのライブラリを拝借したいと思います。

[PHP ARCHIVE]

ライブラリをダウンロードしたところで、下準備は完了です。
では早速フィードを作成してみましょう!

/*request.php*/
//ライブラリ内のPHPファイルをインクルード
include 'AtomFeed.php';
include 'AtomEntry.php';

//自サイトのURL
$url = 'http://localhost/';
//タイムゾーン
date_default_timezone_set( 'Asia/Tokyo' );

//ライブラリを使用してフィードを作成
$atom = new AtomFeed(['xml:lang' => 'ja']);
$atom->title('サンプルHTML');
$atom->link($url);
$atom->link($url.'atom.xml', 'self');
$atom->id('urn:uuid:'.md5(uniqid(mt_rand(), true)));
$atom->updated(date(DATE_ATOM));
$atom->author([
              'name' => 'pecopla',
              'email' => 'info@pecopla.net'
              ]);
//ここからエントリー
$entry = new AtomEntry();
$entry->title('記事タイトル');
$entry->link($url);
$entry->id('urn:uuid:'.md5(uniqid(mt_rand(), true)));
$entry->summary('サンプルサイトのディスクリプションです。');
$entry->updated(date(DATE_ATOM));
$entry->author([
            'name' => 'pecopla',
               'email' => 'info@pecopla.net'
               ]);
$atom->addEntry($entry);

header('Content-Type: application/atom+xml');
$atoms = $atom->saveXml();
file_put_contents('atom.xml', $atoms);

これでフィードを生成する処理が完成したので実際に動かして出力結果を確認します!

作成したatomフィードを確認!

上記のPHPを実行すると同一フォルダ内に”atom.xml”が作成されているはずです。
内容を確認してみましょう!
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
  <title type="html"><!&#91;CDATA&#91;サンプルHTML&#93;&#93;></title>
  <link href="http://localhost/"/>
  <link rel="hub" href="http://pubsubhubbub.appspot.com/" />
  <link type="application/atom+xml" href="http://localhost/atom.xml" rel="self"/>
  <id>urn:uuid:f8d97b7a3b000b1a9235bb650a6a4480</id>
  <updated>2017-07-27T17:22:26+09:00</updated>
  <author>
    <name>pecopla</name>
    <email>info@pecopla.net</email>
  </author>
  <entry>
    <title type="html"><!&#91;CDATA&#91;記事タイトル&#93;&#93;></title>
    <link href="http://localhost/" rel="alternate"/>
    <id>urn:uuid:0aa22ba89e4405441804497d2c4c3b50</id>
    <summary type="html"><!&#91;CDATA&#91;サンプルサイトのディスクリプションです。&#93;&#93;></summary>
    <updated>2017-07-27T17:22:26+09:00</updated>
    <author>
      <name>pecopla</name>
      <email>info@pecopla.net</email>
    </author>
  </entry>
</feed>

正常にフィードが作成されたようです。

次はこのフィード(正確にはフィードのURL)を使用してpubsubhubbubへ
リクエスト送信する処理について書いていきます。

次にpubsubhubbubを実装!

pubsubhubbubとは何でしょうか?

SEOを気にされている方であれば”pubsubhubbub(パブサブハバブ)”って言葉を
聞いたことがあるかと思います。

では、この”pubsubhubbub”がインデックス化の加速にどのような役割を果たしているのでしょうか?

pubsubhubbubは下記の3つの要素で構成されています。

①Publisher=コンテンツなどのフィード配信者(サイト/メディア運営者)
②Subscriber=更新を受け取るフィード購読者(Google)
③Hub=PublisherとSubscriberの仲介者(Hubサーバー)

この3つの要素を組み合わせた一連のやり取りをPubsubhubbubと呼んでいます。

そして、今回のインデックス化の加速に重要なのが3つ目のHub(=Hubサーバー)となります。 Googleが管理しているHubサーバーへリクエストを送信することによって
定期的なクローラーが来るのを待たず、自分からGoogleのクローラーを
呼び込むことができます。

インデックス化が加速するだけでなく、クローラーを即座に呼ぶことによって
悪質なスクレイピングも防ぐこともできます。


pubsubhubbubを実装していきましょう!

それでは、Pubsubhubbubリクエスト送信処理について書いていきます。

GoogleのHubサーバー(=http://pubsubhubbub.appspot.com/)へリクエストを
送信するにはPOSTメソッドでないといけません。

また、Header情報のコンテンツタイプを“Content-Type: application/x-www-form-urlencoded”で指定します。

最後にURLエンコードされたフィードのURLが必要です。
上記の規約を守り実装していきます。

/*pub.php*/
function RequestHub($feed){
    //GooleのHubサーバー
    $url = 'http://pubsubhubbub.appspot.com/';
    //postデータ hub.urlは"フィードのURL"
    $post = array(
                  'hub.mode' => 'publish',
                  'hub.url' => $feed
                  );
    $ch = curl_init();
    //curlを使用してPOST送信
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    //リクエスト実行
    $response = curl_exec($ch);
    //戻り値を取得
    $chinfo = curl_getinfo($ch);
    echo "ステータスコード : ".$chinfo['http_code']."<br />";
    //戻り値のHTTPコードが"204"だったらtrue
    $res = (204 == $chinfo['http_code']);
    curl_close($ch);
    return $res;
}

//フィードのURL
$url = 'http://localhost/atom.xml';
echo "リクエストするURL : ".$url."<br />";
//結果の判定
if (RequestHub($url)) {
    echo "リクエスト処理しました";
} else {
    echo "リクエスト処理出来ませんでした";
}


Pubsubhubbubへのリクエスト処理が完成しました!

pubsubhubbubの実装を確認!

上記で作成したPubsubhubbubへのリクエスト処理を実行してみます。



リクエスト処理が無事成功しました!

最後にフィードとpubsubhubbubを連携!

最後にatomフィードを作成してPubsubhubbubへリクエストを送る一連の流れを
連続して行えるように処理を書き換えます。
/*request.php*/
//ライブラリ内のPHPファイルをインクルード
include 'AtomFeed.php';
include 'AtomEntry.php';
require_once 'pub.php';

//自サイトのURL
$url = 'http://localhost/';
//タイムゾーン
date_default_timezone_set( 'Asia/Tokyo' );

//ライブラリを使用してフィードを作成
$atom = new AtomFeed(['xml:lang' => 'ja']);
$atom->title('サンプルHTML');
$atom->link($url);
$atom->link($url.'atom.xml', 'self');
$atom->id('urn:uuid:'.md5(uniqid(mt_rand(), true)));
$atom->updated(date(DATE_ATOM));
$atom->author([
              'name' => 'pecopla',
              'email' => 'info@pecopla.net'
              ]);
//ここからエントリー
$entry = new AtomEntry();
$entry->title('記事タイトル');
$entry->link($url);
$entry->id('urn:uuid:'.md5(uniqid(mt_rand(), true)));
$entry->summary('サンプルサイトのディスクリプションです。');
$entry->updated(date(DATE_ATOM));
$entry->author([
               'name' => 'pecopla',
               'email' => 'info@pecopla.net'
               ]);
$atom->addEntry($entry);

header('Content-Type: application/atom+xml');
$atoms = $atom->saveXml();
file_put_contents('atom.xml', $atoms);

//フィードのURL
header('Content-Type: text/html; charset=UTF-8');
echo "リクエストするURL : ".$url."<br />";
$url = 'http://localhost/atom.xml';

//pubsubhubbubリクエスト
$pub = new pubsub();
//結果の判定
if ($pub->RequestHub($url)) {
    echo "リクエスト処理しました";
} else {
    echo "リクエスト処理出来ませんでした";
}

/*pub.php*/
class pubsub {
    function RequestHub($feed){
        //GooleのHubサーバー
        $url = 'http://pubsubhubbub.appspot.com/';
        //postデータ hub.urlは"フィードのURL"
        $post = array(
                      'hub.mode' => 'publish',
                      'hub.url' => $feed
                      );
        $ch = curl_init();
        //curlを使用してPOST送信
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
        curl_setopt($ch, CURLINFO_HEADER_OUT, true);
        //リクエスト実行
        $response = curl_exec($ch);
        //戻り値を取得
        $chinfo = curl_getinfo($ch);
        echo "ステータスコード : ".$chinfo['http_code']."<br />";
        //戻り値のHTTPコードが"204"だったらtrue
        $res = (204 == $chinfo['http_code']);
        curl_close($ch);
        return $res;
    }
}

これでサイトを作成or更新した時に、”request.php”を実行すれば
atom.xmlが作成され、pubsubhubbubへ
リクエストまでの一連の流れを行うようになりました。

因みに余談ですが、私が実際にこの処理を使用してサイトの作成を
pubsubhubbubリクエストしたところ、1時間以内にトップページの
インデックス化を確認できました!早いですね。

今回のまとめ!

今回はwordpress以外のサイトにおいて、Googleに爆速でインデックスする処理の
実装方法についてまとめてみました。

Googleのインデックス化を素早く行うことで悪質なスクレイピングによる記事の盗用や
検索結果へ出てくる速度があがるため、ユーザーに早くコンテンツを見てもらえます。
これはSEO(検索エンジン最適化)にとって重要な要素の一つであるといえます。
ぜひ、wordpressを導入していないサイトでpubsubhubbub未対応なのであれば
導入してみることをおすすめいたします。

コラム

最新コラム

人気コラム

ご質問やご相談などお気軽にお問い合わせください。

お電話でのお問い合わせはこちら

03-5829-9912

受付時間:平日10:00~19:00(土・日・祝日を除く)