Website performance directly impacts user experience, conversion rates, and Google Core Web Vitals. Porto is engineered as a performance-focused WordPress theme, but achieving excellent speed scores requires the right configuration, clean content structure, and a properly tuned cache layer.
This guide explains how to build a fast Porto-powered website, combining Porto’s native optimization features with WP Rocket, one of the most reliable WordPress caching plugins.
The goal is not only high PageSpeed scores, but real-world performance: fast first load, smooth scrolling, and responsive interactions.
1. Start with a Clean Porto Setup
Before enabling any optimization features, make sure your site structure is clean and intentional.
Best Practices Before Optimization
- Replace all demo images and content with your real assets
- Remove unused pages, posts, blocks, templates, and products
- Avoid excessive animations, carousels, sliders, and nested elements
- Use Porto builders (Block Builder, Single Builder, Archive Builder) instead of third-party layout plugins whenever possible
Performance optimization should always start after your content structure is finalized. Measuring speed on demo content gives misleading results.
2. Hosting & Server Response Time
No optimization plugin can compensate for slow hosting.
Recommended Server Environment
- PHP 8.1 or newer
- HTTP/2 or HTTP/3 enabled
- GZIP or Brotli compression enabled
- Object cache (Redis or Memcached if available)
How to Verify Server Response Time
- Test a non-cached page like Cart or Checkout
- Use browser DevTools → Network → Document response
- Ideal uncached response time: under 1 second
If response time is slow without plugins and cache, contact your hosting provider before proceeding.

Step 3. Configure Porto Speed Optimize → Performance Settings (Critical Step)
Porto Theme provides a dedicated Speed Optimize → Performance panel designed to reduce CSS, JavaScript, image weight, and unused assets generated by the theme and supported plugins. These options work together with caching plugins such as WP Rocket and should be configured only after your site structure and content are finalized.
⚠️ Important
Porto speed optimization settings should be configured after site development is completed.
Enabling optimization too early may remove required styles or scripts for features that are added later.
Navigate to WordPress Dashboard → Porto → Speed Optimize → Performance. This page is divided into five tabs
- WPBakery & Shortcodes
- Revolution Slider
- Performance
- Other Minify
- Advanced
Each tab controls a specific performance layer.
3.1 WPBakery & Shortcodes

Purpose
Optimize WPBakery Page Builder and Porto shortcodes by removing unused shortcode styles and assets.
How It Works
- Porto scans your site content and lists unused WPBakery and Porto shortcodes
- When checked, all CSS and JS related to those shortcodes are removed
- This can reduce hundreds of kilobytes from frontend assets
Best Practice (Very Important)
- Perform this step only after all pages, templates, headers, footers, and blocks are finalized
- If you later use a removed shortcode, you must re-enable it and recompile
- Always review the list carefully before saving
Recommended Workflow
- Finish site development completely
- Visit this tab
- Review unused shortcodes list
- Uncheck any shortcode you may need later
- Save and compile
- Clear cache and test key pages
3.2 Revolution Slider

Purpose
Prevent Revolution Slider CSS and JS from loading on pages that do not use sliders.
Built-in Option
- Optimize Revolution Slider
How It Works
- Automatically detects pages without Revolution Slider
- Prevents global loading of heavy slider assets
- Reduces render-blocking resources and JS execution time
3.3 Performance

This tab controls core WordPress, image, font, and loading behavior.
WordPress Image Settings
| Option | Description |
|---|---|
| WordPress JPG Quality (Default: 82) | Controls JPEG compression quality for generated images. After changing, regenerate thumbnails. |
| WordPress Max Image Size (Default: 2560) | Sets max width or height threshold. Use
0
to disable resizing limit. |
⚠️ Always use Regenerate Thumbnails after changing these values.
Lazy Loading Options
| Option | Description |
|---|---|
| Lazy Load Images | Loads images only when they enter the viewport. Disable if compatibility issues occur. |
| Lazy Load Sub Menus | Loads submenu content on first hover instead of initial page load. |
Preload Icon Fonts and Images
Preloading helps browsers fetch important assets early, improving perceived load time.
Built-in icon preload options
- Porto Icons
- Font Awesome 6 Solid
- Font Awesome 6 Regular
- Font Awesome 6 Brands
- Simple Line Icons
You can also preload custom resources
https://example.com/logo.png
https://example.com/fonts/custom.woff2
Homepage-only preload example
https://example.com/hero-banner.png -oh
Font Face Rendering
Font Display: Swap
- Ensures text remains visible during font loading
- Prevents FOIT (Flash of Invisible Text)
- Improves LCP and PageSpeed scores
3.4 Other Minify

