reCAPTCHAのjsを任意のページだけで読み込む方法。ロゴの非表示化にもお勧め!

reCAPTCHAを任意のページだけで読み込む_eyecatch

WordPressサイトでreCAPTCHAを任意のページだけで読み込む方法です。

当サイトではContact Form 7(お問い合わせ用のプラグイン)にreCAPTCHAを設定した後、全ページにrecaptcha.jsが読み込まれていたので対処しました。

特にPage Speed Insightのスコアが気になったり、お問い合わせページ以外でreCAPTCHAのロゴを消したい時にも参考にしてもらえる内容かと思います。

functions.phpにて「recaptcha.js」が読み込まれるページを制限します。

reCAPTCHAを任意のページでのみ読み込む

ことの発端は「Contact Form 7」にGoogle reCAPTCHAをリンクさせたことでした。

reCAPTCHAを任意のページだけで読み込む_001

サイトの全ページにreCAPTCHAのロゴが表示される...

どうやら「Contact Form 7」にreCAPTCHAを使うと、サイトの全ページにロゴが表示されてしまうようで、それがイヤなので今までに色々やってきました。

今回の作業に至るまで…

WordPressサイトで“お問い合わせ”の実装にContact Form 7を使用。

Contact Form 7を狙ったスパムメールが届くようになる。

スパム対策のために、Contact Form 7にreCAPTCHAをリンクする。

サイトの全ページにreCAPTCHAのロゴが表示される。

Googleの指示通りにテキスト追加+CSSでreCAPTCHAのロゴを非表示にする。

reCAPTCHA用のjsがサイトの全ページで読み込まれている事に気づく…

reCAPTCHAのロゴ自体は非表示にできたのですが、その後「PageSpeed Insights」でえらくスコアダウンしていることに気が付きました。

reCAPTCHAを任意のページだけで読み込む_002

さっそく確認してみると、PageSpeed Insightsでスコアがダウンした原因はやはりreCAPTCHAに使われるファイルの読み込みが原因という事が判明。

recaptcha.jsが全ページで読み込まれてしまう

PSIだけだとアレなので、Chromeのデベロッパーツールでも確認してみます。

reCAPTCHAを任意のページだけで読み込む_003

サイトの全ページでreCAPTCHAのリソースが読み込まれる

recaptcha__ja.js(recaptcha__en.js)を筆頭に、reCAPTCHA関連のリソースが全てのページで読み込まれている様子。Contact Form 7にreCAPTCHを設定するだけだと全てのページにreCAPTCHAが読み込まれてしまうようです。これは対策せねば!!

そもそもreCAPTCHAはお問い合わせ(Contact Form 7)の入力フォームにしか使っていないので、トップページや記事ページにはロゴもjsも必要ありません。

という事でreCAPTCHAを任意のページ(お問い合わせページ)だけで読み込むように変更します。

スポンサーリンク

reCAPTCHAを「お問い合わせページ」でのみ読み込む方法

reCAPTCHAを任意のページでだけ読み込むように変更するコードは以下です。
こちらを子テーマ内のfunctions.phpに追記すればOKです。

//お問い合わせページでのみreCAPTCHAのリソースを読み込む
function load_recaptcha_resource() {
 if ( !is_page('contactus') ) {
  wp_deregister_script('google-recaptcha');
 }
}
add_action('wp_enqueue_scripts','load_recaptcha_resource',100);

コード内の'contactus'は、Contact Form 7に使うための固定ページのスラッグを指定しないとダメなので適宜変更して下さい。

reCAPTCHAを任意のページだけで読み込む_004

スラッグ名はサイトによって異なるので、この部分だけ変更してもらえればそのまま動くはずです。コードは簡単なもので詳細が気になる人は少ないと思いますが、関連するコードはContact Form 7の「modules>recaptcha」あたりにあります。

結果:無駄なリソースの読み込みが停止できた

最後に動作確認です。

reCAPTCHAを任意のページだけで読み込む_005

お問い合わせ以外で「recaptcha.js」の読み込みが停止できた

OKですね!トップページや記事ページを含むサイトの全ページで読み込まれていた「recaptcha.js」などの読み込みが停止できました。

reCAPTCHAを任意のページだけで読み込む_006

お問い合わせではjsを読み込んでいるのでOK!

お問い合わせページの方も一応確認。ちゃんと読み込まれているようなのでOKです。

使わないページで読み込まれてしまっていたreCAPTCHAのリソースの読み込み停止によって、無駄なリソースの読み込みが1つ減りました・w・

この作業でreCAPTCHのロゴの非表示化も可能

今回行った作業は、

reCAPTCHAに使用されるjsやcssといったリソースを必要とする任意のページ(お問い合わせページ)でのみ読み込むように変更する

というものでしたが、サイトの下部に常時表示されるreCAPTCHAのロゴ(バッジ)をトップページや記事から消したい時にも有効です。コードの条件分岐を変更すればそれ以外のページにも対応できます。

利用規約に関しては各自調べていただきたいのですが、“reCAPTCHAのブランドロゴはreCAPTCHAを使っているフォームがある場合に表示しなければならず、使っているフォームがないページなら不要。”...というのが僕の認識です。

reCAPTCHAを読み込んでからCSSで非表示にするよりも、今回紹介した方法で必要のないページでは読み込み自体を停止した方がサイトが遅くならないのでお勧めです。

reCAPTCHAを任意のページだけで読み込む_007

ロゴをCSSで非表示にする場合は指定のテキストが必要

reCAPTCHAを使っているお問い合わせページ自体も「CSSで非表示+テキスト追加」の方法よりバッジを使った方が見た目も良いしね・w・



まとめ

以上、Contact Form 7にリンクしたreCAPTCHAを任意のページでのみ読み込む方法でした。最後にポイントをおさらいすると以下です。

  • reCAPTCHAの導入でPageSpeed Insightsのスコアがダウンした。
  • Contact Form 7にreCAPTCHAを設定すると全ページで読み込まれる。
  • WordPressならfunctions.phpで簡単にリソースの読み込み制御が可能。
  • 読み込み停止はreCAPTCHAロゴの非表示化にも使える。←自己責任でお願い

スパムメールが大変→Contact Form 7にreCAPTCHA導入→ロゴが邪魔→非表示にする→PSIがスコアダウン→お問い合わせページ以外での読み込み停止→ロゴも非表示化!

そんなこんなで結構時間食っちゃいましたが、最終的には満足する方法でreCAPTCHAを導入できました。随分遠回りしたけど記事にできたから良いか~・w・

-WordPress
-,

site-logo
ありがとうございました!
良かったらシェアしてネ・w・
当サイトはピンバックを受け付けます。
  • この記事を書いた人
ザキ

ザキ

X:@sologaku

プログラミングに興味があり情報系の大学を卒業。

新卒で社会人になるも数年で退職し今はフリーランスとして生きています。

少しでも誰かの役に立てれば...と思い、当サイトでIT関係のハウツーを発信しています。


ソロ学運営者:ザキの自己紹介

© 2020 sologaku