Page Speed SEO Issues | Blue Frog Docs

Page Speed SEO Issues

Diagnose and fix slow page load speeds that hurt search rankings through Core Web Vitals and impact user experience

Page Speed SEO Issues

What This Means

Page speed refers to how quickly your web pages load and become interactive for users. Since 2010, Google has used page speed as a ranking factor, and with the 2021 Page Experience update, Core Web Vitals became critical ranking signals. Slow-loading websites rank lower in search results, lose visitors, and suffer reduced conversions.

Core Web Vitals

Largest Contentful Paint (LCP):

  • Measures loading performance
  • Time until largest content element renders
  • Target: <2.5seconds
  • Most important visible content appears

Interaction to Next Paint (INP):

  • Measures interactivity and responsiveness
  • Replaced First Input Delay (FID) in March 2024
  • Target: <200 milliseconds
  • How quickly page responds to user interactions

Cumulative Layout Shift (CLS):

  • Measures visual stability
  • How much content shifts during loading
  • Target: <0.1- Prevents frustrating layout jumps

Additional Speed Metrics

First Contentful Paint (FCP):

  • Time to first text or image
  • Target: <1.8seconds
  • First impression of speed

Time to First Byte (TTFB):

  • Server response time
  • Target: <800ms
  • Server and network performance

Total Blocking Time (TBT):

  • Main thread blocking time
  • Target: <200ms
  • JavaScript execution delay

Impact on Your Business

Search Rankings:

  • Google uses Core Web Vitals as ranking factor
  • Slow sites rank lower than fast competitors
  • Mobile speed especially critical
  • Page Experience signals affect visibility

User Experience:

  • 53% of mobile users abandon sites taking >3 seconds
  • Each second delay reduces conversions
  • Slow sites frustrate users
  • Higher bounce rates

Conversion Rates:

  • Amazon: 100ms delay = 1% revenue loss
  • Google: 500ms delay = 20% traffic loss
  • Walmart: 1s improvement = 2% conversions
  • Speed directly impacts bottom line

Mobile Performance:

  • Mobile-first indexing prioritizes mobile speed
  • Mobile users have less patience
  • Slower networks magnify speed issues
  • Mobile commerce increasingly dominant

Competitive Advantage:

  • Fast sites outrank slow competitors
  • Better user engagement
  • Higher customer satisfaction
  • Improved brand perception

How to Diagnose

  1. Visit PageSpeed Insights
  2. Enter your URL
  3. Run test for both Mobile and Desktop
  4. Review Core Web Vitals:
    • LCP (Largest Contentful Paint)
    • INP (Interaction to Next Paint)
    • CLS (Cumulative Layout Shift)
  5. Check "Field Data" (real user data from Chrome)
  6. Review "Lab Data" (simulated test results)

What to Look For:

  • Red metrics (poor performance)
  • Core Web Vitals failures
  • Specific optimization opportunities
  • Mobile vs desktop performance gaps

Method 2: Google Search Console

  1. Log into Google Search Console
  2. Navigate to "Experience" → "Core Web Vitals"
  3. Review URL performance:
    • Poor (red)
    • Needs Improvement (yellow)
    • Good (green)
  4. Check Mobile and Desktop tabs separately
  5. Click "Open Report" for details

What to Look For:

  • Pages failing Core Web Vitals
  • Trends over time
  • Mobile vs desktop differences
  • Specific URLs needing fixes

Method 3: Lighthouse Audit

  1. Open your page in Google Chrome
  2. Right-click → Inspect → Lighthouse tab
  3. Select:
    • Categories: Performance
    • Device: Mobile and Desktop
  4. Click "Analyze page load"
  5. Review Performance score and metrics

What to Look For:

  • Performance score <90 - Core Web Vitals in red
  • Opportunities (biggest improvements)
  • Diagnostics (detailed issues)

Method 4: WebPageTest

  1. Visit WebPageTest.org
  2. Enter your URL
  3. Select:
    • Test Location (near your audience)
    • Browser (Chrome recommended)
    • Connection speed (3G, 4G, Cable)
  4. Run test
  5. Review detailed waterfall chart

What to Look For:

Method 5: Real User Monitoring (RUM)

Use analytics to track real user data:

  1. Chrome User Experience Report (CrUX):

    • Public dataset of real Chrome users
    • Powers PageSpeed Insights field data
    • Shows actual user experience
  2. Google Analytics 4:

    • Track Web Vitals with custom events
    • Segment by device, location, browser
    • Monitor trends over time
  3. Third-party RUM tools:

    • Cloudflare Web Analytics
    • New Relic
    • Datadog
    • SpeedCurve

What to Look For:

  • 75th percentile metrics
  • Real user experience vs lab tests
  • Performance by geography
  • Mobile vs desktop real data
  • Performance trends

General Fixes

Fix 1: Optimize Images

