Largest Contentful Paint (LCP)
What This Means
Largest Contentful Paint (LCP) measures the time it takes for the largest content element in the viewport to become fully visible and rendered. This is a Core Web Vital metric that directly correlates with user-perceived loading speed.
LCP Thresholds
- Good: < 2.5 seconds (green)
- Needs Improvement: 2.5 - 4.0 seconds (yellow)
- Poor: > 4.0 seconds (red)
Impact on Your Business
User Experience:
- Users perceive pages with fast LCP as loading quickly
- Slow LCP creates impression of poor website quality
- Directly correlates with bounce rate and engagement
Search Rankings:
- LCP is a confirmed Google ranking factor
- Poor LCP can reduce search visibility
- Required for top search result positions
Conversion Rates:
- Every 100ms improvement in LCP can increase conversion rates by up to 1%
- Sites with LCP < 2.5s see significantly higher engagement
- Mobile users are especially sensitive to LCP performance
Common LCP Elements
The LCP element is typically:
- Hero images or banner images
- Video thumbnails or poster images
- Large background images loaded via CSS
- Large text blocks (headlines, paragraphs)
- Product images on e-commerce sites
How to Diagnose
Method 1: PageSpeed Insights (Recommended)
- Navigate to PageSpeed Insights
- Enter your website URL
- Click "Analyze"
- Review the LCP score in the Core Web Vitals section
- Scroll to "Diagnostics" section to see:
- Which element is the LCP element
- What's causing the delay
- Specific optimization opportunities
What to Look For:
- LCP element identification (shown with screenshot)
- LCP breakdown timing (TTFB, resource load time, render time)
- Recommended optimizations
Method 2: Chrome DevTools
- Open your website in Chrome
- Press
F12to open DevTools - Navigate to the "Performance" tab
- Click the record button (circle)
- Refresh the page
- Stop recording after page load completes
- Look for the "LCP" marker in the timeline
- Click the LCP marker to see which element it represents
What to Look For:
- Total LCP time
- Which element triggered LCP
- When resources loaded relative to page load
- Blocking resources before LCP
Method 3: Web Vitals Extension
- Install the Web Vitals Chrome Extension
- Visit your website
- Click the extension icon
- View real-time LCP measurement
- LCP element is highlighted with a red overlay
What to Look For:
- Real-time LCP score
- Visual identification of LCP element
- Score changes during page interaction
Method 4: Real User Monitoring
- Check Google Search Console > Core Web Vitals report
- Review 28-day aggregated real user data
- Identify pages with poor LCP
- Review URL-specific performance
What to Look For:
- Real user experience data (field data)
- Mobile vs desktop LCP differences
- Specific problem URLs
- Trends over time
General Fixes
Fix 1: Optimize LCP Image
If your LCP element is an image:
Reduce image file size:
- Use modern formats (WebP with JPEG fallback)
- Compress images without quality loss (TinyPNG, Squoosh, ImageOptim)
- Target: < 200KB for hero images, < 100KB for other images
Set appropriate dimensions:
<img src="hero.jpg" width="1200" height="600" alt="Hero image description" >Add priority hints:
<img src="hero.jpg" fetchpriority="high" loading="eager" >Preload critical images:
<link rel="preload" as="image" href="hero.jpg" fetchpriority="high" >
Fix 2: Eliminate Render-Blocking Resources
Remove or defer resources that block initial render:
Defer non-critical JavaScript:
<script src="script.js" defer></script>Inline critical CSS:
- Extract CSS needed for above-fold content
- Place in
<style>tag in<head> - Defer non-critical CSS
Use async for third-party scripts:
<script src="analytics.js" async></script>Remove unused CSS and JavaScript:
- Audit loaded resources
- Remove or defer unused code
- Split code into critical and non-critical bundles
Fix 3: Improve Server Response Time (TTFB)
LCP cannot start until server responds:
Use a CDN (Content Delivery Network):
Enable caching:
- Server-side caching (Redis, Memcached)
- Browser caching with proper cache headers
- Static asset caching
Upgrade hosting:
- Ensure adequate server resources (CPU, RAM)
- Consider dedicated or VPS hosting over shared
- Use hosting optimized for your platform
Optimize database queries:
- Add database indexes
- Cache query results
- Optimize slow queries
Fix 4: Optimize CSS Background Images
If LCP element is a CSS background image:
Avoid CSS backgrounds for critical images:
<!-- Instead of CSS background-image --> <img src="hero.jpg" alt="Hero">Preload background images:
<link rel="preload" as="image" href="hero.jpg">Use responsive images:
.hero { background-image: image-set( url("hero.webp") type("image/webp"), url("hero.jpg") type("image/jpeg") ); }
Fix 5: Optimize Web Fonts
If LCP element is text with custom fonts:
Preload critical fonts:
<link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin >Use font-display:
@font-face { font-family: 'CustomFont'; src: url('font.woff2') format('woff2'); font-display: swap; }Subset fonts:
- Only include characters you need
- Reduces font file size
- Tools: Google Fonts parameter, Font Squirrel
Prefer system fonts for body text:
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; }
Fix 6: Use a CDN for Resources
Serve images from CDN:
- Reduces image load time
- Provides automatic optimization
- Examples: Cloudinary, Imgix, ImageKit
Configure CDN properly:
- Enable HTTP/2 or HTTP/3
- Enable compression
- Set appropriate cache headers
Use CDN for all static assets:
- CSS files
- JavaScript files
- Font files
- Images
Fix 7: Implement Lazy Loading Correctly
Important: Never lazy load LCP images
Identify LCP element
Set loading="eager" or omit loading attribute:
<img src="hero.jpg" loading="eager">Lazy load below-fold images:
<img src="product.jpg" loading="lazy">Ensure LCP image loads immediately
Platform-Specific Guides
Detailed implementation instructions for your specific platform:
| Platform | Troubleshooting Guide |
|---|---|
| Shopify | Shopify LCP Optimization |
| WordPress | WordPress LCP Optimization |
| Wix | Wix LCP Optimization |
| Squarespace | Squarespace LCP Optimization |
| Webflow | Webflow LCP Optimization |
Verification
After implementing fixes:
Clear cache:
- Browser cache
- CDN cache
- Server cache
Test with PageSpeed Insights:
- Run 3-5 tests
- Average the results
- Verify LCP is in "Good" range (< 2.5s)
Test on real devices:
- Mobile device on 4G connection
- Desktop with throttled connection
- Different browsers
Monitor field data:
- Check Google Search Console after 28 days
- Verify real user metrics improve
- Continue monitoring for regressions
Common Mistakes
- Lazy loading the LCP image - This delays LCP significantly
- Not prioritizing above-fold images - Browser doesn't know which images are critical
- Using CSS background images for hero images - Delays resource discovery
- Oversized images - Unnecessary bytes increase load time
- Ignoring TTFB - Poor server response makes good LCP impossible
- Not using a CDN - Increases latency for geographically distant users
- Render-blocking CSS/JS - Prevents LCP element from rendering