ブラウザ上で該当ページが存在しない場合、「Not Found. The requested URL was not found on this server.」というエラーがでることはありませんか。これは通称「404」と呼ばれるエラーです。この状態が続くとサイトへのユーザー流入経路が寸断され、アクセス機会が損失となりサーバ管理者としては放置はできません。今回はサーバ運用側の視点から404エラーの解決方法を紹介します。
本記事の読者層は以下の方を想定しています。
- ブログを運営している人
- インターネット検索中に404エラーに遭遇しその原因を知りたい人
- サーバー運営者で404の原因を知りたい人
404 not found とは ?(404エラーとは?)
ネット閲覧しているとしばしばクリック先のURLで現れる「Not Found. The requested URL was not found on this server.」
これは「サーバ上にファイルが存在しないこと」を示すエラーがです。
この表示はサイトを訪れたが、何らかの理由でページにアクセスできないときのエラー表記で、通称「404エラー」と呼ばれています。
「404」という数字はHTTPのステータスコード(HTTP response status codes)の1つです。
つまり、このHTTP ステータスコードという番号でエラーの種類を特定できます。
このエラーコードには、5 つのクラスリに分類されます。
ステータス コードの最初の桁は応答のクラスを定義しますが、最後の 2 桁には分類や分類の役割はありません。
あります。
以下に、標準で定義されている5つのクラスのステータスコード一覧を表示します。hj
ステータスコード一覧 : HTTP response status codes
情報応答:コード 100-199
成功応答:コード 200-299
リダイレクトメッセージ:コード 300-399
クライアントのエラー応答:コード 400-499
サーバエラー応答: コード 500-599
# | コード | 名称 | 説明 |
---|---|---|---|
1xx | 100-199 | 情報応答 | リクエストが継続中であることをクライアントに通知 |
2xx | 200-299 | 成功応答 | 成功した応答が受信され、解釈が修正され、受け入れを通知 |
3xx | 300-399 | リダイレクトメッセージ | リクエスト完了前にアクションを実行する必要があることを通知 |
4xx | 400-499 | クライアントのエラー応答 | リクエスト構文に問題がありリクエストを完了できないことを通知 |
5xx | 500-599 | サーバエラー応答 | 有効なリクエストだがサーバーの問題により完了できないことを通知 |
覚えておきたいコードとして、
400番台のステータスコードでよく知られているものに 「404 Not Found」 と同様にエラーとして「403 Forbidden」 (=アクセス権がありません)があります。
その他の詳細なステータスコードの番号と意味はこちらをご覧下さい。
404エラーを修正すべき理由
404 エラーの修正を優先すべき主な理由は次のSEO対策の改善に繋がるためです。
404エラーを改善することでSEO効果が上昇
サイトナビゲーションの改善
リンク切れにより 404 が発生し、ユーザーエクスペリエンスが低下します。 404 を修正すると、サイトのナビゲーションが改善され、ユーザーがサイトに留まり続けます。
検索エンジンのペナルティを回避
404 が多すぎると、サイトがペナルティを受けたり、検索結果で降格されたりする可能性があります。それらを修正すると、サイトが良好な状態に保たれます。
404エラーを改善することでサイト運用効果が上昇
失われたトラフィックを節約
404 ページへのリンクにより、トラフィックと潜在的なコンバージョンが失われます。これらの URL をリダイレクトすると、トラフィックが維持されます。
古いコンテンツを更新
404 は、更新によりリンク先が消失または削除する必要がある古いコンテンツを洗い出すのに役に立ちます。
404 エラーの解決は時間がかかりますが、その効果として検索でのパフォーマンスが向上し、ユーザー フレンドリーなサイト改善が期待されます。
404エラーの原因はどこにあるのか? (404 error)
この404エラーはなぜおこるのでしょうか。
エラーには、以下の理由が考えられます。
- URLまたは該当コンテンツファイル・画像などが内部リンクを調整することな削除または移動された場合
- 作成プロセスまたは再設計中にURLが誤ってリンクされた場合
- 閲覧者がブラウザに誤ったURLを入力された場合
- URL先の該当サーバが実行されていないか、接続が切断された場合
- 入力されたドメインがIPアドレスに変換できない場合、もしくはドメイン名が存在しない場合
このような理由により、404エラーが発生することで、ウェブサイトの流入経路が寸断され、サイトへのアクセス機会の損失となり放置はできません。
次に、その解決方法について言及します。
404エラーの原因と対処方法
上記様々な理由により、ユーザー側にとって404が発生する例を示しましたが、この原因をサーバー管理者側から整理すると以下のような要因があると考えられます。
これよりページに404エラーがでる場合の解決方法を考えていきます。
ブラウザー側に問題がある場合 (解決難易度 低)
サーバー側に問題がある場合 (解決難易度 難)
ブラウザー側に問題がある場合
①ブラウザ上にキャッシュが残っている可能性
ブラウザ上で表示されているものが古く宛先となるURLが既に存在していない可能性があります。
解決方法主要ブラウザで「キャッシュ」をクリアしてみてください。
キャシュをクリアする方法は、Google,Safari, Microsoft Edge, Firefoxなどで異なりますので各設定を確認して見てください。
②URLが間違っている可能性
URLを間違って入力した人為的エラーの可能性があります。
解決方法URLが単に間違っている可能性、もしくは古いリンクのためサーバーが移転している可能性があります。
キーワードをもとにgoogleにて再検索を行い新しいリンク先を手に入れることをお勧めします。
サーバー側に問題がある場合
③サーバーの運営そのものに問題がある可能性
サーバがメンテナンス中、もしくは何かの理由でネット回線が停止している可能性があります。
解決方法しばらく「時間」をおいて再接続を確認してみてください。
④ファイル転送に失敗している可能性
リダイレクトの設定が失敗している場合がある。この場合、.htaccessの転送を確認すべきです。
解決方法サーバー内の.htaccessもしくはhttpサーバーの設定を確認してみましょう。
⑤ファイル/URLが存在しない可能性
そもそもファイルが「存在しない」もしくは「リンク切れ」している可能性があります。もしくは、何らかの理由によりサーバー側でファイル(ページ)が削除、移動された可能性があります。
解決方法管理者であれば再度FTPサーバなどでファイルをアップロードし直しましょう。
⑥ファイル名のコードに問題がある可能性:ファイルがあるのに404の場合
ファイル/URLがあるのに404エラーが表示される場合、該当先のファイル名の文字コードに問題がある。
解決方法該当先のファイル名の文字コードを修正します。
このような場合はファイル名に使用されている文字コードが原因の可能性もあります。
該当のファイル名の文字コードを確認してみてください。
例えば、ファイルのアップロード時に「UTF-8」の文字コードが別の文字コードに変わっていることもあります。
このコマンドで、文字列がutf-8かどうかを確認できます。
fileコマンドで確認
サーバ内で以下のfileコマンドを用いて、ファイル名
$ file -i ファイル名
例えば、
$ file -i link_checker.py
$ link_checker.py: text/x-python; charset=utf-8
nkfコマンドで確認
もしくは以下のnkfコマンドを用いて文字コードの確認も可能です。
$ sudo apt-get install nkf
$ nkf -guess ファイル名
実際には、問題を特定することを個別に行うことが難しいためログからエラーを見つける方法を次の章で紹介します。
それ以外の場合
上記の④から⑥でも原因が分からない場合はサーバー側のアクセスログから原因を究明する方法があります。
次の章では、その方法を調べます。
サーバにおけるアクセスログから原因究明
HTTPサーバ運営者の立場から、解決方法を以下で紹介します。
apache2でWEBサーバーを運用している場合を想定します。
ログ解析を行うことでその原因が解明できます、まず、 httpサーバでaccess.logファイルを参照し、「404のエラー」の原因を探ります。
404 not found の見つけ出し方
Ubuntu 18.04 LTSの場合、ディレクトリ「/var/log/apache2」にaccess.logファイルがあります。
フォルダに移動後をlsコマンドでファイルを確認すると以下のように表示されます。
$ ls
access.log access.log.12.gz access.log.3.gz access.log.7.gz error.log.1 error.log.13.gz error.log.3.gz error.log.7.gz
access.log.1 access.log.13.gz access.log.4.gz access.log.8.gz error.log.10.gz error.log.14.gz error.log.4.gz error.log.8.gz
access.log.10.gz access.log.14.gz access.log.5.gz access.log.9.gz error.log.11.gz error.log.16.gz error.log.5.gz error.log.9.gz
access.log.11.gz access.log.2.gz access.log.6.gz error.log error.log.12.gz error.log.2.gz error.log.6.gz other_vhosts_access.log
*.gzはアーカイブ化 (GZIP形式) されており、acccess.log内に直近のログが収録されています。
これらのログファイルは古いモノほど番号が大きくなります。最新のログファイルは数字が付いていない「access.log」です。
ログファイルの中身を確認する方法
このログファイルは、access.log内のある一行を抜粋すると、以下のように表示されます。
60.40.xxx.xxx - - [11/Sep/2022:00:10:35 +0900] "GET /blog/ HTTP/1.1" 200 16549 "-" "Mozilla/5.0 (Windows) mirall/2.11.1 (build 8438) (ownCloud, windows-10.0.22000 ClientArchitectu
re: x86_64 OsArchitecture: x86_64)"
apache2の設定ファイルでは、このLogFormatは以下のように表示されています。
設定ファイルのフォーマット
LogFormat “%h %l %u %t \”%r\” %t %b \”%{Referer}i\” \”%{User-Agent}i\””
# | Format | 名称 | 説明 |
---|---|---|---|
1 | %h | リモートホストのIPアドレス | 60.40.xxx.x |
2 | %l | 接続先のユーザー名 | -(未設定) |
3 | %u | リモートユーザー名 | -(未設定) |
4 | %t | アクセスされて日時 | [11/Sep/2022:00:10:35 +0900] |
5 | \”%r\” | アクセスされたファイル | GET /blog/ HTTP/1.1″ |
7 | %t | ステータスコード | 200 |
8 | %b | リソースに対する転送量 | 16549 |
9 | \”%{Referer}i\” | アクセス元のURL | -(未設定) |
10 | \”%{User-Agent}i\” | なんのOSでどのブラウザからアクセスしてきたか | Mozilla/5.0 (Windows) mirall/2.11.1 (build 8438) (ownCloud, windows-10.0.22000 ClientArchitectu re: x86_64 OsArchitecture: x86_64) |
ここで知りたいエラーコードの情報は7番目の「ステータスコード」欄です。404コードはここに記録されますね。
ログファイルの簡単な解析方法
以下のCutコマンドで行の中の一部を取り出してこのステータスコードを取り出します。
Cutコマンドの引数指定
① -dで分割する文字数を指定。
② -f で分割した〇番目のフィールを取り出す
$ cat access.log | cut -d ' ' -f 9 | sort | uniq -c | sort -nr
9026 200
3704 302
140 304
108 301
32 "-"
27 206
12 404
10 400
6 401
2 201
ここで、アクセスログの各行に書かれているログから、スペース文字 (「’ ‘」) で分割した9番目 (「-f 9」)がちょうど、ステータスコードになり、これをパイプ(|)でソート・カウントするコマンドになります。
ここで、404のエラーが12件表示されているがわかります。
別の解析方法として、404エラーの数が少ない場合であれば、直接 grepで確認できます。
$cat access.log | grep '" 404'
66.249.XX.XX - - [18/Sep/2022:09:05:48 +0900] "GET /blog/archives/date/2022/page/11 HTTP/1.1" 404 66101 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.5195.102 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
ここから、上の表を参考にするとページ「/blog/archives/date/2022/page/11」(=「アクセスされたファイル」)が、404エラーが現れるページです。
ログ解析から「アクセスされたファイル」から404の該当ページを特定したので、次に「404エラー」が出ないように対策します。
404エラーの解決方法
エラーの原因を確認していくこともできますが、ここでは最短の解決法を二つ紹介します。
最短の解決法は
- 404エラーをリダイレクトする方法
- 404エラーのページ作成方法
404の回避方法としてトップページに転送
回避方法として、サイトトップの直下に「.htaccess」を置き以下のような一行を加えておくと、エラーが出ずに読者の離脱を防ぐことができます。
ErrorDocument 404 https://www.domain.com/
ここで、「https://www.domain.com/」は自身ページのトップページを示します。これで、404が出た場合に読者がすぐにトップページに転送してくれます。
オリジナルの404 pageの作成
上述は404エラーの回避方法としてホームページトップに転送する方法でした。
逆に、自身のページだけのオリジナル404ページを作成し転送するのも良い案です。
企業などではこのようなエラーページをアレンジしてそのものを1つのコマーシャルなどにしているケースもあります。
例1:下記のケースは米国Disneyの404エラーのページです。
*日本国内からだとjpにリダイレクトされてしまうため言語を変えて以下でアクセスしてみてください。
例2:下記のケースは米国StarWarsの404のページです。
404エラー1つとっても購読者に飽きさせない工夫には学びがいっぱいあると感じます。
まとめ
404についてのまとめとして、
- WEBサイトで現れる「404エラー」はこれはサイトを訪れたが、何等かの理由でページにアクセスできないとき表示。
- apache webサーバにおけるアクセスログから原因究明ができる。
- 「404エラー」が発生した場合の最短解決法としてホームページトップに飛ばす方法が有効。
次回の記事をご期待下さい。どうぞよろしくお願いいたします。
コメント