Images are the #1 cause of slow pages:

  1. Compress images:

    # Use tools like:
    # - TinyPNG, Squoosh, ImageOptim
    # - Target: <100KB per image
    # - Hero images: <200KB
    
  2. Use modern formats:

    <picture>
      <source srcset="image.avif" type="image/avif">
      <source srcset="image.webp" type="image/webp">
      <img src="image.jpg" alt="Description" width="800" height="600">
    </picture>
    
  3. Implement lazy loading:

    <!-- Don't lazy load LCP image -->
    <img src="hero.jpg" alt="Hero" loading="eager">
    
    <!-- Lazy load below-fold images -->
    <img src="product.jpg" alt="Product" loading="lazy">
    
  4. Use responsive images:

    <img src="image-800.jpg"
         srcset="image-400.jpg 400w,
                 image-800.jpg 800w,
                 image-1200.jpg 1200w"
         sizes="(max-width: 600px) 400px,
                (max-width: 1000px) 800px,
                1200px"
         alt="Description">
    

Fix 2: Minimize and Defer JavaScript

Reduce JavaScript blocking:

  1. Defer non-critical JavaScript:

    <!-- Bad - blocks rendering -->
    <script src="analytics.js"></script>
    
    <!-- Good - deferred -->
    <script src="analytics.js" defer></script>
    
    <!-- For non-dependent scripts -->
    <script src="social-widget.js" async></script>
    
  2. Inline critical JavaScript:

    <!-- Inline small critical scripts -->
    <script>
      // Critical functionality here
      // Keep under 1-2KB
    </script>
    
  3. Remove unused JavaScript:

    # Use Chrome DevTools Coverage tab
    # Identify unused code
    # Remove or code-split unused libraries
    
  4. Code splitting:

    // Load code only when needed
    button.addEventListener('click', async () => {
      const module = await import('./feature.js');
      module.init();
    });
    

Fix 3: Optimize CSS Delivery