This section controls CSS/JS minification and selective resource loading.
Core Optimization Options
| Option | Effect |
|---|---|
| Minify CSS/JS | Minifies all Porto-generated CSS and JS files |
| Enable Web Font Loader for Google Fonts | Improves font loading and PageSpeed score |
| Optimize Bootstrap | Loads only Bootstrap features used by Porto (≈150KB reduction) |
| Optimize FontAwesome | Loads only used icons (≈40KB reduction) |
| Dequeue Elementor FontAwesome | Prevents duplicate FontAwesome loading |
WordPress & Plugin Cleanup
| Option | Description |
|---|---|
| Disable WooCommerce Gutenberg Blocks & YITH Blocks | Removes unused block assets |
| Dequeue Gutenberg Block Style | Prevents loading unused Gutenberg styles |
| Dequeue Emojis Script | Removes WordPress emoji JS |
| Disable jQuery Migrate Script | Removes legacy jQuery compatibility |
| Load jQuery in Footer | Defers jQuery loading |
Plugin-Specific Resource Loading
| Option | Effect |
|---|---|
| Load Customer Reviews Summary only on Single Product | Avoids global loading |
| Load YITH Ajax Product Filter only on Shop & Product Pages | Prevents unnecessary styles |
Disable Unused Content Types
You can disable unused Porto post types
- Portfolio
- Member
- Event
- FAQ
This
- Reduces server response time
- Prevents unnecessary thumbnail generation
After changing, use Regenerate Thumbnails to remove unused image files.
Disable Unused Template Builders
Disable builders you do not use
- Block
- Header
- Footer
- Single Product
- Product Archive
- Archive
- Single
- Post Type
This reduces backend overhead and frontend assets.
3.5 Advanced

