【PHPサイト】拡張子なしのアクセスに404エラーを返す
またしてもGoogleに余計なお世話を焼かれ、勝手にURLを生成された挙句にしかも低品質コンテンツ扱いされた話です。PHPでの手作りサイトを運営していますが、「拡張子なしのURL」に対して「404エラーを返す」という対処を取りました。
取った対処法
次のコードが「<!DOCTYPE html>」の前に実行されるように記述します。ちなみにdie()を削除するとページはそのまま表示されますが、404のステータスコードがGoogleに伝わります。
<?PHP
if($_SERVER["REQUEST_URI"]!==$_SERVER["SCRIPT_NAME"]){
header('HTTP/1.1 404 Not Found');
die('Not Found');
}
?>
引用:拡張子の無いアクセスには404エラーを返すには?|教えて!goo
問題発生の経緯
「クロール済み - インデックス未登録」にあるURLを調査していたところ、拡張子なしのURLが複数含まれていることが判明しました。
「また間違ったリンクを張られたのか」と思い参照元の外部サイトを見に行ったところ、リンクは張られておらず正規のURLがテキストで書かれているだけでした。誰も間違ったリンクなど張っていなかったのです。
そう、Googleがこれを勝手にリンクと認定するどころか拡張子を抜いてしまうという謎のお世話を焼いてくれたのです。さらにそれを低品質コンテンツ扱いです。あまりにひどい。
この外部リンク(?)は正規URLにつながっていないため、リダイレクト以前にもう404エラーを返すことにしました。
結果
上述のコードをhtml記述用のファイルの冒頭に挿入したところ、拡張子なしのアクセスに対して404エラーを返すことができました。
弊サイトはスパムリンクによって大量の「低品質・重複コンテンツ」をGoogleに認識されるという災難に見舞われおりますが、拡張子なしのリンクを張られるというスパムもいつか来るだろうと思います。
そこで弊サイトでは次の対処法を取っています。
「?」から始まるパラメータをhtaccessでリダイレクト
「/」区切りのパラメータは404エラーを返す
拡張子なしのURLは404エラーを返す ←new!
Googleに余計なお世話を焼かれると言えば、head内のBOMが引き起こした問題もありました。