WordPress で Google の検索から来た人だけに文を出すショートコード:リファラーと Cookie で見分ける

広告WordPress・PHP を学べる本

Amazonのアソシエイトとして、WordPress functions.phpは適格販売により収入を得ています。

概要説明

WordPress で、Google の検索から来た人だけに出す文と、それ以外の人に出す文を切り替えるショートコード。リファラーで見分けて 1 時間 Cookie で覚える functions.php のコードと、前の書き方の問題(echo・display:none・google.co.jp)、ページキャッシュとの注意。作業環境で確かめた結果つき。

ページを開いた人が、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 で見分けるなど)にします。

できることを試してみた記事です。使うときは、出し分ける量を小さくして、キャッシュの設定も確かめてください。

関連機能

  1. WordPress ワンポイントメッセージ表示ショートコード

  2. WordPressランダムに1件記事を表示させるショートコード ( カスタム投稿、任意の件数に対応 )

  3. RSSフィードを使ってWordPress同士のコンテンツを共有

サイドバー

よく使うカスタマイズ

最近の記事

Profile

PAGE TOP