サイトが高速化?.htaccessをチェック。キャッシュ指定は要注意。 / いがわ

.

Memo

サイトが高速化?.htaccessをチェック。キャッシュ指定は要注意。

サイトの.htaccessファイルが間違っているかも。

サイトが重たいときやSEO対策をしたいとき、.htaccessで対策することが度々ある。

そのような場合、あちこちとサイトを検索して、コードを拝借して利用していることもあるだろう。

ありがたいことに、ネット上には色々とコピペOKなコードが提供されている。

ただし肝心のコピー元や自分自身のアレンジが間違っていた場合、その.htaccessファイルはサイトを高速化してはくれない。


htaccess testerでコードをチェック。

htaccess tester

.htaccessのコードチェックは、htaccess testerが便利。

madewithlove」というベルギーの会社で、チェックツールは無料で利用できる。

チェックしたいサイトのURLと、.htaccessのコードを貼り付けて、「Test」をクリックすればOK。

ここで基本的なコードのルールがチェックできる。

htaccess testerでコードをチェックする画面。

インターフェイスが見やすい。

英語だがシンプルな画面なので、翻訳機能を使えば大体わかる。

htaccess testerでコードをチェックする画面。

チェックの結果。

.htaccessのコードのテスト結果は、「Debugging info(デバッグ情報)」という見出しで一覧が表示される。

結果は、ルールに合うか合わないかで判断される模様。

  • 白:「この行は、ツールではサポートされていません。」
  • 緑:「この条件は満たされました。」
  • 赤:「この規則は満たされませんでした。」

という感じとなる。

WordPressが自動的に書き出す「# BEGIN WordPress〜」のコードは赤判定となる。

htaccessのDebugging info(デバッグ情報。)の画面。


キャッシュの有効期限は正しいだろうか?

ただしひとつのツールですべてチェックができるわけでないので、やはり人の手や頭が必要となる。

このときに気をつけた方が良いのが、下記のようなキャッシュ指定のコードではないだろうか。

なんとなくコピペで作業していると気がつきにくいが、よく見るとキャッシュの有効期限の指定をする「mod_expires」の箇所で、単数形と複数形がごちゃまぜになっている。

「1 year」はわかるが、「1 seconds」や「1 weeks」などは違和感がある。

おかしな.htaccess。

<ifModule mod_expires.c>
 ExpiresActive On

 ExpiresDefault "access plus 1 seconds"

 ExpiresByType text/css "access plus 1 weeks"
 ExpiresByType text/js "access plus 1 months"
 ExpiresByType text/javascript "access plus 1 months"
 ExpiresByType image/jpeg "access plus 1 months"
 ExpiresByType image/jpg "access plus 1 months"
 ExpiresByType image/webp "access plus 1 months"
 ExpiresByType image/svg+xml "access plus 1 months"
 ExpiresByType image/png "access plus 1 months"
 ExpiresByType image/gif "access plus 1 months"
 ExpiresByType video/mp4 "access plus 1 month"
 ExpiresByType video/webm "access plus 1 month"
 ExpiresByType application/pdf "access plus 1 months"
 ExpiresByType application/javascript "access plus 1 months"
 ExpiresByType application/x-javascript "access plus 1 months"
 ExpiresByType application/x-shockwave-flash "access plus 1 months"
 ExpiresByType application/x-font-ttf "access plus 1 year"
 ExpiresByType application/x-font-woff "access plus 1 year"
 ExpiresByType application/x-font-opentype "access plus 1 year"
 ExpiresByType application/vnd.ms-fontobject "access plus 1 year"
</IfModule>

また、サイトのリリース後は「ExpiresDefault "access plus 1 second"」よりも、「ExpiresDefault "access plus 1 hour"」や「ExpiresDefault "access plus 1 day"」の方が良いだろう。

.htaccessの修正案。

