Github pagesでホスティングしているブログサイトの更新情報(Atom/RSSフィード)を、Webhooksを使ってPubSubHubbub(PSHB)ハブに通知してみました。当記事ではその設定方法をまとめてみたいと思います。

pubsubhubbubが停止か?

最近、下記で紹介しているpubsubhubbubサーバーが停止しているようです。Publisher DiagnosisGet infoすると、Transient error; please try again laterというエラーが表示されますが、今のところ原因は不明です。

回避策としては、Google Search ConsoleFetch as Googleよりクロールを行う手段があります。

目次

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へ更新を通知する方法をまとめます。手順は以下の流れです。

  1. フィードにhubのURLと自身のフィードURLを追加
  2. github pagesでwebhooksの設定

それでは詳しく見ていきましょう。

フィードに各URLを追加

まず初めに、フィードに以下のURLを追記します。

  • PubSubHubbubハブのURL
  • 自身のフィードURL

RSSフィードの場合

RSSフィードでフィードを配信している場合はRDS名前空間にxmlns:rdfxmlns:atomを追記します。更にatom:linkで各URLを追記します。

rss
1
2
3
4
5
6
7
<rdf:RDF
xmlns="https://purl.org/rss/1.0/"
xmlns:rdf="https://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:atom="https://www.w3.org/2005/Atom"
>
<atom:link href="自身のサイトに配置したRSSフィードのURL" rel="self" type="application/rss+xml" />
<atom:link rel="hub" href="PubsubhubbubハブのURL(例:https://pubsubhubbub.appspot.com/)" />

Atomフィードの場合

Atomフィードでフィードを配信している場合は、linkで各URLを追記します。

atom.xml
1
2
<link href="自身のサイトに配置したAtomフィードのURL" rel="self" type="application/atom+xml" />
<link rel="hub" href="PubsubhubbubハブのURL(例:https://pubsubhubbub.appspot.com/)" />

Webhooksの設定方法

続いてWebhooksの設定です。

Webhookはリポジトリのcommitbuild等のタイミングで、任意のHTTPリクエストを送信させる事ができる仕組みです。Webhooksにより、静的サイトジェネレータ等で生成したサイトもPubsubhubbubハブに更新を知らせる事ができます。

それでは設定方法を見ていきましょう。Githubから対象となるリポジトリを開きます。メニューからSettingsを選び、サイドメニューからWebhooksを選びます。

github pages pubsubhubbub1

各種設定項目が現れますので、情報を入力していきます。

github pages pubsubhubbub2

入力する情報は以下の通りです。

  • Payload URL (入力必須)

    PubSubHubbubハブのURLを指定します。この時、自身のサイトにあるAtom/RSSフィードのURLをGETパラメータhub.urlで渡します。入力例としては下記のような感じです。

  • Contetnt type

    application/x-www-form-urlencodedを指定します。

Payload-URLの入力例
1
https://pubsubhubbub.appspot.com/publish?hub.mode=publish&hub.url=https://your-site.com/atom.xml

次に、「Which events would like to trigger this webhook ?」というWebhookのトリガーのタイミングを指定する項目があります。

github pages pubsubhubbub3

こちらはLet me select individual events.を選択後にPage BuildをチェックすればOKだと思います。

上記の入力が済んだら、下記のようにUpdate Webhookを選択します。

github pages pubsubhubbub4

「Recent Deliveries」という項目で、Webhookの結果が表示されます。Responseタブで確認し、204が返ってきたら成功です。

github pages pubsubhubbub5

最後に、Google PubSubHubbub HubPublishを開き、Publisher DiagnosticsのTopic URLにフィードのURLを入れてGet Infoを押します。

Publisher DiagnosticsによるフィードURL診断結果

Last item retrievedにフィードの内容が確認できればPubSubHubbubの設定は以上で完了です。

最後に

サイトの更新情報(Atom/RSSフィード)をGoogleに素早く伝えるPubSubHubbubについてのご紹介と、Github pagesでWebhooksからAtom/RSSフィードの更新を通知させる手順について書きました。

ご紹介したように、githubで幾つか設定を行う手間が必要となりますが、コピーサイト、スクレイピングサイトやスマパーへの対策に効果が期待できます。よろしければ参考にしてください。