■起きていること:
・いわゆる「サイト内検索」のスパムを受けている
・example.com/?s=中国語 のようなページがGSCで大量に認識されている
※1:処理はnoindexやrobots.txtによってブロックされましたなので直近の実害はない
※2:イメージとして添付画像を貼り付けています(※当方のサイトではないですが、同様の事例のため
※3:"example.com”は、ただの例のURLです。当方サイトではないです
・noindexされているが、念の為に、以下行いたい
■やりたいこと:
・example.com/?s= のURLにアクセスされたら404に「リダイレクト」したい
・同時にstatus code=404を返したい
・同時にキャッシュクリアしたい
■前提:
・404.phpは存在(親テーマにいます)
■現状の処理:
・functions.phpに以下を記述している:
function search_404( $query ) {
if ( is_search() ) {
// 404ページを返す
$query->set_404();
// 404コードを返す
status_header( 404 );
// キャッシュの無効化
nocache_headers();
}
}
add_filter( 'parse_query', 'search_404' );
上記に加えて、「robots.txt」で「example.com/?s=」はdisallowしている
■課題:
・アクセスされたURLがGoogle Search Consoleで認識はされている("robots.txt によりブロックされました")。当面、問題ないが、この件数が積み上がっている。
・よって、404にリダイレクトして、GSCが認識するURLを一つに統一化したい
・$query->set_404();だと、おそらく、wp_redirectなどと処理が異なり、404を返す前にアクセスしたURLがGSCに認識されているが、リダイレクト先の404ページをGSCに認識させたい。
■処理方法(すでに試したがうまくいかないもの):
①:search.php の<?phpの直下に以下を記述:
wp_safe_redirect( home_url('/404.php')); //追記
status_header( 404 ); //追記
nocache_headers(); //追記
exit; //追記
(※functions.phpの「現状」のコードは削除で試したがうまくいかず)
②: 「functions.php」の「現状」のコードを以下に変更:
function search_404( $query ) {
if ( is_search() ) {
// 404ページへリダイレクト
wp_safe_redirect( home_url('/404.php'));
// 404コードを返す
status_header( 404 );
// キャッシュの無効化
nocache_headers();
}
}
add_filter( 'parse_query', 'search_404' );