概要説明
WordPress で、Google の検索から来た人だけに出す文と、それ以外の人に出す文を切り替えるショートコード。リファラーで見分けて 1 時間 Cookie で覚える functions.php のコードと、前の書き方の問題(echo・display:none・google.co.jp)、ページキャッシュとの注意。作業環境で確かめた結果つき。
コード:Google から来た人を見分けて、出す文を切り替える
ページを開いた人が、Google の検索結果から来たかどうかで、出す文を切り替えるショートコードです。前のページの URL(リファラー)で見分けて、1 時間だけ Cookie で覚えておきます。
functions.php
/**
* Google の検索から来た人かを見分けて、1 時間だけ覚えておく(ページを出す前に動かす)
*/
add_action( 'init', function () {
if ( is_admin() || isset( $_COOKIE['from_google'] ) || empty( $_SERVER['HTTP_REFERER'] ) ) {
return;
}
$host = (string) wp_parse_url( wp_unslash( $_SERVER['HTTP_REFERER'] ), PHP_URL_HOST );
// www.google.com・www.google.co.jp など、google の検索から来たとき
if ( preg_match( '/(^|\.)google\.[a-z.]+$/', $host ) ) {
setcookie( 'from_google', '1', time() + HOUR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN, is_ssl(), true );
$_COOKIE['from_google'] = '1'; // このページから使えるようにする
}
} );
/**
* [from_google]Google から来た人に出す文[/from_google]
* [from_google not="1"]それ以外の人に出す文[/from_google]
*/
add_shortcode( 'from_google', function ( $atts, $content = '' ) {
$atts = shortcode_atts( array( 'not' => '' ), $atts );
$from_google = isset( $_COOKIE['from_google'] );
$show = $atts['not'] ? ! $from_google : $from_google;
return $show ? do_shortcode( $content ) : '';
} );
| 書き方 | 役目 |
|---|---|
| init のフックで見分ける | ページを出す前に動かすので、Cookie を付けられる(出したあとだと付けられない) |
| リファラーのホスト名で見分ける | www.google.com・www.google.co.jp など、国ごとの Google から来た人も入る |
| ショートコードは return で返す | 本文の書いた場所に、正しく文が出る |
| 見せない文は出さない | HTML にも残さない(display:none で隠すだけにしない) |
前の書き方から直したところ
| 前の書き方 | 今の書き方 | |
|---|---|---|
| 見分ける場所 | テンプレートの中で関数を呼ぶ(出したあとだと Cookie を付けられない) | init のフックで、ページを出す前に見分ける |
| Google の見分け方 | 前のページが「https://www.google.com/」ちょうどのときだけ | google.co.jp など、国ごとの Google も入る |
| ショートコード | echo で出すので、本文の書いた場所とずれることがある | return で返す |
| 見せない文 | display:none で隠すだけ(HTML には残る) | 出さない |
| 書き方 | 開始・切り替え・終わりの 3 つのショートコード | 囲むショートコード 1 つ(not=”1″ で逆にする) |
テンプレートに何か書き足す必要はありません。functions.php に足すだけで、サイト全体で見分けます。
記事の本文
[from_google]Google の検索から来てくださって、ありがとうございます。[/from_google] [from_google not="1"]Google で「(サイト名)」と検索してみてください。[/from_google]
確かめた結果
このサイトの作業環境(WordPress 7.1)で、前のページの URL を変えて開きました。
| 前のページ | 結果 |
|---|---|
| https://www.google.co.jp/ | Cookie(from_google)が付いた |
| https://www.google.com/ | Cookie が付いた |
| https://www.bing.com/・なし | Cookie は付かなかった |
| ショートコード(Cookie なし/あり) | 「検索してみてください」だけ/「ありがとうございます」だけが出た |
試しに入れたコードは、確かめたあと消しました。
使うときの注意
Google のロボット(検索のために見に来るもの)と、実際に見に来た人とで、中身を大きく変えると、検索の評価が下がるおそれがあります。お礼のひと言や案内など、小さな出し分けにとどめます。
また、ページキャッシュのプラグイン(WP Super Cache・WP-Optimize など)を使っていると、最初に保存されたページがみんなに出るので、出し分けが効きません。そのページをキャッシュから外すか、ほかの方法(JavaScript で見分けるなど)にします。
できることを試してみた記事です。使うときは、出し分ける量を小さくして、キャッシュの設定も確かめてください。