Eliminate render-blocking CSS:

  1. Inline critical CSS:

    <head>
      <style>
        /* Critical above-fold CSS */
        /* Extract using tools like Critical */
        body { margin: 0; font-family: sans-serif; }
        header { background: #333; color: white; }
        /* Keep under 14KB */
      </style>
    </head>
    
  2. Defer non-critical CSS:

    <!-- Load non-critical CSS async -->
    <link rel="preload" href="styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
    <noscript><link rel="stylesheet" href="styles.css"></noscript>
    
  3. Remove unused CSS:

    # Use PurgeCSS or similar tools
    # Remove framework CSS not being used
    # Minify remaining CSS
    

Fix 4: Leverage Browser Caching

Cache static resources:

  1. Set cache headers:

    # Nginx
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
    
    # Apache .htaccess
    <IfModule mod_expires.c>
      ExpiresActive On
      ExpiresByType image/jpg "access plus 1 year"
      ExpiresByType image/jpeg "access plus 1 year"
      ExpiresByType image/png "access plus 1 year"
      ExpiresByType text/css "access plus 1 year"
      ExpiresByType text/javascript "access plus 1 year"
    </IfModule>
    
  2. Use cache versioning:

    <!-- Version or hash in filename -->
    <link rel="stylesheet" href="styles.v2.css">
    <script src="app.a3f2b1.js"></script>
    

Fix 5: Enable Compression

Compress text-based resources:

  1. Enable Gzip or Brotli:

    # Nginx - Brotli
    brotli on;
    brotli_comp_level 6;
    brotli_types text/plain text/css text/xml text/javascript
                 application/json application/javascript application/xml+rss;
    
    # Nginx - Gzip fallback
    gzip on;
    gzip_vary on;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/xml text/javascript
               application/json application/javascript application/xml+rss;
    
    # Apache .htaccess
    <IfModule mod_deflate.c>
      AddOutputFilterByType DEFLATE text/html
      AddOutputFilterByType DEFLATE text/css
      AddOutputFilterByType DEFLATE text/javascript
      AddOutputFilterByType DEFLATE application/javascript
      AddOutputFilterByType DEFLATE application/json
    </IfModule>
    

Fix 6: Reduce Server Response Time (TTFB)

Optimize server performance:

  1. Use a CDN:

    <!-- Content Delivery Network -->
    <!-- Cloudflare, AWS CloudFront, Fastly -->
    <!-- Serves content from edge locations -->
    
  2. Optimize database queries:

    -- Add database indexes
    CREATE INDEX idx_user_email ON users(email);
    
    -- Cache frequent queries
    -- Use Redis or Memcached
    
  3. Enable server-side caching:

    // PHP - page caching example
    $cache_file = 'cache/page.html';
    $cache_time = 3600; // 1 hour
    
    if (file_exists($cache_file) && time() - filemtime($cache_file) < $cache_time) {
        readfile($cache_file);
    } else {
        ob_start();
        // Generate page
        $content = ob_get_contents();
        ob_end_flush();
        file_put_contents($cache_file, $content);
    }
    
  4. Upgrade hosting:

    • Move from shared to VPS or dedicated
    • Use SSD storage
    • Increase PHP memory limit
    • Enable OpCode caching

Fix 7: Optimize Core Web Vitals Specifically

Fix LCP (Largest Contentful Paint):

  1. Optimize LCP element:

    <!-- If hero image is LCP element -->
    <link rel="preload" as="image" href="hero.jpg">
    <img src="hero.jpg" alt="Hero" loading="eager" fetchpriority="high">
    
  2. Reduce render-blocking resources

  3. Improve server response time

  4. Use CDN for LCP resources

Fix INP (Interaction to Next Paint):

  1. Reduce JavaScript execution:

    // Break up long tasks
    async function processLargeArray(items) {
      for (let i = 0; i < items.length; i++) {
        processItem(items[i]);
    
        // Yield to main thread every 50 items
        if (i % 50 === 0) {
          await new Promise(resolve => setTimeout(resolve, 0));
        }
      }
    }
    
  2. Defer third-party scripts

  3. Optimize event handlers

  4. Use web workers for heavy processing

Fix CLS (Cumulative Layout Shift):

  1. Set dimensions on media:

    <!-- Always include width and height -->
    <img src="photo.jpg" alt="Photo" width="800" height="600">
    <video width="640" height="360" src="video.mp4"></video>
    
  2. Reserve space for ads:

    .ad-container {
      min-height: 250px; /* Reserve space */
    }
    
  3. Avoid inserting content above existing content

  4. Use CSS transforms for animations:

    /* Good - doesn't cause layout shift */
    .element {
      transform: translateY(10px);
    }
    
    /* Bad - causes layout shift */
    .element {
      margin-top: 10px;
    }
    

Fix 8: Implement Resource Hints

Help browser load resources faster:

  1. DNS prefetch:

    <!-- Resolve DNS early for third-party domains -->
    <link rel="dns-prefetch" href="https://fonts.googleapis.com">
    <link rel="dns-prefetch" href="https://www.google-analytics.com">
    
  2. Preconnect:

    <!-- Establish connection early -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    
  3. Preload:

    <!-- Load critical resources early -->
    <link rel="preload" as="font" href="font.woff2" type="font/woff2" crossorigin>
    <link rel="preload" as="image" href="hero.jpg">
    <link rel="preload" as="style" href="critical.css">
    
  4. Prefetch:

    <!-- Load resources for next page -->
    <link rel="prefetch" href="/next-page.html">
    

Platform-Specific Guides

Detailed implementation instructions for your specific platform:

Platform Troubleshooting Guide
Shopify Shopify Page Speed Guide
WordPress WordPress Page Speed Guide
Wix Wix Page Speed Guide
Squarespace Squarespace Page Speed Guide
Webflow Webflow Page Speed Guide

Verification

After implementing speed optimizations:

  1. PageSpeed Insights:

    • Re-run tests
    • Verify Core Web Vitals improved
    • Check score increased
    • Monitor Field Data changes (takes time)
  2. Google Search Console:

    • Wait 28 days for data update
    • Check Core Web Vitals report
    • Monitor URL status changes
    • Track poor → good transitions
  3. WebPageTest:

    • Re-run tests
    • Compare before/after waterfalls
    • Verify load time reduced
    • Check filmstrip view
  4. Real user monitoring:

    • Track actual user metrics
    • Monitor 75th percentile
    • Check different locations
    • Verify mobile improvements
  5. Business metrics:

    • Monitor bounce rate
    • Track conversion rate
    • Check time on site
    • Review revenue impact

Common Mistakes

  1. Only testing desktop - Mobile speed more critical
  2. Ignoring field data - Lab tests don't show real experience
  3. Lazy loading LCP image - Delays most important content
  4. Too many third-party scripts - Slow down entire page
  5. Not compressing images - Biggest performance killer
  6. Render-blocking CSS/JS - Delays page rendering
  7. No CDN - Slow server response times
  8. Missing cache headers - Repeat visitors load slowly
  9. Unoptimized fonts - Web fonts block rendering
  10. Layout shifts from missing dimensions - Hurts CLS

Page Speed Checklist

Images:

  • All images compressed (<100KB typically)
  • Modern formats (WebP/AVIF) implemented
  • Responsive images with srcset
  • Lazy loading on below-fold images
  • LCP image optimized and preloaded
  • Dimensions specified (width/height)

JavaScript:

  • Defer non-critical JavaScript
  • Unused JavaScript removed
  • Code splitting implemented
  • Third-party scripts minimized
  • Main thread work reduced (<200ms TBT)

CSS:

  • Critical CSS inlined
  • Non-critical CSS deferred
  • Unused CSS removed
  • CSS minified
  • No render-blocking stylesheets

Server:

  • TTFB <800ms
  • Compression enabled (Brotli/Gzip)
  • CDN implemented
  • Cache headers configured
  • Database optimized

Core Web Vitals:

  • LCP <2.5s
  • INP <200ms
  • CLS <0.1- [ ] All metrics pass in GSC

Additional Resources

// SYS.FOOTER