Github pagesの更新をWebhooksでPubSubHubbubに通知する
Github pagesでホスティングしているブログサイトの更新情報(Atom/RSSフィード)を、Webhooksを使ってPubSubHubbub(PSHB)ハブに通知してみました。当記事ではその設定方法をまとめてみたいと思います。
photo by Mr. Alex Garcia - Double Cliche on flickr
目次
PubSubHubbubとは
PubSubHubbub(ぱぶさぶはぶばぶ)とは、サイトが更新された事を購読者やGoogleなどへ通知するシステムのことです。
Welcome to the Google PubSubHubbub Hub!
https://pubsubhubbub.appspot.com/
従来は、購読者となるフィード等のサービスが、一定間隔でサイト更新をチェックしていました。それに対してPubSubHubbubでは、Publisher(配信側)とSubscriber(購読者)の間にあるHub(中継サーバー)からサイト更新を購読者へ伝えてくれます。
PubSubHubbubを導入すると素早く検索エンジンにインデックスしてもらえるようになります。
早くインデックスしてもらう事はとても重要です。最近問題となっているのが、スパマーやスクレイピングサイトと呼ばれるコピーサイトです。厄介なことに検索エンジンは、コピーサイトがオリジナルサイトよりも先にインデックスされてしまうと、オリジナルサイトをコピーだと捉えてしてしまいます。つまり、オリジナルサイトが検索エンジンからペナルティを受けてしまうリスクがある訳です。このようなリスクを回避する為にも、Pubsubhubbubは重要な技術です。
Github pagesでPubSubHubbubに更新を通知するには
今回はGithub pagesでサイトを運営している場合において、PubSubHubbubへ更新を通知する方法をまとめます。手順は以下の流れです。
- フィードにhubのURLと自身のフィードURLを追加
- github pagesでwebhooksの設定
それでは詳しく見ていきましょう。
フィードに各URLを追加
まず初めに、フィードに以下のURLを追記します。
- PubSubHubbubハブのURL
- 自身のフィードURL
RSSフィードの場合
RSSフィードでフィードを配信している場合はRDS名前空間にxmlns:rdf
とxmlns:atom
を追記します。更にatom:link
で各URLを追記します。
1 | <rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:atom="http://www.w3.org/2005/Atom" > <atom:link href="自身のサイトに配置したRSSフィードのURL" rel="self" type="application/rss+xml" /> <atom:link rel="hub" href="PubsubhubbubハブのURL(例:http://pubsubhubbub.appspot.com/)" /> |
Atomフィードの場合
Atomフィードでフィードを配信している場合は、link
で各URLを追記します。
1 | <link href="自身のサイトに配置したAtomフィードのURL" rel="self" type="application/atom+xml" /> <link rel="hub" href="PubsubhubbubハブのURL(例:http://pubsubhubbub.appspot.com/)" /> |
Webhooksの設定方法
続いてWebhooksの設定です。
Webhookはリポジトリのcommit
やbuild
等のタイミングで、任意のHTTPリクエストを送信させる事ができる仕組みです。Webhooksにより、静的サイトジェネレータ等で生成したサイトもPubsubhubbubハブに更新を知らせる事ができます。
それでは設定方法を見ていきましょう。Githubから対象となるリポジトリを開きます。メニューからSettings
を選び、サイドメニューからWebhooksを選びます。
各種設定項目が現れますので、情報を入力していきます。
入力する情報は以下の通りです。
Payload URL (入力必須)
PubSubHubbubハブのURLを指定します。この時、自身のサイトにあるAtom/RSSフィードのURLをGETパラメータ
hub.url
で渡します。入力例としては下記のような感じです。Contetnt type
application/x-www-form-urlencoded
を指定します。
1 | https://pubsubhubbub.appspot.com/publish?hub.mode=publish&hub.url=http://your-site.com/atom.xml |
次に、「Which events would like to trigger this webhook ?」というWebhookのトリガーのタイミングを指定する項目があります。
こちらはLet me select individual events.
を選択後にPage Build
をチェックすればOKだと思います。
上記の入力が済んだら、下記のようにUpdate Webhookを選択します。
「Recent Deliveries」という項目で、Webhookの結果が表示されます。Responseタブで確認し、204
が返ってきたら成功です。
最後に、Google PubSubHubbub HubのPublishを開き、Publisher DiagnosticsのTopic URLにフィードのURLを入れてGet Infoを押します。
Last item retrievedにフィードの内容が確認できればPubSubHubbubの設定は以上で完了です。
最後に
サイトの更新情報(Atom/RSSフィード)をGoogleに素早く伝えるPubSubHubbubについてのご紹介と、Github pagesでWebhooksからAtom/RSSフィードの更新を通知させる手順について書きました。
ご紹介したように、githubで幾つか設定を行う手間が必要となりますが、コピーサイト、スクレイピングサイトやスマパーへの対策に効果が期待できます。よろしければ参考にしてください。