Advanced Optimize Options
| Option | Description |
|---|---|
| WP Rocket Delay JS Exclusions | Automatically excludes Porto-required JS from WP Rocket’s Delay JS |
| Disable Mobile Animations | Removes appear/slide animations on mobile |
| Disable Mobile Sliders | Disables sliders on mobile devices for better performance |
How This Works with WP Rocket
- Porto handles theme-level optimization
- WP Rocket handles caching, CDN, database, and delivery
- Avoid duplicating minification or delay features across both tools
Step 4: Fix Image Blurring & Optimize Images for WooCommerce and Porto
Images are one of the biggest performance bottlenecks on WooCommerce websites and the most common cause of blurry product thumbnails. In Porto-based sites, image quality depends on three different layers working together:
- WooCommerce image settings
- WordPress media image sizes
- Porto widget image size priorities
If any of these are misconfigured, WooCommerce will load the closest available image size, which often results in upscaled or blurry images.
This step explains how to fix image blurring and improve performance correctly.
4.1 Configure WooCommerce Product Image Sizes (Base Layer)
WooCommerce generates the core product image sizes used across shop-related pages.
Go to
Appearance → Customize → WooCommerce → Product Images
, You will find
| Option | Purpose |
|---|---|
| Main Image Width | Controls the width of the main product image (single product page, quick view, lightbox base image) |
| Thumbnail Width | Controls product thumbnails (shop grid, related products, upsells, widgets) |
| Thumbnail Cropping | Defines image ratio (1:1, custom, or uncropped) |
Key Notes
- These values define the base image sizes generated by WooCommerce
- Larger values improve sharpness on large screens
- Overly large sizes increase file size and slow down the site
Recommended Practice
- Match widths to your actual shop layout
- Avoid “future-proof” oversized values
- Always regenerate thumbnails after changes
⚠️ These settings are especially important for WooCommerce shop demos and archive layouts.
4.2 Configure WordPress Media Image Sizes (Blog & General Content)
Post images (blog, archives, blocks) use WordPress media sizes.
Go to
Dashboard → Settings → Media
and Configure
- Thumbnail size
- Medium size
- Large size
Use cases
- Blog posts
- Blog archives
- Post grids
- Gutenberg blocks
These sizes are independent from WooCommerce but still affect overall image quality and loading behavior.
4.3 Understand Porto Widget Image Size Priority (Critical)
Porto widgets have higher priority than WooCommerce image settings.
If a Porto widget specifies an image size
- WooCommerce settings are ignored
- Porto will load the closest matching image size generated by WooCommerce
This applies to widgets such as
- Porto Posts Grid
- Porto Archive Posts Grid
- Porto Products
- Porto Carousel
- Porto Blog elements
Common Cause of Blurry Images
- WooCommerce image width is large
- Porto widget image size is set too small
- WordPress loads a smaller image and stretches it
What to Check
- Edit the Porto widget
- Review the Image Size option
- Ensure it matches or exceeds the visual display size
Porto always chooses the nearest available image size, not necessarily the WooCommerce one.
4.4 Optimize Images Before Upload (Mandatory)
Correct dimensions alone do not guarantee performance. Uncompressed images can still be slow and heavy.
Before uploading any images
Recommended Tool
- TinyPNG - https://tinypng.com
Why Compress Images?
- Reduces image size by 50–80%
- Maintains visual quality
- Ideal for WooCommerce products and blog images
Recommended File Sizes
| Image Type | Target Size |
|---|---|
| Product / blog images | 50–150 KB |
| Hero / slider images | 150–200 KB |
| Avoid | >300 KB |
⚠️ Caching, lazy load, and CDN do not reduce image file size — compression must happen first.
4.5 Regenerate Product Images After Changes
Any change to:
- WooCommerce image sizes
- WordPress media sizes
- Porto widget image size strategy
Requires thumbnail regeneration.
Recommended Plugin
Steps
- Install and activate the plugin
- Run thumbnail regeneration
-
Clear
- WP Rocket cache
- WooCommerce transients
- Browser cache
Regeneration recreates sizes but does not compress images — compression must be done beforehand.
4.6 WebP Images (Optional but Recommended)
- Porto fully supports WebP
- WebP reduces image size by 20–40%
- Works well with WP Rocket and CDNs
If enabled
- Verify fallback support for Safari/older browsers
- Test product and shop pages carefully
4.7 Correct Optimization Workflow (Important)
Always follow this order
- Compress images (TinyPNG or similar)
- Upload images
- Configure WooCommerce Product Images
- Configure WordPress Media sizes
- Verify Porto widget image sizes
- Regenerate thumbnails
- Clear cache and CDN
Skipping any step may result in
- Blurry images
- Large page weight
- Poor Core Web Vitals
5. Installing & Configuring WP Rocket
WP Rocket is a powerful caching and performance optimization plugin that improves loading times, reduces server load, and solves many common speed issues. When used together with Porto’s native optimizations, it delivers excellent Core Web Vitals and real-world performance.
WP Rocket automatically enables baseline caching and compression features, and allows fine-grained control over CSS/JS, media, CDN, database, and advanced performance rules.
5.1 Install WP Rocket
- Purchase and download WP Rocket from the official site - https://wp-rocket.me
- In your WordPress dashboard, upload and install the plugin in Plugins → Add New → Upload Plugin
- Activate WP Rocket
-
WP Rocket will automatically enable several baseline optimizations, including
- Page cache (desktop + mobile)
- Browser caching
- GZIP compression
- Preload and prefetch hints
(See WP Rocket documentation for default features.)

5.2 File Optimization Settings
Go to Settings → WP Rocket → File Optimization
These settings control CSS and JavaScript handling.

5.2.1 Minify CSS/JS
- CSS Minify: Reduces CSS file size by stripping whitespace/comments
WP Rocket docs: Minify CSS files - JavaScript Minify: Reduces JS file size
These are safe first steps — they shrink files and reduce download time.
5.2.2 Load JavaScript Deferred
- Defers JS loading until after initial HTML/CSS is parsed
This reduces render-blocking resources.
5.2.3 Delay JavaScript Execution
- Delays JS until user interaction, improving Largest Contentful Paint (LCP)
- If needed, add exceptions under Excluded JavaScript Files (e.g., theme or builder scripts)
WP Rocket docs recommend testing after enabling, and using exclusions when needed.
5.3 Media Optimization
Go to Settings → WP Rocket → Media

