コード:Google から来た人を見分けて、出す文を切り替える
ページを開いた人が、Google の検索結果から来たかどうかで、出す文を切り替えるショートコードです。前のページの URL(リファラー)で見分けて、1 時間だけ Cookie で覚えておきます。
/**
* 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 で見分けるなど)にします。
できることを試してみた記事です。使うときは、出し分ける量を小さくして、キャッシュの設定も確認してください。

