Quantcast
Channel: とある社畜の備忘録
Viewing all articles
Browse latest Browse all 20

WordPressのページスピードを1秒でも早くするためにやってみたこと

$
0
0

SEO対策に実際に効果はあるのかどうかは全くの謎ですが、ページスピードを上げておくのはきっと無駄なことではない!!

ということで、今回のテーマはページスピードを上げるために私が実際に行ったことを列挙していきたいと思います。

実際は項目ごとに記事を分けた方がいいとも思いますが、それはまた今後気が向いたときにでも。

まずはページスピードを測定してみる

実際自分のサイト(http://project-syatiku.com/)はどれくらいのスピードで表示されているのかわからないと対策のしようもないので、まずは測定。

測定は次の2サイトで行ってみました。

GTmetrix

検索で「ページスピード 測定」とかキーワードを入れるとだいたいでてきます。

GoogleとYahoo!両方での測定結果を教えてくれるので便利です。

PageSpeed Insights

Googleが提供する、ウェブページの高速化に役立つツール。
指定したページの表示スピードの状態を診断し改善点を提示してくれます。

アップデートされてモバイルのパフォーマンスも診断できるようになったようです。

診断結果と改善点の検証をする

では早速2サイトを使って診断してみると

gtmetrix

PageSpeed

診断結果

GTmetrix(Google:B,Yahoo!:D)と一見まずまず。
PageSpeed Insightsは62点(今回はPCのみで検証)と今まで何もしてこなかった割にはという点数が返って来ました。

両サイトとも診断結果の下部に改善点を載せてくれているので順番に修正をかけていくことにします。

ブラウザのキャッシュを活用する(Leverage browser caching)

GTmetrixの項目を上から順番に見ていくと、まず出てきたのは「Leverage browser caching」。
PageSpeed Insightsでいうところの「ブラウザのキャッシュを活用する」に当たる項目です。

.htaccessの編集(Apache)

「ブラウザのキャッシュを活用にする」には、.htaccessにディレクティブを追加すればよいので早速これを設定。

このブラウザのキャッシュは様々な種類のものが細かく設定できるので、こちら側から変更をかけないものは有効期限を長く、頻繁に変更するものは短くということも可能です。

※サーバーがApacheモジュールの mod_expires が使えることが前提

有効期限の設定は各行の末尾ですが、使用できる単位は「seconds, days, weeks, years」とあるようなので管理上わかりやすい記述でよいかと思います。

<ifModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 seconds"
ExpiresByType text/html "access plus 1 seconds"
ExpiresByType text/css "access plus 1 days"
ExpiresByType image/gif "access plus 1 weeks"
ExpiresByType image/jpeg "access plus 1 weeks"
ExpiresByType image/png "access plus 1 weeks"
ExpiresByType image/x-icon "access plus 1 weeks"
ExpiresByType text/javascript "access plus 1weeks"
ExpiresByType application/x-javascript "access plus 1weeks"
ExpiresByType application/x-shockwave-flash "access plus 1weeks"
#フォント
ExpiresByType application/vnd.ms-fontobject "access plus 1 year"
ExpiresByType application/x-font-ttf "access plus 1 year"
ExpiresByType application/x-font-opentype "access plus 1 year"
ExpiresByType application/x-font-woff "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
</ifModule>

キャッシュ時間が短いと言われる

この状態で再診断を行うと、「CSSのキャッシュ時間が短い」といったようなことを言われますが、編集期間がファイルの短い場合には問題はないかと思いますし、もう変更することはないと判断した場合にはキャッシュの有効期限を延ばそうと思います。

外部ファイルの読み込み(jQuery・Twitter等)

外部から読み込んでいるJSファイルは有効期限が反映されず警告が出るため、気になる場合はファイル自体をダウンロードして自分のサーバーに置くことをオススメします。

私はFacebook用のJSファイルがダウンロード形式のため外部ファイルについては妥協しました。

CSS @importの使用をやめる

GTmetrixの項目内に現れる「Avoid CSS @import」に対しての修正。
これはPageSpeed Insights側では指摘されてはいなかったが念のため。

CSSを複数ファイルに分割している場合に使用していた@importが指摘されていたのでこれをやめる。

方法としては、それぞれのCSSファイルの読み込みを全てheader.phpに書き込んだ。だけです。

CSSやJSのバージョン表記を一括削除

GTmetrix内の「Remove query strings from static resources」に対しての修正。

CSSやJavaScriptのバージョンといった静的リソースのクエリ文字列を削除しましょうという警告なのでそれを削除する方法を紹介します。

header.phpやfooter.phpに書かれている「?ver=1.11.0」等の記述を直接削除しても良いのですが、jsファイルまで含めると面倒なので
テーマ内のfunctions.phpに直接以下を記述しました。

// css、javascriptのバージョン表記を削除
function remove_cssjs_ver( $src ) {
if ( strpos( $src, 'ver=' ) )
	$src = remove_query_arg( 'ver', $src );
	return $src;
}
add_filter( 'script_loader_src', 'remove_cssjs_ver', 10, 2 );
add_filter( 'style_loader_src', 'remove_cssjs_ver', 10, 2 );

※ただし、font-awesome.css内のクエリに関しては上記javascriptで対処出来なかったため、直接ソース内からクエリを削除しました。 

Enable Keep-Aliveの設定

GTmetrix内の「Enable Keep-Alive」に対しての修正。
まず「Keep-Alive」とは何?というとことでググってみました。

「HTTP Keep-Alive 応答ヘッダーは、サーバーに対する複数の要求間でクライアント/サーバー接続を開いたままにすることによって、Web サーバーのパフォーマンスを向上させます。」

HTTP Keep-Alive 応答ヘッダーを有効にする (IIS 7)

だそうです。

パフォーマンスが向上することに問題はないかということでいざ設定します。.htaccessに以下を追加してサクッと終了。

<IfModule mod_headers.c>
Header set Connection keep-alive
</IfModule>

 Enable gzip compression(gzip圧縮を有効化)

GTmetrix内「Enable gzip compression」についての対応。
PageSpeed Insightsでいうと「圧縮を有効にする」に当たる項目です。

読んで字の如く、圧縮を有効にすることでネットワークで送信されるバイト数を減らすための設定です。

こちらも.htaccessに以下を記述することで設定可能です。

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI _\.utxt$ no-gzip
#DeflateCompressionLevel 4
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE application/x-font-ttf application/x-font-opentype image/svg+xml
</IfModule>

簡単に記述の流れを説明すると
gzip 圧縮転送に対応しているか確認

画像ファイルなどの gzip 圧縮転送しても、サイズが小さくならないファイルに対するアクセスの場合は対象外になるように設定

実際に gzip 圧縮転送の対象になるファイルの mime タイプを指定

となっています。
サイトに合わせて自分なりにカスタマイズしてください。

gzipが設定されているかの確認はこちら(GIDZipTest)

※php-fpmを使用してる場合、mod_deflateが使用できない場合があります。

HTML,CSS,Javascriptを縮小する(MinifyHTML,Minify CSS,Minify Javascript)

GTmetrix・PageSpeed Insightsに共通する項目「ファイルの圧縮」。

今まではできるだけプラグインを使わずに対応してきましたが、これはプラグインを使用して一括対応していきたいと思います。

Autoptimizeで一括圧縮

使用するプラグインは「Autoptimize」。
ページスピードについて考えるまでは耳にしたこともないプラグインでしたが、一括でファイル圧縮してくれるので非常に便利!!

※Javascriptによっては動かなくなるものもあるのでJavascriptについては設定を外す方が良い場合もあります。

1fa5b1a

画像を最適化(ロスレス圧縮)

GTmetrix内「Optimize images」についての対応。
PageSpeed Insightsでいうと「画像を最適化する」に当たる項目です。

記事内に画像を使うことは見栄え・内容わかりやすさの点で非常に有効だと思います。

しかし、画像がいかにきれいであっても読み込みのスピードに影響してしまっては何の意味もありません。

そこで、画像を最適化しストレスなくページを読み込ませる必要があります。
今回はプラグインとフリーの圧縮サイトの2パターン紹介します。

EWWW Image Optimizerで随時圧縮

使用するプラグインは「EWWW Image Optimizer

プラグインの新規追加で検索すると見つかるので探してみてください。

EWWW Image Optimizerの設定

まずはプラグインの設定から
「設定」→「EWWW Image Optimizer」と進み、「Optimization Settings」の項目内「Remove metadata」にチェックを入れます。

EWWW-Image-Optimizer

この設定を行うことで画像に埋め込まれているExif情報を画像から取り除きます。1つ1つのExif情報は大したものではありませんが、画像が多い記事では効果を発揮するようです。

EWWW Image Optimizerで一括圧縮

このプラグインは過去の画像も一括で圧縮できるので、プラグインをインストールした後は1度実行しておきましょう。

「メディア」→「Bulk Optimize」に移動し、「Import images」をクリック。

BulkOptimize

まずは重複を防ぐためにメディアライブラリの画像を取り込みます。

終了後、再度「メディア」→「Bulk Optimize」に移動し、「Start optimizing」をクリック。

BulkOptimize2

画像の最適化が始まればあとは待つだけです。もちろん画像の量により処理の長さは左右されるので早めの導入をオススメします。

一度プラグインをインストールすると、それ以降メディアにアップロードした画像は自動で最適化されます。

Webツールを使用して最適化(http://kraken.io)

メディアにアップロードしたファイルについてはEWWW Image Optimizerを使用して最適化できますが、FTPを使用して独自で作成したフォルダに画像をアップロードした場合は、アップロードする前に最適化をしておく必要があります

そういった場合に便利なサイトが「Kraken.io」です。

ロスレス圧縮するために、設定2を「LOSSLESS」にする必要がありますが、それ以外は特に設定する必要はなく、ファイルをドロップするだけで画像を最適化できます。

lossles

あとは最適化された画像をダウンロードするだけです。

download

圧縮だけでなく画像は最適な大きさに

GTmetrix内「Specify image dimensions」についての対応。

サイト内で画像を使用する場合、表示の方法としてCSSで「width/height」を指定している人は多いと思います
もちろん私もその一人です。

理由としては「アップロードした画像と実際の表示サイズが異なるための調整」です。

ですが、これがまさか指摘されるとは…。

適したサイズで画像を使用する

CSSで指定したサイズと同じの大きさのサイズを使用するというのがスピードアップに必要らしく、「大きなサイズは小さくすれば問題ない」というのは大雑把すぎてダメなようです。

そこで適したサイズに画像をリサイズするためにプラグイン「Regenerate Thumbnails」を使用します。

まずは必要サイズの設定を

WordPressのデフォルトのメディアの設定は以下の通りになっておりサムネイル、中サイズ、大サイズ、フルサイズが生成され “wp-content/uploads/YYYY/MM/”に格納されます。

mediasize

またこの値を全て0にすることでフルサイズのみ生成することも可能です。

ここで設定したサイズに、過去の画像を全て再生成してくれるのが「Regenerate Thumbnails」です。

Regenerate Thumbnailsでリサイズ

「ツール」→「Regen.Thumbnails」→「Regenerate All Thumbnails」をクリックすると上記で設定したメディアのサイズに全てリサイズされます。

これで実際に必要なサイズに画像がリサイズされ、適切な表示をすることができます。

あとがき

今回はページスピードを上げるために必要なことというテーマで記事を書きましたが、基本はSEO対策用です。

サーバー本体のスペックにより、逆に処理が重くなったりする可能性もあるのですべての設定が有効であるとは言えませんが、ある程度のスペックが保証されているのであれば効果は現れるのではないかと思います。

上記の設定をすべて適用したあとの結果を載せるとこうなりました。

gtmetrix pagespeed

結果的には全て改善されたと言っていいのではないかと思います。

ただ、Facebookやgoogleからjsファイル・CSSを読み込んでいるため、すべてを改善することはこのブログに関してはできませんでした。

すべてのファイルを自サーバーに置くことができればより改善される可能性は大いにありえますので自分なりにやってみてはいかがでしょうか。


Viewing all articles
Browse latest Browse all 20

Trending Articles