海外で働きたい人募集! / LIGセブ島支社
海外で働きたい人募集! / LIGセブ島支社
2018.05.11
#37
バックエンドへの道

facebookの「いいね!」数を維持したままサイトをSSL化する方法

エリカ

こんにちは。ディレクターのエリカです。

SSL化していないサイトへの風当たりが強くなってきましたね。SSL化できない事情はさまざまあるかと思いますが、その中のひとつに「いいね!」数の引き継ぎがあるのではないでしょうか。

というのも、facebookの「いいね!」数はURLに対して保持されており、URLが一文字でも違えば別のものとして処理されてしまうようなのです。したがって、ただ単にURLの「http」を「https」にしてしまうだけでも、「これまでのURLとはまったく別もの」ということになり、「いいね!」数はもちろん0からスタートになります。

「いいね!」数をそのままに、URLを変更する方法はないのでしょうか?

「諦めて心機一転、0からスタートする」というのがもっとも正解なのではないかと個人的には感じています(そもそもこれは、サイト側がコントロールするものでもないと。というのも、はてブなどは、「http」「https」どちらのスキームを指定しても同じものとして扱ってくれるようになっている気がします)。

それでも、どうしても「『いいね!』数を引き継ぎたい!」となった場合……。方法はまったくないわけではありません。

そういう要望は少なくないと思うのですが、facebookは合算して対応してくれるかわりに、このような方法を紹介してくれています。これは、「すでに用意されている機能を駆使して、なんとか実現する」という方法です。

今回は、そのひとつを解説します。

前提として必要なこと

前提として、facebookの「いいね!」数や「シェア」などは、その対象のURLにアクセスし、その内容を解析(「スクレイピング」と言ったりします)することによってfacebook上で管理できるようになります。おそらくですが、このデータが「http」といったスキームを含むユニークなURLで管理・維持されるために、このような問題が起きていると思われます。

ですから、あるページをSSL化したとして「以前のURLでもそのまま表示できる」という状態をキープする必要があります。 つまり、facebookに対しては、「結局URLは変わってないよ、だから元のURLのデータをそのまま使ってね」という形式にするのです。

これが公式に案内されている方法なのですが、実際にやるとなると大変です。なぜならば、せっかくSSL化したのであれば、訪れるユーザーにはSSLで接続して欲しいからです。ですから、あの手この手で新しいURLにたどり着くようにしていくのですが、そのためには「以前のURLでも接続可能な状況」をなんとか残していくという仕組みが必要です。

考えられるのが、「『http』でリクエストされたら『https』にリダイレクトさせる」という形にし、もしそれがfacebookのスクレイピングによる場合は、「『http』ならリダイレクトさせずにおき、『https』なら『http』にリダイレクトする」という処理です。

多くの場合、これはユーザーエージェントを見て振り分ける形になります。こちらの情報に従って、facebookのクローラーかどうかを判定して、リダイレクトの処理を振り分けます。

これができれば、facebookは常に「http」のURLで、それ以外のユーザーは常に「https」のURLでページにアクセスすることになります。

もちろん、SSL化移行に初めてシェアされるような記事については、いかなる場合も「https」で表示されるような形で問題ありません。

あくまでも、すでにシェアされてしまっている「いいね!」数を維持するためのだけの処理になります。実際にシェア、およびアクセスされるURLは、リダイレクトの設定が正しくなされていればあまり気にする必要はありません。

「facebookのクローラーへのレスポンスがどうなっているか」、というところだけを意識すればよいことになります。

facebookにスクレイピングされた際のレスポンス

facebookのクローラーに対するレスポンスが、つまり「いいね!」「シェア」される内容になります。 なので、OGPタグがすでに用意されていたのでれば、facebookだけが接続できる「http」のURLで表示される内容には、ここれまでと同じものが表示されていれば問題ありません。

注意するところは、og:url 及び canonical のみかと思います。

ここに表示しておくのは、http:// のURLのままになります。

反対に、facebookのクローラー以外に表示する場合は、https:// のURLになります。

接続されているスキームと同じ、ということです。ここの組み合わせが正しくないと、リダイレクトがループしてしまいますので注意が必要です。

まとめ

もう一度言いますが、ツイート数が廃止された今、「『いいね!』数も諦める」のが一番の解決策かと思います。どうしても「URLを変更しても継続したい」という状況がありましたら、ぜひ、ご相談ください。