WordPressサイトでreCAPTCHAを任意のページだけで読み込む方法です。
当サイトではContact Form 7(お問い合わせ用のプラグイン)にreCAPTCHAを設定した後、全ページにrecaptcha.jsが読み込まれていたので対処しました。
特にPage Speed Insightのスコアが気になったり、お問い合わせページ以外でreCAPTCHAのロゴを消したい時にも参考にしてもらえる内容かと思います。
functions.phpにて「recaptcha.js」が読み込まれるページを制限します。
この記事の目次
reCAPTCHAを任意のページでのみ読み込む
ことの発端は「Contact Form 7」にGoogle 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」でえらくスコアダウンしていることに気が付きました。
さっそく確認してみると、PageSpeed Insightsでスコアがダウンした原因はやはりreCAPTCHAに使われるファイルの読み込みが原因という事が判明。
recaptcha.jsが全ページで読み込まれてしまう
PSIだけだとアレなので、Chromeのデベロッパーツールでも確認してみます。
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に使うための固定ページのスラッグを指定しないとダメなので適宜変更して下さい。
スラッグ名はサイトによって異なるので、この部分だけ変更してもらえればそのまま動くはずです。コードは簡単なもので詳細が気になる人は少ないと思いますが、関連するコードはContact Form 7の「modules>recaptcha」あたりにあります。
関連記事
functions.phpが分からない方はこちら(↓)
Wordpressのfunctions.phpとは?場所と編集方法、コードの書き方を初心者向けに解説します。
結果:無駄なリソースの読み込みが停止できた
最後に動作確認です。
OKですね!トップページや記事ページを含むサイトの全ページで読み込まれていた「recaptcha.js」などの読み込みが停止できました。
お問い合わせページの方も一応確認。ちゃんと読み込まれているようなのでOKです。
使わないページで読み込まれてしまっていたreCAPTCHAのリソースの読み込み停止によって、無駄なリソースの読み込みが1つ減りました・w・
この作業でreCAPTCHのロゴの非表示化も可能
今回行った作業は、
というものでしたが、サイトの下部に常時表示されるreCAPTCHAのロゴ(バッジ)をトップページや記事から消したい時にも有効です。コードの条件分岐を変更すればそれ以外のページにも対応できます。
利用規約に関しては各自調べていただきたいのですが、“reCAPTCHAのブランドロゴはreCAPTCHAを使っているフォームがある場合に表示しなければならず、使っているフォームがないページなら不要。”...というのが僕の認識です。
reCAPTCHAを読み込んでから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・