Googleなどのウェブマスターツールに登録しておくと、サイトを監視していなくても各種クローラーが監視役をしてくれて便利です。ウェブマスターツールについては別記事を書きますので参考になれば。

今回は、そのウェブマスターツールに「ソフト404」で怒られたので原因究明と対処をしました。

ソフト404とは

Googleの定義によると、ページが存在しない(本来ステータスコード404を返すべきな)のに200OKなどが返ってきてしまうことを言うそうです。

200が返ってきているので、通常のインデックス処理などを行ってしまうbotなどもあります。
一方で閲覧者には白紙ページとなっているため、SEOにもユーザーにも良くない状況です。

私のサイトの症状

WordPressで運営している趣味サイトの方で、2ページほどエラーが出ていました。
実は、これ以外にもサイトが妙に重くなる症状を併発していたため、原因究明と対応に時間がかかってしまいました。重くなる方はどうも別の問題のようで、原因がはっきりしたらまた別記事を書きます。

結果的にソフト404問題だった部分だけを書き出すと、

という症状でした。

原因究明

疑った順番に書きます。結論だけ知りたい方は次節へ。

1. サイトが重いからじゃない?

別問題の一部だと思っていた頃です。
でも、サイトも24時間ずっと重いわけじゃないので、スイスイ動いている時は別ページは普通に見れる。むしろソフト404が出ているページにアクセスすると重くなるような…。

2. MySQLの不具合

素直に考えれば、当該記事のみ本文などが破損していると考えられます。
そこで管理画面からチェック。…普通に見れるし何なら記事の更新作業もできる…。

AMPプラグインによるAMPページも閲覧可能。
念の為データベースも見てみましたが、特に破損は見当たらず。

3. ApacheやPHPの不具合

実は、サイトが重くなったりソフト404が出る前に、色々やっていたのでした。

しかし、上2つは症状が出た時期と1週間以上ずれています。エラーは1日に何度も起こっているので、1週間以上一度もエラー無しで運用出来た後に、突然重くなったりエラーが出たりというのは、これらが原因とは考えにくいです。

プラグインアップデートのみ、サイトが重くなった日と同日でしたが、こちらはプラグインを停止しても重いまま…これも原因ではないようです。いずれにせよ、一部の記事にのみ影響を及ぼしそうなプラグインではなかったため、除外。

残るはURL構造や純粋なPHPの構文エラーが考えられます。特に、たまたまURLの似ている記事だったので、かなり疑いました。
ところが、よく考えたら他にも同じような、はっきり言って今回見れなくなったページよりももっと似ているURLの記事もあります。リダイレクトなども設定しておらず、実際されている様子もない。
試しにスラッグ変更などもやってみましたが、駄目だったのでこれではない。

PHP構文に至っては、このところテンプレートなどを弄っていなかったのでエラーが起こる要素が見当たらない…。
そもそも、最初のPHP処理が行われる前に表示されるべきHTML部分も表示されないため、何かもっと別の問題な気がしました。
ちなみに、デバッグモードは使えませんでした。そもそも重くて読み込めない。

最終的な原因

改めてデータベースをよく見直していたところ、post_statusに見慣れない「inherit」という文字が入っていました。
これはattachment、つまりメディアファイルの公開範囲を、紐付けられている投稿(親投稿)に合わせる、というものです。
今回のソフト404の原因は、このinherit属性が通常の投稿に入っていたからでした。これをpublishedにし、ブラウザやサーバーのキャッシュを削除してアクセスし直すと無事表示されるようになりました。

何故一部の記事にのみこの属性が入ってしまったのかはわかりません。
当該記事はカスタム投稿タイプでしたが、記事に親子関係は付けていませんでした。

管理画面からだと普通に「公開」状態に見えてしまうので、一部の記事のみソフト404になったり表示が重い、という方はデータベースの中身をチェックしてみてください。

スポンサーリンク