ソフト404エラーと判定されたページをPHPで解決する【Search Console】

PHP基礎 ソフト404エラーをPHPで解決する PHP
※当サイトはアフィリエイト広告を掲載しています。

Google Search Console(以後サーチコンソール)で、とあるサイトに“ソフト404エラー”が出ていました。

改めて現状を見返せばおかしくない状況でしたが、そうなっているサイトも多いんだろなぁと思い、あえて記事にしておきます。

PHPの解説としては、初歩的な記事です。

現状の確認

ソフト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をインデックスしてしまえばこのような状況になり得ます。

そもそもなぜGoogleが404.htmをクロール・インデックスしているのか、という問題もあります。……が、これはよくあることです。

対策

実際、別にほうっておいても問題になるほどではありません。しかしながら何となく気持ちも悪いですし、直しておくことにします。

顧客に対し、突っ込まれる可能性はできるだけ排除せねばなりません。

Lara
Lara

この業界は、重箱の隅をつつくような指摘を、セカンドオピニオンでされることもよくありますし。

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.htmrequire, includeなどで読み込むような場合、すでにHTMLの出力が終わっているとエラーになるからです。

PHPで404のヘッダを指定すると、サーバの404と二重になっちゃわないかな、と思う方もいるかもしれません。これは大丈夫で、サーバーは通常、PHPスクリプトによるヘッダーの指示に従います。

拡張子が.phpで無い場合

私の今回のケースでは、拡張子.htmでPHPが動作しているため問題ありません。

しかし大抵のレンタルサーバーではそうはなっていません。404ページの拡張子が.phpではない場合、以下のいずれかが考えられます。

  • 404ページの拡張子を.phpにする
  • .htm, .htmlの拡張子でPHPが動作するようにする

後者の場合、.htaccess等で設定が必要ですが、環境によりことなります。

以下、大手レンタルサーバーにて、拡張子.htmlでPHPを動作させる際の.htaccess例です。

もちろん.htmにすることもできますし、半角スペースで区切って併記することも可能です。
(例 .html .htm

さくらのレンタルサーバー

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)が原因でブロックされました」として別に残ってしまうと思うのではないかなと思います。

Lara
Lara

サーチコンソールでは、正しいのにずっと残ってしまう項目が多く、個人的には非表示にできたらいいのにと思います。

蛇足2

head内に以下の記述をして、noindexにしておくのもありです。こうしておけばGoogleはindex(登録)しません。……が、蛇足1と同じ問題は残るかもですね。

<meta name="robots" content="noindex">

コメント

タイトルとURLをコピーしました