WordPress

HTML圧縮系プラグインを導入したらSNSボタンが機能していなかった!

HTML圧縮系プラグインを導入したらSNSボタンが機能していなかった!
目次
  1. 今までソーシャルボタンが機能していなかった!!
  2. はてなブックマークの設置の正しい例と、無効な例を比較
  3. 無効な例
  4. 正常な例
  5. 犯人はだれ?
  6. 犯人はこれ

今までソーシャルボタンが機能していなかった!!

WordPressには大体ソーシャルボタンが付いてると思いますが、SNSボタンを設置してから自分で押して動作確認してますか?

長年運営していたブログにソーシャルボタンを貼り付けていたのですが、まったく数字が伸びないので気になっていました。

ふと思い、自分でクリックして押してみたら反映されません・・・。_| ̄|○

その押したボタンは、「はてなブックマーク」だったのですが、なぜ押しても反映されなかったんだろ?とHTMLソースを眺めていたら、下記のようになっていました。

<a href="//b.hatena.ne.jp/entry/http:/www.serverlog.jp/" class="hatena-bookmark-button" data-hatena-bookmark-layout="vertical-balloon" data-hatena-bookmark-lang="ja" title="このエントリーをはてなブックマークに追加">

※一部抜粋

これを見て気づいた方はすごいです!

はてなブックマークの設置の正しい例と、無効な例を比較

まずは、無効な例から、、

無効な例

<a href="//b.hatena.ne.jp/entry/http:/www.serverlog.jp/" class="hatena-bookmark-button" data-hatena-bookmark-layout="vertical-balloon" data-hatena-bookmark-lang="ja" title="このエントリーをはてなブックマークに追加">

続いて、正常な例をご覧下さい。

正常な例

<a href="http://b.hatena.ne.jp/entry/http://www.serverlog.jp/" class="hatena-bookmark-button" data-hatena-bookmark-layout="vertical-balloon" data-hatena-bookmark-lang="ja" title="このエントリーをはてなブックマークに追加">

よく見ると、、

無効な例の方は、「URIスキームが省略」されてることが分かります。

//b.hatena.ne.jp/entry/http:/www.serverlog.jp/

最初の「http://」→「//」への省略は仕様上問題ありません。

しかし、赤字2つめの「http://」→「http:/」まで中途半端に省略しています。

これが原因で、はてなブックマークにページのURLが正しく認識されず、はてなブックマークが無効になっていました。

犯人はだれ?

この問題の原因を探すために、一旦、プラグインをすべて無効にしてみたところ、はてなブックマークが問題無く認識されることが分かりました。

そこで、一つ一つプラグインを有効にしていくとあるプラグインで上記のURIスキームが省略される事が判明。

犯人はこれ

HTML圧縮プラグインの「WP-HTML-Compression」

このプラグインはHTMLを圧縮するだけじゃなく、URIスキームまで省略していたようです。今回の原因が分かったのでHTML圧縮系プラグインは、削除して今後は導入しないことにしました。

皆さんも、HTML圧縮系プラグインを導入するときは、ソーシャルボタンが動くかどうか、自分でポチッしてみて下さいね。

2026年11月時点の補足

記事の HTML の例は、WordPress が引用符(")を飾りの引用符(”)に置き換えて表示していたので、元の形に戻してコードの枠に入れました。

2つの URL を PHP の parse_url() で分解すると、違いがはっきりします。2026年11月5日に PHP 8.5.8 で確かめました。無効な例は、はてなに渡す URL(path の中の http:/www...)の / が 1つ欠けています。

$ php -r 'var_dump(parse_url("//b.hatena.ne.jp/entry/http:/www.serverlog.jp/"));'
array(2) {
  ["host"]=>
  string(14) "b.hatena.ne.jp"
  ["path"]=>
  string(30) "/entry/http:/www.serverlog.jp/"
}
$ php -r 'var_dump(parse_url("http://b.hatena.ne.jp/entry/http://www.serverlog.jp/"));'
array(3) {
  ["scheme"]=>
  string(4) "http"
  ["host"]=>
  string(14) "b.hatena.ne.jp"
  ["path"]=>
  string(31) "/entry/http://www.serverlog.jp/"
}

原因のプラグイン WP-HTML-Compression は、WordPress.org の API で見ると 2026年11月時点でも配布は続いていますが、最終更新は 2017年11月で、動作確認は WordPress 3.5.2 までです。

$ curl -s "https://api.wordpress.org/plugins/info/1.2/?action=plugin_information&request%5Bslug%5D=wp-html-compression"
name: WP-HTML-Compression / version: 0.5.8 / last_updated: 2017-11-28 / tested: 3.5.2
項目この記事(2014年)2026年11月時点
WP-HTML-Compression使っていた0.5.8 のまま(最終更新 2017年11月・WordPress 3.5.2 まで確認)
HTML の圧縮プラグインで HTML を書き換えサーバーの gzip / Brotli で転送を圧縮(HTML は書き換えない)
URLはてなに渡る URL結果
//b.hatena.ne.jp/entry/http:/www.serverlog.jp/http:/www.serverlog.jp/(/ が 1つ)認識されない
http://b.hatena.ne.jp/entry/http://www.serverlog.jp/http://www.serverlog.jp/認識される