5.3.1 LazyLoad for Images
- Loads images only when visible in viewport
Helps reduce initial page weight.
5.3.2 CSS Background Images LazyLoad
- WP Rocket also lazyloads CSS background images (defers background images not immediately seen)
5.3.3 LazyLoad for Iframes & Videos
- Defers video/iframe loading until needed
- Replaces YouTube embeds with preview images
Tip: Test iframes after enabling — lazyload can affect scripts in embedded players.
5.4 Preload Settings
Go to Settings → WP Rocket → Preload

- Preload Cache: Forces early cache creation
- Preload Links: Preloads links on hover for faster navigation
These settings improve perceived speed and make cache more effective on first load.
5.5 CDN Integration
Go to Settings → WP Rocket → CDN
WP Rocket supports CDN integration for popular providers (e.g., KeyCDN, RocketCDN).
Documentation: Using WP Rocket with a CDN

- Enable Content Delivery Network
- Enter your CDN URL (provided by your CDN service)
- Save and clear cache
This ensures CSS/JS/image assets are served from fast, geographically distributed servers.
5.6 Advanced Rules
Go to Settings → WP Rocket → Advanced Rules

Useful in complex sites
- Never cache URLs — e.g., cart, checkout, wishlist
- Never cache cookies or user agents
- Always purge URLs on update
Advanced rules help you protect dynamic pages while caching everything else.
5.7 Database and Heartbeat
Go to Settings → WP Rocket → Database / Heartbeat


- Database Cleanup: Removes revision/post drafts or transients
- Heartbeat Control: Reduces admin-side REST calls
These reduce database overhead, improving backend and frontend performance.
5.8 Clear and Preload Cache
After configuring all options
- Click Clear WP Rocket Cache
- Optionally use Preload Cache
This ensures the site loads optimized assets on every visit.
Recommended Reference Links
| Setting | Official WP Rocket Docs |
|---|---|
| What WP Rocket Does | https://docs.wp-rocket.me/article/67-what-exactly-does-wp-rocket-do |
| Minify CSS Files | https://docs.wp-rocket.me/article/1765-minify-css-files |
| LazyLoad Images | https://docs.wp-rocket.me/article/1141-using-lazyload-in-wp-rocket |
| LazyLoad CSS Backgrounds | https://docs.wp-rocket.me/article/1764-lazyload-for-css-background-images |
| CDN Setup | https://docs.wp-rocket.me/article/42-using-wp-rocket-with-a-cdn |
| Best Practices | https://docs.wp-rocket.me/article/1291-find-the-best-settings-for-your-site |
6. CDN Integration
A Content Delivery Network (CDN) improves loading times for visitors around the world.
What CDN Does
- Serves images, CSS, JS from nearby servers
- Reduces server load
- Improves Time to First Byte (TTFB)
CDN Setup with WP Rocket
- Enable CDN in WP Rocket settings
- Add your CDN URL
- Clear cache and verify asset URLs
Porto works seamlessly with most CDNs without additional configuration.
7. Fixing Common Google PageSpeed Warnings
Render-Blocking Resources
- Disable unused Gutenberg styles
- Avoid duplicated Google Fonts
- Use Porto’s typography settings to manage fonts centrally
Reduce Unused JavaScript
- Remove unused plugins
- Avoid globally loading sliders or heavy libraries
- Use Porto native elements instead of third-party widgets
Reduce Initial Server Response Time
- Ensure caching is enabled
- Avoid excessive database queries
- Use optimized hosting

8. Ongoing Performance Maintenance
Performance is not a one-time task.
Recommended Routine
- Clear cache after major updates
- Test performance monthly
- Audit plugins regularly
- Monitor Core Web Vitals in Google Search Console
Porto is built with performance in mind, but the best results come from:
- Clean content structure
- Proper use of Porto’s native optimization features
- A well-configured caching layer like WP Rocket
When optimized correctly, Porto websites consistently achieve:
- Fast real-world loading times
- Excellent Core Web Vitals
- Stable layouts and smooth interactions
This approach prioritizes long-term performance, not just short-term PageSpeed scores.