CloudFront + HTTPS だとはてブのクローラがタイトルを拾ってくれない件

Posted on

最近書いたブログ記事のタイトルが、はてなブックマークにちゃんと拾われないので原因を調べてみました。具体的には、下の画像のように URL の一部がタイトルになってしまい、本来のタイトルが反映されていません。

ブックマークの追加画面

拾われなくなったのはここ 1 か月くらいのことで、その間、変更したことといえば HTTP から HTTPS への移行でした。

このブログは CloudFront + S3 でホスティングしていますが、7 月後半から HTTPS 化を進めていました。タイミング的にこれが影響してそうです。

検証して問題を切り分ける

この時点ではまだ推測だったので、確証を得るために検証してみました。

まず、プロトコルによって違いが出るのか確認しました。サーバが影響している可能性もあるので CloudFront + S3 以外にも、S3 単体、ELB + EC2、CloudFront + EC2 でも検証しました。 SSL/TLS の終端処理は CloudFront / ELB が行っています(S3 単体だと独自ドメインの HTTPS は不可)。

ServerHTTPHTTPS
S3OK-
ELB + EC2OKOK
CloudFront + EC2OKNG
CloudFront + S3OKNG

このブログは AWS Certificate Manager のサーバ証明書を利用しています。もしかしてそれが原因か? と思い、念のため、認証局から購入したサーバ証明書でも試しましたが結果は同じでした。

ログを確認する

先ほどの環境でそれぞれログを取ってみました。

EC2 の Apache を例にすると、ユーザーがブックマークを追加しようとするとこんなリクエストが飛んできます。 WWW::Document/0.02 がクローラの UserAgent です。

172.31.30.252 - - [08/Sep/2016:06:28:01 +0900] "GET / HTTP/1.1" 200 7718 "-" "WWW::Document/0.02"

ログを取ってはっきりしたのは、上の表の NG の組み合わせだとこのクローラのログが一切見当たりません。要するにページにアクセスできていないのです。

まとめると、CloudFront + HTTPS の組み合わせだと何らかの理由でクローラがページにアクセスできず、結果としてタイトルも拾えないということのようです。同じ現象は CloudFront + HTTPS を使っている他のサイトでも起きているので、クローラ側に原因があると思われます。

まとめ

はてなブックマークからはそこそこの流入もあるのでなんとか直したいと思い調査しました。はてなの中の人にメンションしてみようと思います。