{"id":4589,"date":"2026-05-04T18:53:59","date_gmt":"2026-05-04T15:53:59","guid":{"rendered":"https:\/\/fastpixel.io\/?p=4589"},"modified":"2026-05-04T18:55:49","modified_gmt":"2026-05-04T15:55:49","slug":"every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one","status":"publish","type":"post","link":"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/","title":{"rendered":"Every Google PageSpeed Insights Error Explained (And How to Fix Each One)"},"content":{"rendered":"\n<p>You ran your site through Google PageSpeed Insights and got back a wall of colored flags. Some you understand, most you don&#8217;t.<\/p>\n\n\n\n<p>This guide explains every PageSpeed Insights error in detail and shows you exactly how to fix each one, across Performance, Accessibility, Best Practices, and SEO, fully updated for Lighthouse 13. Whether you&#8217;re troubleshooting a single red flag or working through all common PageSpeed Insights errors systematically, every audit is covered below.<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #000000;color:#000000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #000000;color:#000000\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#quick-summary\" >Quick summary<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#how-pagespeed-insights-actually-works\" >How PageSpeed Insights actually works<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#performance-metrics\" >Performance metrics<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#1-first-contentful-paint-fcp\" >1. First Contentful Paint (FCP)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#2-largest-contentful-paint-lcp\" >2. Largest Contentful Paint (LCP)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#3-total-blocking-time-tbt\" >3. Total Blocking Time (TBT)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#4-cumulative-layout-shift-cls\" >4. Cumulative Layout Shift (CLS)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#5-speed-index-si\" >5. Speed Index (SI)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#performance-insights\" >Performance insights<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#6-document-latency\" >6. Document latency<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#7-render-blocking-resources\" >7. Render blocking resources<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#8-image-delivery\" >8. Image delivery<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#9-lcp-discovery\" >9. LCP discovery<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#10-lcp-phases\" >10. LCP phases<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#11-cls-culprits\" >11. CLS culprits<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#12-interaction-to-next-paint\" >12. Interaction to Next Paint<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#13-network-dependency-tree\" >13. Network dependency tree<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#14-font-display\" >14. Font display<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#15-use-cache\" >15. Use cache<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#16-modern-http\" >16. Modern HTTP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#17-dom-size\" >17. DOM size<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#18-third-parties\" >18. Third parties<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#19-legacy-javascript\" >19. Legacy JavaScript<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#20-duplicated-javascript\" >20. Duplicated JavaScript<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#21-viewport\" >21. Viewport<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#performance-diagnostics\" >Performance diagnostics<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#22-reduce-unused-javascript\" >22. Reduce unused JavaScript<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#23-reduce-unused-css\" >23. Reduce unused CSS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#24-minify-javascript\" >24. Minify JavaScript<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#25-minify-css\" >25. Minify CSS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#26-avoid-enormous-network-payloads\" >26. Avoid enormous network payloads<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#27-reduce-javascript-execution-time\" >27. Reduce JavaScript execution time<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-33\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#28-minimize-main-thread-work\" >28. Minimize main-thread work<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#29-avoid-long-main-thread-tasks\" >29. Avoid long main-thread tasks<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-35\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#30-avoid-non-composited-animations\" >30. Avoid non-composited animations<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-36\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#31-image-elements-do-not-have-explicit-width-and-height\" >31. Image elements do not have explicit width and height<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-37\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#32-user-timing-marks-and-measures\" >32. User Timing marks and measures<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-38\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#retired-performance-audits\" >Retired performance audits<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-39\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#accessibility-audits\" >Accessibility audits<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-40\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#navigation\" >Navigation<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-41\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#contrast\" >Contrast<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-42\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#images-media\" >Images &amp; media<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-43\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#forms\" >Forms<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-44\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#links-buttons\" >Links &amp; buttons<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-45\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#aria\" >ARIA<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-46\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#lists-structure\" >Lists &amp; structure<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-47\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#tables\" >Tables<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-48\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#other-accessibility\" >Other accessibility<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-49\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#best-practices-audits\" >Best Practices audits<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-50\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#seo-audits\" >SEO audits<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-51\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#wrapping-up\" >Wrapping up<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-52\" href=\"https:\/\/fastpixel.io\/fr\/blog\/every-google-pagespeed-insights-error-explained-and-how-to-fix-each-one\/#faqs\" >FAQs<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"quick-summary\"><\/span><strong>Quick summary<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>If you&#8217;re short on time, here are the most common PageSpeed problems and what fixes them:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Slow server \/ no caching<\/strong><\/li>\n\n\n\n<li><strong>Unoptimized images<\/strong><\/li>\n\n\n\n<li><strong>Render-blocking CSS\/JS<\/strong><\/li>\n\n\n\n<li><strong>Too much JavaScript<\/strong><\/li>\n\n\n\n<li><strong>Layout shifts (CLS)<\/strong><\/li>\n\n\n\n<li><strong>Accessibility issues<\/strong><\/li>\n\n\n\n<li><strong>SEO basics<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Now let&#8217;s go through every audit in detail.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"how-pagespeed-insights-actually-works\"><\/span><strong>How PageSpeed Insights actually works<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>GPSI pulls data from two sources:<\/p>\n\n\n\n<p><strong>Field data<\/strong> \u2014 real Chrome users over 28 days (Chrome User Experience Report). This is what Google uses for ranking signals.<\/p>\n\n\n\n<p><strong>Lab data<\/strong> \u2014 generated on the spot by Lighthouse, simulating a mid-tier phone on a throttled connection. Useful for diagnostics, but synthetic.<\/p>\n\n\n\n<p>The report scores four categories from 0 to 100: Performance, Accessibility, Best Practices, and SEO. 90+ is green, 50\u201389 orange, below 50 red.<\/p>\n\n\n\n<p>Your PageSpeed score doesn&#8217;t directly affect Google rankings. Core Web Vitals (LCP, CLS, INP) from real users do. But fixing GPSI issues improves those metrics.<\/p>\n\n\n\n<p>As of late 2025, GPSI runs on <strong>Lighthouse 13<\/strong>, which reorganized many audits into grouped &#8220;Insights.&#8221;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"performance-metrics\"><\/span><strong>Performance metrics<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>These five measurements generate your Performance score. They&#8217;re the dashboard gauges, the engine problems are in the sections that follow.<\/p>\n\n\n\n<p>If you\u2019re on WordPress, <a href=\"https:\/\/wordpress.org\/plugins\/fastpixel-website-accelerator\/\">FastPixel<\/a> can easily fix most of these issues for you by simply optimizing your pages. We will indicate on the right side of each issue whether it can be resolved by FastPixel or requires another solution.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"1-first-contentful-paint-fcp\"><\/span><strong>1. First Contentful Paint (FCP)<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>Weight: 10%<\/strong> \u00b7 Good: under 1.8s \u00b7 Poor: over 3.0s<\/p>\n\n\n\n<p>How long until the visitor sees the first piece of content on screen.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enable page caching \u2192 FastPixel<\/li>\n\n\n\n<li>Generate and inline Critical CSS \u2192 FastPixel<\/li>\n\n\n\n<li>Defer render-blocking JavaScript \u2192 FastPixel<\/li>\n\n\n\n<li>Use a CDN \u2192 FastPixel<\/li>\n\n\n\n<li>Reduce server response time (upgrade hosting if needed)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"2-largest-contentful-paint-lcp\"><\/span><strong>2. Largest Contentful Paint (LCP)<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>Weight: 25% \u00b7 Core Web Vital<\/strong> \u00b7 Good: under 2.5s \u00b7 Poor: over 4.0s<\/p>\n\n\n\n<p>How long until the main content (hero image, heading, video poster) is visible.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Compress and convert the LCP image to WebP\/AVIF \u2192 FastPixel (image optimization, powered by ShortPixel)<\/li>\n\n\n\n<li>Preload the LCP image \u2192 FastPixel (automatic)<\/li>\n\n\n\n<li>Enable caching + CDN \u2192 FastPixel<\/li>\n\n\n\n<li>Remove render-blocking resources \u2192 FastPixel<\/li>\n\n\n\n<li>Don&#8217;t lazy-load the LCP image \u2192 FastPixel (handles automatically)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"3-total-blocking-time-tbt\"><\/span><strong>3. Total Blocking Time (TBT)<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>Weight: 30%<\/strong> \u00b7 Good: under 200ms \u00b7 Poor: over 600ms<\/p>\n\n\n\n<p>Total time the main thread was blocked by JavaScript for more than 50ms. High TBT = clicks and taps feel unresponsive.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Delay non-critical JavaScript \u2192 FastPixel<\/li>\n\n\n\n<li>Remove unused plugins and scripts<\/li>\n\n\n\n<li>Defer third-party scripts (analytics, chat, ads) \u2192 FastPixel<\/li>\n\n\n\n<li>Break long JS tasks into smaller chunks (code-level)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"4-cumulative-layout-shift-cls\"><\/span><strong>4. Cumulative Layout Shift (CLS)<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>Weight: 25% \u00b7 Core Web Vital<\/strong> \u00b7 Good: under 0.1 \u00b7 Poor: over 0.25<\/p>\n\n\n\n<p>How much content shifts around during loading. Buttons moving, text jumping, images popping in.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Set width and height on all images (manual)<\/li>\n\n\n\n<li>Use Critical CSS to reserve layout space \u2192 FastPixel<\/li>\n\n\n\n<li>Optimize font loading (subsetting, embedding, font-display) \u2192 FastPixel<\/li>\n\n\n\n<li>Reserve space for ads and dynamic content (manual)<\/li>\n\n\n\n<li>Use sized placeholders for lazy-loaded images \u2192 FastPixel<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"5-speed-index-si\"><\/span><strong>5. Speed Index (SI)<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>Weight: 10%<\/strong> \u00b7 Good: under 3.4s \u00b7 Poor: over 5.8s<\/p>\n\n\n\n<p>How quickly the page visually fills in during loading.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Everything that improves FCP and LCP also improves Speed Index<\/li>\n\n\n\n<li>Enable Critical CSS + cached page delivery \u2192 FastPixel<\/li>\n\n\n\n<li>Optimize above-the-fold images \u2192 FastPixel<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"performance-insights\"><\/span><strong>Performance insights<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>With Lighthouse 13, Google consolidated many individual audits into grouped &#8220;Insights.&#8221; These are the actionable recommendations at the top of the Performance section.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"6-document-latency\"><\/span><strong>6. Document latency<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><em>Formerly: &#8220;Reduce server response times (TTFB)&#8221; \u00b7 &#8220;Avoid multiple page redirects&#8221; \u00b7 &#8220;Enable text compression&#8221;<\/em><\/p>\n\n\n\n<p>Your server takes too long to respond, redirects are adding round trips, or text compression is missing.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enable page caching (serve static HTML) \u2192 FastPixel<\/li>\n\n\n\n<li>Use a CDN \u2192 FastPixel<\/li>\n\n\n\n<li>Enable Gzip\/Brotli compression \u2192 FastPixel (enabled by default on CDN)<\/li>\n\n\n\n<li>Eliminate unnecessary redirects<\/li>\n\n\n\n<li>Upgrade hosting if TTFB remains above 600ms<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"7-render-blocking-resources\"><\/span><strong>7. Render blocking resources<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><em>Formerly: &#8220;Eliminate render-blocking resources&#8221;<\/em><\/p>\n\n\n\n<p>CSS and JS in the &lt;head&gt; block the browser from painting anything until they&#8217;re downloaded and processed. 85% of mobile pages fail this audit.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Generate and inline Critical CSS \u2192 FastPixel<\/li>\n\n\n\n<li>Defer non-critical CSS loading \u2192 FastPixel<\/li>\n\n\n\n<li>Delay JavaScript execution \u2192 FastPixel<\/li>\n\n\n\n<li>Remove unused CSS\/JS files from &lt;head><\/li>\n<\/ul>\n\n\n\n<p>All of this is<a href=\"https:\/\/fastpixel.io\/blog\/inside-fastpixel-the-secret-sauce-of-wordpress-performance\/\"> processed in the cloud<\/a>, so your server resources aren&#8217;t affected.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"8-image-delivery\"><\/span><strong>8. Image delivery<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><em>Formerly: &#8220;Serve images in next-gen formats&#8221; \u00b7 &#8220;Efficiently encode images&#8221; \u00b7 &#8220;Properly size images&#8221; \u00b7 &#8220;Use video formats for animated content&#8221;<\/em><\/p>\n\n\n\n<p>Images are in old formats, poorly compressed, oversized for their containers, or using GIF instead of video.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Convert images to WebP\/AVIF \u2192 FastPixel (automatic, powered by ShortPixel)<\/li>\n\n\n\n<li>Compress images (Lossy, Glossy, or Lossless) \u2192 FastPixel<\/li>\n\n\n\n<li>Resize images to fit display dimensions \u2192 FastPixel (adaptive images)<\/li>\n\n\n\n<li>Serve optimized images through global CDN \u2192 FastPixel<\/li>\n\n\n\n<li>Replace animated GIFs with MP4\/WebM video<\/li>\n<\/ul>\n\n\n\n<p>FastPixel handles image optimization, next-gen conversion, resizing, and CDN delivery automatically, all powered by ShortPixel&#8217;s compression engine. For advanced image optimization workflows, you can also use <a href=\"https:\/\/wordpress.org\/plugins\/shortpixel-image-optimiser\/\">Shortpixel Image Optimizer<\/a> for granular compression settings, AI Image SEO, Smart Cropping, WebP\/AVIF generation and delivery via CDN.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"9-lcp-discovery\"><\/span><strong>9. LCP discovery<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><em>Formerly: &#8220;Preload Largest Contentful Paint image&#8221; \u00b7 &#8220;LCP image was not lazily loaded&#8221;<\/em><\/p>\n\n\n\n<p>The browser discovers the LCP image too late, or someone applied loading=&#8221;lazy&#8221; to it (which delays it further).<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Preload the LCP image in &lt;head> \u2192 FastPixel (automatic)<\/li>\n\n\n\n<li>Remove loading=&#8221;lazy&#8221; from the LCP image \u2192 FastPixel (automatic)<\/li>\n\n\n\n<li>Reference LCP images directly in HTML, not via CSS background-image<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"10-lcp-phases\"><\/span><strong>10. LCP phases<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><em>Formerly: &#8220;Largest Contentful Paint element&#8221;<\/em><\/p>\n\n\n\n<p>Breaks LCP into four phases so you can see where the bottleneck is: TTFB, resource load delay, resource load time, render delay.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>High TTFB \u2192 enable caching + CDN \u2192 FastPixel<\/li>\n\n\n\n<li>Resource discovered too late \u2192 preload the LCP element \u2192 FastPixel<\/li>\n\n\n\n<li>Resource too large \u2192 compress + convert \u2192 FastPixel<\/li>\n\n\n\n<li>Render delay \u2192 defer non-critical CSS\/JS \u2192 FastPixel<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"11-cls-culprits\"><\/span><strong>11. CLS culprits<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><em>Formerly: &#8220;Avoid large layout shifts&#8221;<\/em><\/p>\n\n\n\n<p>Identifies specific elements causing layout shifts, images without dimensions, late-loading fonts, dynamically injected content.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Set width and height on &lt;img> and &lt;video> elements (manual)<\/li>\n\n\n\n<li>Use font-display: swap + font subsetting \u2192 FastPixel<\/li>\n\n\n\n<li>Generate Critical CSS to reserve layout space \u2192 FastPixel<\/li>\n\n\n\n<li>Reserve fixed-size containers for ads and embeds (manual)<\/li>\n\n\n\n<li>Use sized placeholders for lazy-loaded images \u2192 FastPixel<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"12-interaction-to-next-paint\"><\/span><strong>12. Interaction to Next Paint<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><em>Formerly: &#8220;Minimize work during key interaction&#8221;<\/em><\/p>\n\n\n\n<p>Measures responsiveness, the delay between a user interaction and the next visual update. Lab equivalent of the INP Core Web Vital.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Delay non-critical JavaScript \u2192 FastPixel<\/li>\n\n\n\n<li>Break up long event handlers (code-level)<\/li>\n\n\n\n<li>Reduce DOM size (code-level)<\/li>\n\n\n\n<li>Use Web Workers for heavy computation (code-level)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"13-network-dependency-tree\"><\/span><strong>13. Network dependency tree<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><em>Formerly: &#8220;Avoid chaining critical requests&#8221; \u00b7 &#8220;Preconnect to required origins&#8221;<\/em><\/p>\n\n\n\n<p>Resources load in sequence (HTML \u2192 CSS \u2192 font \u2192 image), adding latency. Missing preconnect hints to third-party domains.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Add DNS prefetch and preconnect hints \u2192 FastPixel (automatic)<\/li>\n\n\n\n<li>Flatten dependency chains by inlining critical resources \u2192 FastPixel<\/li>\n\n\n\n<li>Serve assets through CDN \u2192 FastPixel<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"14-font-display\"><\/span><strong>14. Font display<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><em>Formerly: &#8220;Ensure text remains visible during webfont load&#8221;<\/em><\/p>\n\n\n\n<p>Text becomes invisible while web fonts download (FOIT, flash of invisible text).<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Apply font-display: swap to @font-face declarations \u2192 FastPixel<\/li>\n\n\n\n<li>Subset fonts (only characters you use) \u2192 FastPixel<\/li>\n\n\n\n<li>Embed critical font data inline \u2192 FastPixel<\/li>\n\n\n\n<li>Preload critical fonts<\/li>\n<\/ul>\n\n\n\n<p><a href=\"https:\/\/fastpixel.io\/blog\/optimize-wordpress-fonts\/\">Web fonts<\/a> are one of the most overlooked performance bottlenecks in WordPress.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"15-use-cache\"><\/span><strong>15. Use cache<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><em>Formerly: &#8220;Serve static assets with an efficient cache policy&#8221;<\/em><\/p>\n\n\n\n<p>Static resources (images, CSS, JS, fonts) don&#8217;t have caching headers. The browser re-downloads everything on every visit.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Serve assets through CDN with long-term cache headers \u2192 FastPixel (automatic)<\/li>\n\n\n\n<li>Set Cache-Control: max-age=31536000 for versioned assets<\/li>\n\n\n\n<li>Use file versioning (e.g., style.v2.css)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"16-modern-http\"><\/span><strong>16. Modern HTTP<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><em>Formerly: &#8220;Use HTTP\/2&#8221;<\/em><\/p>\n\n\n\n<p>Your server uses HTTP\/1.1, which downloads resources one at a time. HTTP\/2 enables multiplexing.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Serve assets through CDN \u2192 FastPixel (HTTP\/2 by default)<\/li>\n\n\n\n<li>Ensure SSL\/TLS certificate is installed (required for HTTP\/2)<\/li>\n\n\n\n<li>Upgrade hosting to a provider that supports HTTP\/2<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"17-dom-size\"><\/span><strong>17. DOM size<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><em>Formerly: &#8220;Avoid an excessive DOM size&#8221;<\/em><\/p>\n\n\n\n<p>Too many HTML elements (flagged at 1,400+). Slows style calculations, layout, and JS DOM queries.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Simplify page layouts, reduce nesting (manual)<\/li>\n\n\n\n<li>Avoid page builders that generate excessive wrapper &lt;div> elements<\/li>\n\n\n\n<li>Use pagination or &#8220;load more&#8221; instead of rendering everything<\/li>\n\n\n\n<li>Remove hidden\/unnecessary elements<\/li>\n<\/ul>\n\n\n\n<p>This is a code-level issue, no optimization plugin can reduce DOM size. If you&#8217;re on<a href=\"https:\/\/fastpixel.io\/blog\/divi-performance-problems\/\"> Divi<\/a>, simplify your layouts, reduce nesting, and avoid unnecessary wrapper elements.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"18-third-parties\"><\/span><strong>18. Third parties<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><em>Formerly: &#8220;Reduce the impact of third-party code&#8221;<\/em><\/p>\n\n\n\n<p>Analytics, ads, chat widgets, social embeds, third-party scripts often contribute the majority of JS on a page.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Delay third-party JavaScript execution \u2192 FastPixel<\/li>\n\n\n\n<li>Audit third-party scripts and remove non-essential ones<\/li>\n\n\n\n<li>Self-host critical third-party resources where possible<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"19-legacy-javascript\"><\/span><strong>19. Legacy JavaScript<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><em>Formerly: &#8220;Avoid serving legacy JavaScript to modern browsers&#8221;<\/em><\/p>\n\n\n\n<p>JS bundles include polyfills for old browsers that modern browsers don&#8217;t need.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Minify JavaScript \u2192 FastPixel<\/li>\n\n\n\n<li>Update build tools to target modern browsers (code-level)<\/li>\n\n\n\n<li>Remove polyfills for widely-supported features (code-level)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"20-duplicated-javascript\"><\/span><strong>20. Duplicated JavaScript<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><em>Formerly: &#8220;Remove duplicate modules in JavaScript bundles&#8221;<\/em><\/p>\n\n\n\n<p>Multiple plugins ship their own copy of jQuery, Lodash, or React.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Combine JavaScript files \u2192 FastPixel<\/li>\n\n\n\n<li>Audit plugins for overlapping libraries<\/li>\n\n\n\n<li>Use wp_dequeue_script() to remove duplicate scripts (code-level)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"21-viewport\"><\/span><strong>21. Viewport<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><em>Formerly: &#8220;Does not have a <\/em><em>&lt;meta name=&#8221;viewport&#8221;&gt;<\/em><em> tag&#8221;<\/em><\/p>\n\n\n\n<p>Missing viewport meta tag. Mobile browsers render at desktop width and scale down.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Add &lt;meta name=&#8221;viewport&#8221; content=&#8221;width=device-width, initial-scale=1&#8243;> to &lt;head> (theme-level fix)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"performance-diagnostics\"><\/span><strong>Performance diagnostics<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Additional information about performance. Don&#8217;t directly affect the score, but fixing them improves the metrics that do.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"22-reduce-unused-javascript\"><\/span><strong>22. Reduce unused JavaScript<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>JS files with 20KB+ of code downloaded but never executed during page load.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Delay non-critical JavaScript \u2192 FastPixel<\/li>\n\n\n\n<li>Remove unused WordPress plugins<\/li>\n\n\n\n<li>Use code splitting (code-level)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"23-reduce-unused-css\"><\/span><strong>23. Reduce unused CSS<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>CSS rules downloaded but not matching any elements on the current page.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Generate Critical CSS per page \u2192 FastPixel (automatic)<\/li>\n\n\n\n<li>Defer non-critical stylesheets \u2192 FastPixel<\/li>\n\n\n\n<li>Use PurgeCSS to remove unused rules (code-level)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"24-minify-javascript\"><\/span><strong>24. Minify JavaScript<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>JS files contain whitespace, comments, and long variable names. Minification reduces size by 20\u201360%.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enable JS minification \u2192 FastPixel (automatic)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"25-minify-css\"><\/span><strong>25. Minify CSS<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>CSS files contain unnecessary whitespace and comments.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enable CSS minification \u2192 FastPixel (automatic)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"26-avoid-enormous-network-payloads\"><\/span><strong>26. Avoid enormous network payloads<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Total transfer size exceeds 5,000KB.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Compress and convert images \u2192 FastPixel<\/li>\n\n\n\n<li>Minify CSS, JS, HTML \u2192 FastPixel<\/li>\n\n\n\n<li>Enable text compression (Gzip\/Brotli) \u2192 FastPixel<\/li>\n\n\n\n<li>Lazy load below-the-fold images \u2192 FastPixel<\/li>\n\n\n\n<li>Remove unnecessary resources<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"27-reduce-javascript-execution-time\"><\/span><strong>27. Reduce JavaScript execution time<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>More than 2 seconds of CPU time spent parsing, compiling, and executing JS.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Delay non-critical scripts \u2192 FastPixel<\/li>\n\n\n\n<li>Remove heavy plugins<\/li>\n\n\n\n<li>Break up long-running scripts (code-level)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"28-minimize-main-thread-work\"><\/span><strong>28. Minimize main-thread work<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Too much total work on the browser&#8217;s main thread during page load.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Defer JavaScript execution \u2192 FastPixel<\/li>\n\n\n\n<li>Generate streamlined Critical CSS \u2192 FastPixel<\/li>\n\n\n\n<li>Reduce DOM size (code-level)<\/li>\n\n\n\n<li>Simplify CSS selectors (code-level)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"29-avoid-long-main-thread-tasks\"><\/span><strong>29. Avoid long main-thread tasks<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Individual tasks on the main thread taking longer than 50ms, blocking user interaction.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Defer script loading \u2192 FastPixel<\/li>\n\n\n\n<li>Break long JS functions into async chunks (code-level)<\/li>\n\n\n\n<li>Move heavy computation to Web Workers (code-level)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"30-avoid-non-composited-animations\"><\/span><strong>30. Avoid non-composited animations<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>CSS animations running on CPU instead of GPU. Animating width, height, top, left, or margin triggers layout recalculations.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use transform and opacity instead (code-level)<\/li>\n\n\n\n<li>Add will-change: transform for animated elements (code-level)<\/li>\n<\/ul>\n\n\n\n<p>No plugin can fix this, it requires CSS changes in your theme.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"31-image-elements-do-not-have-explicit-width-and-height\"><\/span><strong>31. Image elements do not have explicit <\/strong><strong>width<\/strong><strong> and <\/strong><strong>height<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Images without dimensions cause layout shifts (CLS).<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Add width and height attributes to &lt;img> tags (manual)<\/li>\n\n\n\n<li>Use aspect-ratio CSS property as alternative<\/li>\n\n\n\n<li>Lazy loading with sized placeholders \u2192 FastPixel<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"32-user-timing-marks-and-measures\"><\/span><strong>32. User Timing marks and measures<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>Informational only<\/strong>, shows custom performance.mark() calls. No fix needed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"retired-performance-audits\"><\/span><strong>Retired performance audits<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Removed in Lighthouse 13 (October 2025). You won&#8217;t see these in current reports but they appear in older guides.<\/p>\n\n\n\n<p><strong>33. First Meaningful Paint<\/strong> \u2014 replaced by LCP.<\/p>\n\n\n\n<p><strong>34. Defer offscreen images<\/strong> \u2014 removed because browsers natively deprioritize offscreen images now. FastPixel still implements lazy loading for bandwidth savings.<\/p>\n\n\n\n<p><strong>35. Preload key requests<\/strong> \u2014 removed due to risk of over-recommendation.<\/p>\n\n\n\n<p><strong>36. Preload fonts<\/strong> \u2014 same reasoning as above.<\/p>\n\n\n\n<p><strong>37. Avoids <\/strong><strong>document.write()<\/strong> \u2014 rarely used in modern code.<\/p>\n\n\n\n<p><strong>38. Uses passive listeners<\/strong> \u2014 modern browsers handle this by default.<\/p>\n\n\n\n<p><strong>39. Lazy load third-party resources with facades<\/strong> \u2014 removed due to limited facades and third-party concerns.<\/p>\n\n\n\n<p><strong>40. Document doesn&#8217;t use legible font sizes<\/strong> \u2014 no evidence it&#8217;s an SEO signal.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"accessibility-audits\"><\/span><strong>Accessibility audits<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Accessibility evaluates whether your content works for everyone, including screen reader and keyboard users. Lighthouse uses the axe-core library and catches about 30\u201350% of issues automatically.<\/p>\n\n\n\n<p>These are almost entirely <strong>code-level fixes<\/strong>, no caching or image plugin can fix them. They require HTML, ARIA, and CSS changes.<\/p>\n\n\n\n<p><strong>Quick fix summary:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Add alt text to all images<\/li>\n\n\n\n<li>Add labels to all form fields<\/li>\n\n\n\n<li>Fix color contrast<\/li>\n\n\n\n<li>Use proper heading hierarchy (H1 \u2192 H2 \u2192 H3)<\/li>\n\n\n\n<li>Use semantic HTML (&lt;header>, &lt;nav>, &lt;main>, &lt;footer>)<\/li>\n\n\n\n<li>Don&#8217;t block zoom in viewport settings<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"navigation\"><\/span><strong>Navigation<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>41. <\/strong><strong>[accesskey]<\/strong><strong> values are not unique<\/strong> Duplicate keyboard shortcuts conflict. Make each value unique.<\/p>\n\n\n\n<p><strong>42. Page does not contain a heading, skip link, or landmark region<\/strong> Screen reader users can&#8217;t navigate efficiently. <strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Add a skip navigation link<\/li>\n\n\n\n<li>Use semantic HTML5 elements (&lt;header>, &lt;nav>, &lt;main>, &lt;footer>)<\/li>\n\n\n\n<li>Structure content with headings<\/li>\n<\/ul>\n\n\n\n<p><strong>43. Heading elements are not in sequentially-descending order<\/strong> Jumping from H1 to H4 breaks document structure. Use CSS for sizing, not heading levels.<\/p>\n\n\n\n<p><strong>44. <\/strong><strong>&lt;html&gt;<\/strong><strong> element does not have a <\/strong><strong>[lang]<\/strong><strong> attribute<\/strong> Screen readers need this for pronunciation. Add &lt;html lang=&#8221;en&#8221;&gt; (or your language code).<\/p>\n\n\n\n<p><strong>45. <\/strong><strong>&lt;html&gt;<\/strong><strong> element does not have a valid <\/strong><strong>[lang]<\/strong><strong> value<\/strong> Invalid language code. Use BCP 47 tags: en, fr, de, ro, etc.<\/p>\n\n\n\n<p><strong>46. <\/strong><strong>[id]<\/strong><strong> attributes on focusable elements are not unique<\/strong> Duplicate IDs break ARIA relationships. Every id must be unique on the page.<\/p>\n\n\n\n<p><strong>47. No element has <\/strong><strong>[tabindex]<\/strong><strong> greater than 0<\/strong> Informational. Positive tabindex values override natural tab order. Use only 0 or -1.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"contrast\"><\/span><strong>Contrast<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>48. Background and foreground colors do not have sufficient contrast ratio<\/strong> Text too similar to background color. WCAG requires 4.5:1 for normal text, 3:1 for large text. <strong>How to fix it:<\/strong> Increase contrast in your theme&#8217;s color palette. Use a contrast checker tool.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"images-media\"><\/span><strong>Images &amp; media<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>49. Image elements do not have <\/strong><strong>[alt]<\/strong><strong> attributes<\/strong> Screen readers can&#8217;t describe the image. <strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Add descriptive alt to informational images<\/li>\n\n\n\n<li>Use alt=&#8221;&#8221; for decorative images<\/li>\n\n\n\n<li>Generate ALT text in bulk with AI \u2192 ShortPixel Image Optimizer (AI image SEO feature)<\/li>\n<\/ul>\n\n\n\n<p><strong>50. <\/strong><strong>&lt;input type=&#8221;image&#8221;&gt;<\/strong><strong> elements do not have <\/strong><strong>[alt]<\/strong><strong> text<\/strong> Image buttons need alt describing the action (e.g., alt=&#8221;Submit&#8221;).<\/p>\n\n\n\n<p><strong>51. Image <\/strong><strong>[alt]<\/strong><strong> attributes contain redundant text<\/strong> &#8220;Image of&#8221; or &#8220;photo of&#8221; is redundant \u2014 screen readers already announce it&#8217;s an image.<\/p>\n\n\n\n<p><strong>52. <\/strong><strong>&lt;object&gt;<\/strong><strong> elements do not have <\/strong><strong>[alt]<\/strong><strong> text<\/strong> Embedded objects need text alternatives.<\/p>\n\n\n\n<p><strong>53. <\/strong><strong>&lt;frame&gt;<\/strong><strong> or <\/strong><strong>&lt;iframe&gt;<\/strong><strong> elements do not have a title<\/strong> Add title describing the embedded content (e.g., title=&#8221;Google Maps location&#8221;).<\/p>\n\n\n\n<p><strong>54. <\/strong><strong>&lt;video&gt;<\/strong><strong> elements missing <\/strong><strong>&lt;track&gt;<\/strong><strong> with captions<\/strong> Add &lt;track kind=&#8221;captions&#8221; src=&#8221;captions.vtt&#8221; srclang=&#8221;en&#8221;&gt;.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"forms\"><\/span><strong>Forms<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>55. Form elements do not have associated labels<\/strong> Screen readers can&#8217;t tell what a field expects. Associate a &lt;label&gt; with every input.<\/p>\n\n\n\n<p><strong>56. Form fields have multiple labels<\/strong> One label per field. Use aria-describedby for extra help text.<\/p>\n\n\n\n<p><strong>57. <\/strong><strong>&lt;select&gt;<\/strong><strong> elements do not have associated labels<\/strong> Dropdowns need labels too.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"links-buttons\"><\/span><strong>Links &amp; buttons<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>58. Links do not have a discernible name<\/strong> Links with only icons or no text. Add visible text or aria-label.<\/p>\n\n\n\n<p><strong>59. Buttons do not have an accessible name<\/strong> Same for buttons. Icon-only buttons need aria-label.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"aria\"><\/span><strong>ARIA<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>ARIA attributes make dynamic content accessible, but incorrect usage makes things worse.<\/p>\n\n\n\n<p><strong>60. <\/strong><strong>[aria-*]<\/strong><strong> attributes do not match their roles<\/strong> ARIA attributes must be compatible with the element&#8217;s role.<\/p>\n\n\n\n<p><strong>61. <\/strong><strong>[aria-*]<\/strong><strong> attributes do not have valid values<\/strong> Example: aria-hidden=&#8221;yes&#8221; should be aria-hidden=&#8221;true&#8221;.<\/p>\n\n\n\n<p><strong>62. <\/strong><strong>[aria-*]<\/strong><strong> attributes are not valid or misspelled<\/strong> Typo in attribute name (e.g., aria-lable instead of aria-label).<\/p>\n\n\n\n<p><strong>63. <\/strong><strong>[role]<\/strong><strong> values are not valid<\/strong> Invalid role value. Use valid WAI-ARIA roles.<\/p>\n\n\n\n<p><strong>64. ARIA roles missing required children<\/strong> Some roles require specific child roles (e.g., role=&#8221;list&#8221; needs role=&#8221;listitem&#8221; children).<\/p>\n\n\n\n<p><strong>65. <\/strong><strong>[aria-hidden=&#8221;true&#8221;]<\/strong><strong> on the <\/strong><strong>&lt;body&gt;<\/strong> Makes the entire page invisible to assistive tech. Remove it from &lt;body&gt;.<\/p>\n\n\n\n<p><strong>66. <\/strong><strong>[aria-hidden=&#8221;true&#8221;]<\/strong><strong> contains focusable descendants<\/strong> Hidden containers shouldn&#8217;t have tabbable children. Add tabindex=&#8221;-1&#8243; or restructure.<\/p>\n\n\n\n<p><strong>67. ARIA IDs are not unique<\/strong> Duplicate IDs mean wrong elements get referenced by ARIA attributes.<\/p>\n\n\n\n<p><strong>68\u201374. ARIA input\/meter\/progressbar\/toggle\/tooltip\/treeitem\/dialog elements do not have accessible names<\/strong> All interactive ARIA elements need aria-label or aria-labelledby.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"lists-structure\"><\/span><strong>Lists &amp; structure<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>75. Lists do not contain only <\/strong><strong>&lt;li&gt;<\/strong><strong> elements<\/strong> &lt;ul&gt; and &lt;ol&gt; should only have &lt;li&gt; as direct children.<\/p>\n\n\n\n<p><strong>76. List items not inside <\/strong><strong>&lt;ul&gt;<\/strong><strong>, <\/strong><strong>&lt;ol&gt;<\/strong><strong>, or <\/strong><strong>&lt;menu&gt;<\/strong> Orphaned &lt;li&gt; elements need a list wrapper.<\/p>\n\n\n\n<p><strong>77. Definition list items not wrapped in <\/strong><strong>&lt;dl&gt;<\/strong> &lt;dt&gt; and &lt;dd&gt; must live inside a &lt;dl&gt;.<\/p>\n\n\n\n<p><strong>78. <\/strong><strong>&lt;dl&gt;<\/strong><strong> elements not properly ordered<\/strong> Definition lists need &lt;dt&gt; followed by &lt;dd&gt; in correct order.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"tables\"><\/span><strong>Tables<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>79. Table headers do not have data cells they describe<\/strong> Use scope or headers attributes to associate headers with data.<\/p>\n\n\n\n<p><strong>80. Table cells reference nonexistent header IDs<\/strong> Fix the headers attribute to point to valid IDs within the same table.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"other-accessibility\"><\/span><strong>Other accessibility<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>81. Document doesn&#8217;t have a <\/strong><strong>&lt;title&gt;<\/strong><strong> element<\/strong> First thing screen readers announce. Add a descriptive &lt;title&gt; in &lt;head&gt;.<\/p>\n\n\n\n<p><strong>82. Touch targets not sized appropriately<\/strong> Interactive elements under 48\u00d748px are hard to tap. Increase size with padding.<\/p>\n\n\n\n<p><strong>83. Viewport prevents zooming<\/strong> user-scalable=no or maximum-scale &lt; 5 blocks zoom for low-vision users. Remove these restrictions.<\/p>\n\n\n\n<p><strong>84. Page uses <\/strong><strong>&lt;meta http-equiv=&#8221;refresh&#8221;&gt;<\/strong> Auto-refresh disorients screen reader users. Use server-side redirects instead.<\/p>\n\n\n\n<p><strong>85. <\/strong><strong>[lang]<\/strong><strong> attributes on elements have invalid values<\/strong> Use valid BCP 47 language codes on individual elements.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"best-practices-audits\"><\/span><strong>Best Practices audits<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Checks security, compatibility, and general code health.<\/p>\n\n\n\n<p><strong>86. Uses HTTPS<\/strong><\/p>\n\n\n\n<p>All resources should be served over secure HTTPS connections. Mixed content (HTTP on HTTPS pages) is a security risk and increasingly blocked by browsers.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Install an SSL\/TLS certificate (most hosts offer free SSL via Let&#8217;s Encrypt)<\/li>\n\n\n\n<li>Update all resource URLs to use https:\/\/<\/li>\n\n\n\n<li>Set up HTTP \u2192 HTTPS redirects<\/li>\n<\/ul>\n\n\n\n<p><strong>87. Images displayed with incorrect aspect ratio<\/strong><\/p>\n\n\n\n<p>Images appear stretched or squished because CSS distorts their natural proportions.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use object-fit: cover or object-fit: contain in CSS<\/li>\n\n\n\n<li>Avoid setting both width and height to non-proportional values<\/li>\n\n\n\n<li>Use properly sized images \u2192 FastPixel (preserves aspect ratios during optimization)<\/li>\n<\/ul>\n\n\n\n<p><strong>88. Images served at inappropriate resolution<\/strong><\/p>\n\n\n\n<p>Images are too low-res (blurry on retina) or too high-res (wasting bandwidth).<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use the srcset attribute to serve multiple resolutions<\/li>\n\n\n\n<li>Serve adaptive images based on device \u2192 FastPixel<\/li>\n<\/ul>\n\n\n\n<p><strong>89. Missing HTML doctype<\/strong> \u2014 add &lt;!DOCTYPE html&gt; as the first line.<\/p>\n\n\n\n<p><strong>90. Browser errors logged to console<\/strong> \u2014 JavaScript errors during page load. Check Chrome DevTools Console.<\/p>\n\n\n\n<p><strong>91. Issues in Chrome DevTools Issues panel<\/strong> \u2014 deprecations and network problems. Check DevTools \u2192 Issues.<\/p>\n\n\n\n<p><strong>92. Detected JavaScript libraries<\/strong> \u2014 informational. Lists libraries and flags known security vulnerabilities. Keep libraries updated.<\/p>\n\n\n\n<p><strong>93. Prevents pasting in password fields<\/strong> \u2014 remove onpaste restrictions. Password managers are a security best practice.<\/p>\n\n\n\n<p><strong>94. Invalid source maps<\/strong> \u2014 ensure your build generates valid .map files.<\/p>\n\n\n\n<p><strong>95. CSP not effective against XSS<\/strong> \u2014 implement a Content Security Policy header.<\/p>\n\n\n\n<p><strong>96. Page prevented bfcache restoration<\/strong><\/p>\n\n\n\n<p>Your page can&#8217;t be instantly restored when users navigate back\/forward. The back\/forward cache (bfcache) makes back-button navigation feel instant, but certain APIs and headers prevent it.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Remove Cache-Control: no-store from HTML responses<\/li>\n\n\n\n<li>Remove unload event listeners (use pagehide instead)<\/li>\n\n\n\n<li>Close WebSocket connections on page hide<\/li>\n<\/ul>\n\n\n\n<p><strong>97. Uses deprecated APIs<\/strong>, check Console for deprecation warnings and update to replacements.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"seo-audits\"><\/span><strong>SEO audits<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Basic search engine optimization checks. A perfect score here is the baseline, not the finish line.<\/p>\n\n\n\n<p><strong>98. No meta description<\/strong><\/p>\n\n\n\n<p>The meta description often appears as the snippet in search results. Missing it means Google pulls random text from your page.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Add a unique meta description of 120\u2013158 characters per page<\/li>\n\n\n\n<li>Include your main keyword naturally<\/li>\n\n\n\n<li>Use an SEO plugin like Yoast SEO or Rank Math<\/li>\n<\/ul>\n\n\n\n<p><strong>99. No <\/strong><strong>&lt;title&gt;<\/strong><strong> element<\/strong><\/p>\n\n\n\n<p>The page title shows in browser tabs, search results, and social shares. It&#8217;s one of the most important on-page SEO elements.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Add a unique, descriptive &lt;title> under 60 characters<\/li>\n\n\n\n<li>Include your main keyword near the beginning<\/li>\n\n\n\n<li>Use an SEO plugin for easy management<\/li>\n<\/ul>\n\n\n\n<p><strong>100. Missing viewport meta tag<\/strong><\/p>\n\n\n\n<p>Without a viewport meta tag, mobile browsers render at desktop width and scale down. Google uses mobile-first indexing, so this affects crawling.<\/p>\n\n\n\n<p><strong>How to fix it:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Add &lt;meta name=&#8221;viewport&#8221; content=&#8221;width=device-width, initial-scale=1&#8243;> to &lt;head><\/li>\n\n\n\n<li>Any properly built WordPress theme should include this by default<\/li>\n<\/ul>\n\n\n\n<p><strong>101. Invalid <\/strong><strong>hreflang<\/strong> \u2014 use valid language codes with reciprocal links between all language variants.<\/p>\n\n\n\n<p><strong>102. Invalid <\/strong><strong>rel=canonical<\/strong> \u2014 canonical URL must be absolute, return 200, and point to the preferred version.<\/p>\n\n\n\n<p><strong>103. Page returns error HTTP status code<\/strong> \u2014 fix server errors. 4xx\/5xx pages won&#8217;t get indexed.<\/p>\n\n\n\n<p><strong>104. Page blocked from indexing<\/strong> \u2014 check robots.txt, noindex tags, and X-Robots-Tag headers.<\/p>\n\n\n\n<p><strong>105. Images missing <\/strong><strong>[alt]<\/strong><strong> attributes<\/strong> \u2014 add descriptive alt text for image search visibility. For bulk generation, ShortPixel&#8217;s AI image SEO feature can create ALT text automatically across your media library.<\/p>\n\n\n\n<p><strong>106. Links have non-descriptive text<\/strong> \u2014 replace &#8220;click here&#8221; and &#8220;read more&#8221; with descriptive anchor text.<\/p>\n\n\n\n<p><strong>107. Links are not crawlable<\/strong> \u2014 use standard &lt;a href=&#8221;URL&#8221;&gt; elements. JavaScript-only navigation is invisible to crawlers.<\/p>\n\n\n\n<p><strong>108. Page is not mobile friendly<\/strong> \u2014 use responsive design, readable fonts, properly sized tap targets.<\/p>\n\n\n\n<p><strong>109. Invalid structured data<\/strong> \u2014 validate at <a href=\"https:\/\/search.google.com\/test\/rich-results\">Google&#8217;s Rich Results Test<\/a>.<\/p>\n\n\n\n<p><strong>110. Invalid <\/strong><strong>robots.txt<\/strong> \u2014 fix syntax errors. Test in Google Search Console.<\/p>\n\n\n\n<p><strong>111. Tap targets too small<\/strong> \u2014 interactive elements need to be at least 48\u00d748px with adequate spacing.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"wrapping-up\"><\/span><strong>Wrapping up<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>If you want to fix most PageSpeed Insights performance issues without manual work:<\/p>\n\n\n\n<p><strong>Use <\/strong><a href=\"https:\/\/fastpixel.io\/\"><strong>FastPixel<\/strong><\/a>, it handles caching, CDN, Critical CSS, JavaScript deferral, font optimization, DNS prefetching, minification, HTTP\/2 delivery, and built-in image optimization powered by ShortPixel. For most WordPress sites, installing FastPixel is the fastest way to fix most PageSpeed Insights errors automatically.<\/p>\n\n\n\n<p>For advanced image optimization workflows (optional):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ShortPixel plugins<\/strong> like<a href=\"https:\/\/wordpress.org\/plugins\/shortpixel-image-optimiser\/\"> ShortPixel Image Optimizer<\/a> or<a href=\"https:\/\/wordpress.org\/plugins\/shortpixel-adaptive-images\/\"> ShortPixel Adaptive Images<\/a> can be used separately for granular compression settings, AI-generated ALT text, Smart Cropping, and on-the-fly CDN delivery<\/li>\n<\/ul>\n\n\n\n<p>For Accessibility, Best Practices, and SEO, those need attention to your HTML, content, and code quality. No plugin rewrites your theme&#8217;s markup for you.<\/p>\n\n\n\n<p>Start at <a href=\"https:\/\/pagespeed.web.dev\/\">pagespeed.web.dev<\/a>, work through the highest-impact issues first, and measure the difference.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"faqs\"><\/span><strong>FAQs<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><strong>Does my PageSpeed score directly affect Google rankings?<\/strong> No. Google uses Core Web Vitals (LCP, CLS, INP) from real user data, not your lab score. Fixing GPSI issues improves those metrics, but the score itself isn&#8217;t a ranking signal.<\/p>\n\n\n\n<p><strong>Why is my mobile score so much lower than desktop?<\/strong> Lighthouse uses a throttled mobile simulation, a mid-tier phone on a slow connection. Desktop tests use a wired connection with no CPU throttling. A 20\u201340 point gap is normal. Focus on the mobile score since Google uses mobile-first indexing.<\/p>\n\n\n\n<p><strong>Should I aim for a perfect 100?<\/strong> No. A score of 85\u201395 with passing Core Web Vitals in real-user data is far more valuable than chasing 100 in a lab test.<\/p>\n\n\n\n<p><strong>Can a single plugin fix all PageSpeed errors?<\/strong> Performance issues, mostly yes. In most cases FastPixel can fix everything performance related. Accessibility, Best Practices, and SEO audits are about HTML structure and content quality, which require manual fixes.<\/p>\n\n\n\n<p><strong>Why do my scores fluctuate between tests?<\/strong> Lab tests are sensitive to server load and network conditions. Variations of 5\u201310 points are normal. Run 3\u20135 tests and look at averages.<\/p>\n\n\n\n<p><strong>What&#8217;s the difference between &#8220;Insights&#8221; and &#8220;Diagnostics&#8221;?<\/strong> Insights (Lighthouse 13) are grouped, actionable recommendations sorted by estimated impact. Diagnostics are individual, granular checks with additional detail. Start with Insights.<\/p>\n\n\n\n<p><strong>Do Accessibility errors affect SEO?<\/strong> Not directly. But some practices overlap (alt text, heading structure, crawlable links), and accessible sites tend to be well-structured, which search engines favor.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>You ran your site through Google PageSpeed Insights and got back a wall of colored flags. Some you understand, most you don&#8217;t. This guide explains every PageSpeed Insights error in detail and shows you exactly how to fix each one, across Performance, Accessibility, Best Practices, and SEO, fully updated for Lighthouse 13. Whether you&#8217;re troubleshooting [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":4590,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"categories":[10],"tags":[],"class_list":["post-4589","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-website-optimization"],"blocksy_meta":[],"uagb_featured_image_src":{"full":["https:\/\/fastpixel.io\/wp-content\/uploads\/2026\/05\/pagespeed.png",1500,850,false],"thumbnail":["https:\/\/fastpixel.io\/wp-content\/uploads\/2026\/05\/pagespeed-150x150.png",150,150,true],"medium":["https:\/\/fastpixel.io\/wp-content\/uploads\/2026\/05\/pagespeed-300x170.png",300,170,true],"medium_large":["https:\/\/fastpixel.io\/wp-content\/uploads\/2026\/05\/pagespeed-768x435.png",768,435,true],"large":["https:\/\/fastpixel.io\/wp-content\/uploads\/2026\/05\/pagespeed-1024x580.png",1024,580,true],"1536x1536":["https:\/\/fastpixel.io\/wp-content\/uploads\/2026\/05\/pagespeed.png",1500,850,false],"2048x2048":["https:\/\/fastpixel.io\/wp-content\/uploads\/2026\/05\/pagespeed.png",1500,850,false],"trp-custom-language-flag":["https:\/\/fastpixel.io\/wp-content\/uploads\/2026\/05\/pagespeed-18x10.png",18,10,true],"betterdocs-category-thumb":["https:\/\/fastpixel.io\/wp-content\/uploads\/2026\/05\/pagespeed-360x204.png",360,204,true]},"uagb_author_info":{"display_name":"Bianca Rus","author_link":"https:\/\/fastpixel.io\/fr\/blog\/author\/bianca\/"},"uagb_comment_info":0,"uagb_excerpt":"You ran your site through Google PageSpeed Insights and got back a wall of colored flags. Some you understand, most you don&#8217;t. This guide explains every PageSpeed Insights error in detail and shows you exactly how to fix each one, across Performance, Accessibility, Best Practices, and SEO, fully updated for Lighthouse 13. Whether you&#8217;re troubleshooting\u2026","_links":{"self":[{"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/posts\/4589","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/comments?post=4589"}],"version-history":[{"count":1,"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/posts\/4589\/revisions"}],"predecessor-version":[{"id":4591,"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/posts\/4589\/revisions\/4591"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/media\/4590"}],"wp:attachment":[{"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/media?parent=4589"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/categories?post=4589"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/tags?post=4589"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}