ããã«ã¡ã¯ãæè¡ç³»ããã°Qiitaã§èšäºãå·çããŠãã yukkes ã§ãã
Webãµã€ãã®è¡šç€ºé床ã¯ããŠãŒã¶ãŒäœéšãšSEOã«çŽæ¥åœ±é¿ããéèŠãªææšã§ãã衚瀺ãé ããµã€ãã¯ããŠãŒã¶ãŒã®é¢è±çãé«ããåªããã³ã³ãã³ããååã«è©äŸ¡ãããªãå¯èœæ§ããããŸãã
ãã®åºŠãç§ãäœæãããAWS詊éšå¯Ÿçãã®Webãµã€ãã«ãããŠãGoogle瀟ã®PageSpeed Insightsã§ æºç¹ãšãªã100ç¹ ãéæããããšãã§ããŸããã
ããŒãžã®é床è©äŸ¡ã¯ä»¥äžãã確èªã§ããŸãã
ãå ·äœçã«ã©ã®ãããªæœçã宿œããã®ãããšããã質åã倿°ããã ããŠãããŸãã®ã§ãæ¬çš¿ã§ã¯å®è£ ããæé©åæè¡ãšåŸãããç¥èŠã詳现ã«å ±æããããŸãã
1. 次äžä»£ãã¬ãŒã ã¯ãŒã¯ã®æ¡çšïŒãAstroãã«ããããã©ãŒãã³ã¹æé©å
æ¬ãããžã§ã¯ãã§ã¯ããã³ããšã³ãæè¡ã®éžå®ã«ãã㊠Astro ãæ¡çšããŸããã
Astroã¯æ¯èŒçæ°ãããã¬ãŒã ã¯ãŒã¯ã§ãããããŒã·ã£ã«ãã€ãã¬ãŒã·ã§ã³ïŒå¿ èŠãªæã«ã ãJavaScriptãèªã¿èŸŒãä»çµã¿ïŒãå®è£ ããé«ããã©ãŒãã³ã¹ãªãã¬ãŒã ã¯ãŒã¯ã§ãã
åŸæ¥ã®ReactãVue.jsãªã©ã®SPAïŒã·ã³ã°ã«ããŒãžã¢ããªã±ãŒã·ã§ã³ïŒã¯ãåæããŒãæã«å€§éã®JavaScriptãã³ãã«ãèªã¿èŸŒãå¿ èŠããããããFirst Contentful Paintã«æéãèŠããåŸåããããŸããäžæ¹Astroã¯ãéçã³ã³ãã³ããHTMLãšããŠå è¡é ä¿¡ããã€ã³ã¿ã©ã¯ãã£ãèŠçŽ ã®ã¿ãéžæçã«ãã€ãã¬ãŒã·ã§ã³ãããã¢ã€ã©ã³ãã¢ãŒããã¯ãã£ããæ¡çšããŠããŸããããã«ããåæè¡šç€ºã®å€§å¹ ãªé«éåãå®çŸããŠããŸãã
PageSpeed Insightsã®è©äŸ¡ã«ãããŠãããã®JavaScriptã®æé©åãé«è©äŸ¡ã«ã€ãªãã£ããšåæããŠããŸãã
2. ã°ããŒãã«é ä¿¡åºç€ã®æŽåïŒCloudflare CDNã®å°å ¥
ãŠãŒã¶ãŒã®å°ççååžãèæ ®ããCloudflare CDNãå°å ¥å®è£ ããŸããã
CDNã¯Webãµã€ãã®éçãªãœãŒã¹ãäžçäžã®ãšããžãµãŒããŒã«åæ£é 眮ããæè¡ã§ããããã«ããå°ççã«æãè¿æ¥ãããµãŒããŒããã³ã³ãã³ããé ä¿¡ãããããããããã¯ãŒã¯ã¬ã€ãã³ã·ãå€§å¹ ã«åæžãããŸãã
ç¹çãã¹ãç¹ãšããŠãPageSpeed Insightsã®èšæž¬ãµãŒããŒïŒäž»ã«åç±³å°åïŒããã®ã¢ã¯ã»ã¹é床ãé¡èã«æ¹åããŸãããããã¯å°ççã«é¢ããæ¥æ¬ããã®ãªãªãžã³ãµãŒããŒé ä¿¡ãšæ¯èŒããŠãã°ããŒãã«ã§ã®äœæé床ãå€§å¹ ã«åäžãããçµæãšãªããŸããã
3. ãªãœãŒã¹æé©åïŒç»åã®é å»¶ããŒãã£ã³ã°å®è£
åæè¡šç€ºé床ãåäžãããããããã¥ãŒããŒãå€ã®ç»åãªãœãŒã¹ã«å¯Ÿã㊠é å»¶ããŒãã£ã³ã°ïŒLazy LoadingïŒ ãå®è£ ããŸããã
ãã®å®è£
ã¯HTML5ã®æšæºä»æ§ã«æºæ ããŠãããimgèŠçŽ ã« loading="lazy"
屿§ãä»äžããã ãã§å®çŸã§ããŸãã
<img src="lazy-image.jpg" alt="é
å»¶èªã¿èŸŒã¿ãããç»å" loading="lazy" width="600" height="400">
ãã®æé©åã«ãããåæããŒãžããŒãæã®ãªãœãŒã¹èªã¿èŸŒã¿éãåæžãããFirst Contentful Paintããã³Largest Contentful Paintã®ææšãå€§å¹ ã«æ¹åãããŸããããŸãã垯åå¹ ã®å¹ççãªå©çšã«ãããã¢ãã€ã«ããã€ã¹ããããã¯ãŒã¯ç°å¢ãäžå®å®ãªãŠãŒã¶ãŒã«å¯ŸããŠãå ç¢ãªè¡šç€ºãæäŸã§ããããã«ãªããŸããã
4. ã¬ã€ã¢ãŠãå®å®æ§ã®ç¢ºä¿ïŒãµã€ãºå±æ§ã®æç€ºçæå®
ãŠãŒã¶ãŒäœéšãæãªãèŠå ã®äžã€ãšããŠãããŒãžèªã¿èŸŒã¿éçšã§ã®ã¬ã€ã¢ãŠãã·ããããããŸããPageSpeed Insightsã§ã¯ããã®åé¡ã Cumulative Layout ShiftïŒCLSïŒ ãšããŠæ°å€åãã峿 Œã«è©äŸ¡ããŠããŸãã
ãã®èª²é¡ã«å¯ŸåŠããããã以äžã®å¯Ÿçãè¬ããŸããïŒ
- ãã¹ãŠã®
<img>
èŠçŽ ã«å¯ŸããŠãæç€ºçãªwidth
ããã³height
屿§ãæå®
<img src="fixed-size-image.jpg" alt="ãµã€ãºãåºå®ãããç»å" width="800" height="600">
- åçã³ã³ãã³ããæ¿å ¥ãããèŠçŽ ã«å¯Ÿãã空éäºçŽã®å®è£
.dynamic-content-wrapper {
min-width: 100px; /* ã¬ã¹ãã³ã·ãç°å¢äžã§ã®æå°å¹
æå® */
}
ãããã®æœçã«ããããªãœãŒã¹èªã¿èŸŒã¿äžã®ããŒãžäžã®èŠçŽ ç§»åãæå°åãããèŠèŠçå®å®æ§ãåäžããŸãããç¹ã«ã¢ãã€ã«ããã€ã¹ã«ãããŠã¯ãã¥ãŒããŒãå¹ ã®å€åã«å¯ŸããŠãå ç¢ãªã¬ã€ã¢ãŠããç¶æããããšãå¯èœã«ãªããŸããã
5. 次äžä»£ãã©ãŒãããæŽ»çšïŒWebPãšPNGã®ãã¡ã€ã«åœ¢åŒæŠç¥
ç»åãªãœãŒã¹ã®æé©åã¯é«éåã«ãããŠéèŠãªèŠçŽ ã§ããåœãµã€ãã§ã¯ WebP ãšåŸæ¥ã® PNG/JPEG ãã©ãŒããããçµã¿åãããæŠç¥ãæ¡çšããŸããã
WebPã¯Googleãéçºããæ¬¡äžä»£ç»åãã©ãŒãããã§ãããåŸæ¥ã®JPEGãPNGãšæ¯èŒããŠåçã®èŠèŠå質ãç¶æããªããã25-35%ã®ãã¡ã€ã«ãµã€ãºåæžãå®çŸããŸãããã ãããã©ãŠã¶ã®äºææ§ãèæ ®ããå¿ èŠããããŸãã
ããã§ãHTML5ã® <picture>
èŠçŽ ãæŽ»çšããæ¬¡ã®ãããªãã©ãŒã«ããã¯æ§é ãå®è£
ããŸããïŒ
<picture>
<source srcset="image.webp" type="image/webp">
<img src="image.png" alt="WebPé察å¿ãã©ãŠã¶åãã®PNG">
</picture>
ãã®å®è£ ã«ãããWebP察å¿ãã©ãŠã¶ã«å¯ŸããŠã¯æé©åãããWebPããé察å¿ãã©ãŠã¶ã«å¯ŸããŠã¯åŸæ¥åœ¢åŒã®ç»åãæäŸããããšãå¯èœã«ãªããŸãããçµæãšããŠãç»è³ªãç ç²ã«ããããšãªã転éããŒã¿éãå€§å¹ ã«åæžããããšã«æåããŠããŸãã
6. Webãã©ã³ãæé©åïŒå è¡èªã¿èŸŒã¿ãšãµãã»ããå
Webãã©ã³ãã®é©çšã¯èŠèŠçäžè²«æ§ãæäŸããäžæ¹ã§ãããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžããèŠçŽ ã§ããåœãµã€ãã§ã¯ä»¥äžã®æé©åææ³ãå®è£ ããŸããïŒ
-
ãªãœãŒã¹åªå åºŠã®æé©åïŒã¯ãªãã£ã«ã«ãªWebãã©ã³ãã«å¯ŸããŠããªãœãŒã¹åªå 床ãæç€ºçã«èšå®ããŸããã
<link rel="preload" as="font" type="font/woff2" crossorigin href="/fonts/myfont.woff2">
-
ãã©ã³ãã¬ã³ããªã³ã°å¶åŸ¡ïŒãã©ã³ãèªã¿èŸŒã¿äžã®ãŠãŒã¶ãŒäœéšãåäžããããããCSS仿§ã®
font-display
ããããã£ã掻çšããŸããã@font-face { font-family: 'MyWebFont'; src: url('/fonts/myfont.woff2') format('woff2'); font-display: swap; /* ãã©ã³ãèªã¿èŸŒã¿äžãããã¹ããå¯èŠå */ }
-
ãµãã»ãããã©ã³ãã®æŽ»çšïŒç¹å®ã®ã³ã³ãã³ãé åã«ãããŠã¯ãå¿ èŠãªæåã»ããã®ã¿ãå«ãæé©åããããã©ã³ããã¡ã€ã«ã䜿çšããŸãããç¹ã«æ¥æ¬èªãã©ã³ãã¯æ°åã®ã°ãªããå«ãããããµãã»ããåã«ãããã¡ã€ã«ãµã€ãºãæå€§90%åæžããããšãã§ããŸããã
çµè«ïŒç·åçã¢ãããŒãã«ããææ
äžèšã§è§£èª¬ãã6ã€ã®æé©åæœçãå æ¬çã«å®è£ ããããšã§ãGoogle PageSpeed Insightsã«ãããŠæºç¹ãšãªã100ç¹ãéæããããšã«æåããŸããããããã¯çžäºã«è£å®ãåããç·åçãªããã©ãŒãã³ã¹åäžã«å¯äžããŠããŸãã
ãããæ³šæãã¹ãç¹ãšããŠããããã®æé©åææ³ã¯åœç€Ÿã®ã³ã³ãã³ãæ§æãšæè¡ã¹ã¿ãã¯ã«æé©åããããã®ã§ããããã¹ãŠã®ãããžã§ã¯ãã«äžåŸã«é©çšã§ããããã§ã¯ãããŸãããåãµã€ãã®èŠä»¶ãå¶çŽã«å¿ããŠãé©åãªæè¡éžå®ãšæé©åæŠç¥ãæ€èšããå¿ èŠããããŸãã
æ¬çš¿ã§ç޹ä»ããææ³ãã¿ãªããŸã®ãããžã§ã¯ãã«ãããããã©ãŒãã³ã¹æ¹åã®äžå©ãšãªãã°å¹žãã§ãããŸããå®è£ ã«ããã£ãŠã®ã質åãè¿œå æ å ±ã®ãèŠæãããããŸããããã³ã¡ã³ãæ¬ã«ãŠãé£çµ¡ãã ããã
æåŸãŸã§ãèªã¿ããã ããããããšãããããŸããã