Google Search Console(以後サーチコンソール)で、とあるサイトに“ソフト404エラー”が出ていました。
改めて現状を見返せばおかしくない状況でしたが、そうなっているサイトも多いんだろなぁと思い、あえて記事にしておきます。
現状の確認
ソフト404エラー?
冒頭の通り、Googleサーチコンソールでソフト404エラーが出ているのですが、そもそも何なのか。まずはGoogleの記事を引用します。
soft 404 とは、URL にアクセスしたときに、ページが存在しないことと 200 (success) のステータス コードをユーザーに伝えるページを返す URL のことを指します。場合によっては、メイン コンテンツのないページや空白のページなどもこれに該当します。
引用:HTTP ステータス コードや DNS エラーと SEO | Google 検索セントラル | ドキュメント | Google for Developers
要は、HTTPステータスコードが200ですよ、でも404ページっぽい内容のページがありますよ、と考えましょう。
ステータスコードとページ内容の矛盾を抱えている状態なわけです。
設定
こういう状況になっている設定を、改めて見直してみます。
公開ディレクトリに404.htm
を配置し、.htaccessで404ページとして指定させています。
ErrorDocument 404 /404.htm
404.htm
はいたって普通なHTMLファイルです。どこのサイトでも同じような感じで説明されていますし、実際これで404エラーページとして機能します。
ですから、あれー、おかしいなと思う人も多そう。
なんでソフト404エラーが出るの!?
何が問題?
先ほどの例で言えば、https://example.jp/hoge
等の存在しないページにアクセスすれば、ステータスコード404が返り、404.htm
が表示されます。それはわかりますよね。
しかし、https://example.jp/404.htm
にアクセスすればどうでしょうか。当然404.htm
が表示されるわけですが、ステータスコードは200が返ってしまうのです。
Chromeの開発者ツールで見てみましょう。
これは当然のことで、ファイルがあるので200が返るのは正しいですよね。
Googleが404.htm
をインデックスしてしまえばこのような状況になり得ます。
対策
実際、別にほうっておいても問題になるほどではありません。しかしながら何となく気持ちも悪いですし、直しておくことにします。
顧客に対し、突っ込まれる可能性はできるだけ排除せねばなりません。
この業界は、重箱の隅をつつくような指摘を、セカンドオピニオンでされることもよくありますし。
PHPで対策
私の場合は、冒頭にPHPで404ステータスコードのヘッダを出力することにしました。
1~5行目がPHPで、3行目で404ステータスコードを出力するようにしています。
<?php
if (!headers_sent()) {
header("HTTP/1.1 404 Not Found");
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 以後省略(普通のHTML) -->
これで以下の様に、ステータスコード404が返るおうになりました。
なお、headers_sent()
関数でヘッダの送信がすでに終わっていないかチェックしています。
例えば独自PHPプログラムで、404.htm
をrequire
, include
などで読み込むような場合、すでにHTMLの出力が終わっているとエラーになるからです。
拡張子が.phpで無い場合
私の今回のケースでは、拡張子.htmでPHPが動作しているため問題ありません。
しかし大抵のレンタルサーバーではそうはなっていません。404ページの拡張子が.phpではない場合、以下のいずれかが考えられます。
- 404ページの拡張子を.phpにする
- .htm, .htmlの拡張子でPHPが動作するようにする
後者の場合、.htaccess等で設定が必要ですが、環境によりことなります。
以下、大手レンタルサーバーにて、拡張子.htmlでPHPを動作させる際の.htaccess例です。
さくらのレンタルサーバー
AddType application/x-httpd-php .html
個人的にはこの表記を見ることが多いです。
lolipop, heteml
AddHandler php7.4-script .html
lolipop, hetemlは独自の癖があります。
7.4等のバージョンを指定できます。事前に管理画面から、そのバージョンのPHPを指定しておく必要があるっぽいです。
ConoHa
AddType application/x-httpd-lsphp .html
まとめ
ソフト404エラーは、駆け出しウェブマスターにとっては戸惑いがちな内容と言えるかもしれません。
PHPは多くのレンタルサーバーでインストールされていますので、この方法で対策できることが多いと思われます。
エラー解消の参考にしていただければ幸いです。
蛇足1
PHPに頼らずとも、404.htm
を直接アクセスできないようにする方法もあります。
<Files "404.htm">
Order Allow,Deny
Deny from all
</Files>
ただこれだと、Googleサーチコンソールでは、「アクセス禁止(403)が原因でブロックされました」として別に残ってしまうと思うのではないかなと思います。
サーチコンソールでは、正しいのにずっと残ってしまう項目が多く、個人的には非表示にできたらいいのにと思います。
蛇足2
head内に以下の記述をして、noindexにしておくのもありです。こうしておけばGoogleはindex(登録)しません。……が、蛇足1と同じ問題は残るかもですね。
<meta name="robots" content="noindex">
コメント