「SSL化なんて簡単♪」って思っていたら大きな落とし穴がありました。
それは、URLの変更に伴い Facebookの「いいね」がゼロになってしまう問題です。
日本語Facebook公式ページに明記されている
Google先生を頼りに頑張りましたが、古い情報ばかりで上手くいかないことが多いです。
Facebook日本語公式ページがありますので熟読してください。
本ページを読むことで解決できました。
『ページを別のURLに移動させるにはどうすればよいですか。』
STEP1:rel=canonicalの指定を行う
SSL化に伴い、古いURLと新しいURLで、意識をしながら記述する必要があります。
canonical指定は、新しいURL(https://)で大丈夫です。
プラグインを使えば自動でやってくれますが、意図しない動作も多いです。「All in One SEO Pack」と「WordPress SEO by Yoast」が有名です。
汎用的に使えるように書くと以下のように複雑になりました。
<?php if (is_home()) { $canonical_url = get_bloginfo('url'); } elseif (is_category()) { $canonical_url=get_category_link(get_query_var('cat')); if ( $paged >= 2 || $page >= 2) { $canonical_url = $canonical_url.'page/'.max( $paged, $page ).'/'; } } else if(is_tag()){ $canonical_url = get_tag_link(get_queried_object()->term_id); } elseif ( is_search() ) { $canonical_url = get_search_link(); } elseif (is_page() || is_single()) { $canonical_url = get_permalink(); if ( $paged >= 2 || $page >= 2) { $canonical_url = $canonical_url.'page/'.max( $paged, $page ).'/'; } } elseif(is_404()) { $canonical_url = get_bloginfo('url')."/404"; } else { $canonical_url = get_bloginfo('url'); $canonical_url = get_permalink(); } if( get_post_meta($post->ID, "canonical", true) ) { $canonical_url = $post->canonical; ?> <?php } ?> <link rel="canonical" href="<?php echo $canonical_url; ?>">
STEP2:新URLに古いURLを指すog:urlタグを追加
これは半分本当で半分ウソです。
正確には、SSL化する前の記事は、古いURL(http://)を記述して、SSL化以降に投稿した記事は、新しいURL(https://)を記述します。
SSL化以降に投稿した記事も、「http://」をマスターとしても問題ありませんが気持ち悪いですね。
ユーザーの環境に合わせて20170922を実施日に変更してください。
<?php if(20170922 >= intval(get_the_date( 'Ymd' ))){ $GNS_STR_URL = str_replace( 'https://', 'http://',get_permalink()); ?> <meta property="og:url" content="<?php echo $GNS_STR_URL; ?>" /> <?php }else{ ?> <meta property="og:url" content="<?php the_permalink(); ?>" /> <?php } ?>
STEP3:Facebookクローラーだけが古いURLを見られるようにする
Facebookクローラーだけは、古いURLも見られるようにするものです。
他の方が見た場合は、301リダイレクトを実施します。
htaccessに以下を追加しました。
#Facebookクローラーは例外 HTTPなら RewriteCond %{HTTP_USER_AGENT} Facebot RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] |
STEP4:いいね数の表示は、古いURLで指定する
ここでもSSL化前の記事だけ古いURLにしました。新しいSSL化後に執筆した記事は新しいURLです。
20170922を変更してください。
<div style="float:left;line-height:0" class="fb-like" data-href="<?php if(20170922 >= intval(get_the_date( 'Ymd' ))){ $GNS_STR_URL = str_replace( 'https://', 'http://',get_permalink()); echo $GNS_STR_URL; }else{ the_permalink(); } ?> " data-send="false" data-layout="button_count" data-width="450" data-show-faces="false"></div>
まとめ:SNSのリンク切れ問題は難しい
Facebookの振る舞いが、もうちょっとフレンドリーになると負担が軽減するのですが、なかなか難しいです。
SSL化トラブルは、もうしばらく続きそうですね!
今回の変更によって『いよいよ発売!ジブン手帳 2018 は、使いやすさ断トツNo1』は、「274いいね」が継続して付与されていますし、『【レビュー】コクヨ ジブン手帳 Goods ファスナーケース』も「133いいね」として継続されています。
もし、これがゼロだったら凹みますね。
マイクロソフト認定トレーナー。『自己紹介』