<ifModule mod_expires.c>
 ExpiresActive On

 ExpiresDefault "access plus 1 hour"

 ExpiresByType text/css "access plus 1 month"
 ExpiresByType text/js "access plus 1 month"
 ExpiresByType text/javascript "access plus 1 month"
 ExpiresByType image/jpeg "access plus 1 month"
 ExpiresByType image/jpg "access plus 1 month"
 ExpiresByType image/webp "access plus 1 month"
 ExpiresByType image/svg+xml "access plus 1 month"
 ExpiresByType image/png "access plus 1 month"
 ExpiresByType image/gif "access plus 1 month"
 ExpiresByType video/mp4 "access plus 1 month"
 ExpiresByType video/webm "access plus 1 month"
 ExpiresByType application/pdf "access plus 1 month"
 ExpiresByType application/javascript "access plus 1 month"
 ExpiresByType application/x-javascript "access plus 1 month"
 ExpiresByType application/x-shockwave-flash "access plus 1 month"
 ExpiresByType application/x-font-ttf "access plus 1 year"
 ExpiresByType application/x-font-woff "access plus 1 year"
 ExpiresByType application/x-font-opentype "access plus 1 year"
 ExpiresByType application/vnd.ms-fontobject "access plus 1 year"
</IfModule>
「1」は単数形? 複数形?

普通に考えると、1秒や1週間、1ヶ月を指定する際には、複数形の「s」は必要ない。

英語に弱い日本人のイージーミスなのかと思いきや、英語圏のサイトを調べてみても「単数形」と「複数形」が混在していた。


Apacheのサイトではキャッシュ有効期限の「1」は単数形。

正直サーバーに詳しくなければよくわからない。

そこで、本家とも言えるApacheのサイトの「mod_expires」のページを確認してみた。

すると、1ヶ月は単数形、4週間や30日は複数形であり、「1 months」ではなく「1 month」となっていた。

参考:mod_expires – Apache HTTP サーバ バージョン 2.4

複数形でも「mod_expires」が機能すれば問題ないが、機能しなかった場合はまったく意味がなくなってしまう。

コンピュータ言語の場合、日常言語と違い、ニュアンスや忖度というものが通用しない。

サイトが高速化?.htaccessをチェック。キャッシュ指定は要注意。


ChatGPTもキャッシュ有効期限の「1」は単数形で指定。

ChatGPTでも単数形。

ChatGPTにも英語で相談してみた。

(日本語よりも、情報量の多い英語の方が精度が良いため。)

何度か繰り返し高速化のためのコード生成をお願いしたが、やはりキャッシュ指定の「1 ○○」はすべて「単数形」での指定だった。

ChatGPTに.htaccessファイルやキャッシュを相談、


実際に検証してみた結果。

当サイトはデザイン系のポートフォリオサイトなので画像が多い。
高速化はしているが、クライアントサイトではないので最重要とまではしていない。

.htaccessファイルの「mod_expires」では、「1」の箇所を「単数形」で指定している。
PageSpeed InsightsとGTmetrixのサイト読み込み速度の結果は、以下の通りとなっている。

サイト読み込み速度テスト、PageSpeed Insights。
PageSpeed Insightsでの計測結果。

First Contentful Paint (FCP)以外はいい感じ。

PageSpeed Insightsでのサイト読み込み速度の結果。。

サイト読み込み速度テスト、GTmetrix。
GTmetrixでの計測結果。

「Total Page Size」の項目を見ると、「img(ポートフォリオ用の画像類)」がネックとなっていることがわかる。

GTmetrixでのサイト読み込み速度の結果。

それでもある程度、サイトは高速化しているのではないだろうか。

サイトが高速化?.htaccessをチェック。キャッシュ指定は要注意。

以上、参考になれば幸いです。


Webデザインは実務数年、職業訓練校講師数年、フリーランス数年、計15年以上のキャリアがありますが、一気にがぁっと書いているので「です・ます調」ではありません。(元々はメモ書きでした。) 事実や経験、調査や検証を基にしていますが、万一なにかしら不備・不足などがありましたらすみません。お知らせいただければ訂正いたします。 写真は主にUnsplashPixabayのフリー素材を利用させていただいております。その他の写真や動画もフリー素材やパブリックドメイン、もしくは自前のものを使用しております。

井川 宜久 / Norihisa Igawa
デザイナー、ディレクター、講師、コーチ / 井川宜久

免責事項について

  • 記事ページ(Memosのページ)は当初は文字通りメモ書きでした。その後、修正や更新をしております。
  • 事実や経験、調査や検証を基にしていますが、万一なにかしら不備・不足などがありましたらすみません。お知らせいただければ早急に対応いたします。
  • 一個人のポートフォリオサイトですので、万一損害・トラブル等が発生した場合でも、一切の責任を負いかねます。