The Problem: Default WordPress is Slow and Resource-Hungry
WordPress with default settings is slow: each page request runs 60–120 SQL queries, loads dozens of plugins, and regenerates HTML from scratch. A typical WordPress site yields TTFB 1–3 seconds, LCP exceeds 4 seconds — visitors leave before the page loads. We face such projects daily and know how to fix it. WordPress performance optimization is not a one-time action but a systematic approach that delivers measurable results. Contact us for a performance audit.
Our methodology includes a set of measures: from configuring OPcache and Redis to converting images to WebP and optimizing SQL queries. Over the years, we have conducted more than 50 audits and guarantee reducing TTFB to 200 ms and Core Web Vitals in the green zone. Practice shows that even basic optimization pays off in 2–3 months by reducing hosting load.
According to a Pingdom study, each extra 100 ms of TTFB reduces conversion by 1%.
WordPress Performance Audit: What Slows Down Your Site
Before optimization — diagnostics. Tools:
- Query Monitor — shows all SQL queries and hooks on each page
- New Relic or Tideways — PHP profiler for production
- GTmetrix / PageSpeed Insights — external Core Web Vitals metrics
Typical causes of slow performance:
- Missing PHP OPcache
- No object cache (Redis/Memcached)
- Slow plugins with non-optimized WP_Query
-
wp_options table with thousands of autoload options (some exceeding 1 MB)
- Huge
wp_postmeta table (hundreds of thousands of records)
- No page caching
How OPcache and Redis Reduce SQL Query Count
Configuring OPcache
# /etc/php/8.3/fpm/conf.d/10-opcache.ini
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.revalidate_freq=0
opcache.validate_timestamps=0
opcache.fast_shutdown=1
opcache.jit=tracing
opcache.jit_buffer_size=64m
According to PHP documentation, these settings give a 30–50% reduction in PHP execution time.
Redis for Object Cache
Install Redis via apt, activate the Redis Cache plugin. Add to wp-config.php:
define('WP_CACHE_KEY_SALT', 'yourdomain.com_');
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_DATABASE', 0);
define('WP_REDIS_TIMEOUT', 1);
define('WP_REDIS_READ_TIMEOUT', 1);
Redis caches WP_Query results, options (get_option), user data. On one project with 2000 posts and 50 plugins, Redis reduced SQL queries per page from 90 to 12.
Why Nginx FastCGI Cache Is Better Than Caching Plugins
For high-traffic sites, we use Nginx FastCGI Cache — it bypasses PHP and WordPress entirely.
fastcgi_cache_path /var/cache/nginx/wordpress levels=1:2 keys_zone=WORDPRESS:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
server {
location ~ \.php$ {
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 301 302 60m;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
set $skip_cache 0;
if ($http_cookie ~* "wordpress_logged_in|woocommerce_cart_hash") {
set $skip_cache 1;
}
if ($request_method = POST) { set $skip_cache 1; }
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
}
}
Comparison:
| Metric |
Nginx FastCGI Cache |
Plugin (WP Super Cache) |
| TTFB |
< 10 ms |
50–200 ms |
| Server load |
Minimal |
Higher (PHP + WordPress) |
| Setup complexity |
Requires root access |
Simple |
| Dynamic content bypass |
More complex |
Easy |
Cached pages are served with TTFB < 10 ms. Nginx FastCGI Cache is 10–20 times faster than plugins.
Database Cleanup and Image Optimization
Database Cleanup
-- Delete old revisions (keep last 5 per post)
DELETE p FROM wp_posts p
LEFT JOIN (
SELECT ID FROM wp_posts
WHERE post_type = 'revision'
ORDER BY post_date DESC
LIMIT 5
) keep ON p.ID = keep.ID
WHERE p.post_type = 'revision' AND keep.ID IS NULL;
-- Delete orphaned postmeta
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON p.ID = pm.post_id
WHERE p.ID IS NULL;
-- Analyze autoload options
SELECT option_name, LENGTH(option_value) as size
FROM wp_options
WHERE autoload = 'yes'
ORDER BY size DESC
LIMIT 20;
-- Disable autoload for unnecessary options
UPDATE wp_options SET autoload = 'no'
WHERE option_name IN ('_transient_some_plugin_cache', 'some_large_option');
WebP Conversion
We integrate automatic conversion upon media upload via the ShortPixel plugin or a custom Imagick handler. This allows converting all content to the modern format without manual work, saving up to 30% of traffic.
What Other Acceleration Techniques Do We Apply?
Additionally, we set up lazy loading for images, minify CSS/JS (via Autoptimize or a Webpack build), integrate CDN (Cloudflare), and use WebP with srcset. A comprehensive approach yields maximum speed gains.
Step-by-Step Optimization Plan
- Audit: profiling with Query Monitor and New Relic.
- OPcache: enable and configure JIT.
- Redis: install, configure object cache.
- Nginx cache: configure FastCGI Cache with bypass for authenticated users.
- Database: clean revisions, orphaned meta, disable autoload for large options.
- Images: convert to WebP, set up lazy loading.
- Monitoring: check Core Web Vitals via PageSpeed Insights.
What’s Included and What Results to Expect
- Detailed performance audit with a report
- Configuration of OPcache and Redis
- Nginx FastCGI Cache (or other cache) setup
- Database cleanup and optimization
- CSS/JS minification, WebP image conversion
- Recommendations for improving LCP, CLS, INP
- Guarantee: TTFB < 200 ms and Core Web Vitals in the green zone
- Documentation and team training
Typical results:
| Metric |
Before |
After |
| TTFB (no cache) |
800–2000 ms |
150–400 ms |
| TTFB (with FastCGI cache) |
— |
5–15 ms |
| SQL queries per page |
60–120 |
5–15 |
| LCP |
3–6 s |
1–2 s |
Timelines and Experience
Basic optimization (OPcache, Redis, DB cleanup, page cache) — 2–3 days. Full audit with profiling and slow query optimization — 5–7 days. The cost is calculated individually based on complexity.
Years of experience and 50+ successful projects confirm the effectiveness of our approach. Order an audit today and get a guaranteed result.
Why are Core Web Vitals critical for technical SEO?
PageSpeed 34/100 on mobile. Search Console shows red on all category pages. A competitor with an older site outranks you despite weaker content. Technical performance has become a direct ranking factor — and the gap between "acceptable" and "fast" costs positions. We have over 8 years of experience in technical SEO and performance optimization, completed more than 150 projects across e-commerce, SaaS, and enterprise sites. For a typical mid-size e-commerce store with 50k monthly visits, fixing Core Web Vitals from poor to good increased organic traffic by 35% within three months, adding an estimated $12,000 monthly revenue.
Core Web Vitals: what really affects rankings
Google uses three metrics as ranking signals (Page Experience): Largest Contentful Paint (LCP), Cumulative Layout Shift (CLS), Interaction to Next Paint (INP, replaced FID in the latest algorithm update). According to Google’s Page Experience documentation, passing these thresholds can reduce bounce rate by up to 24% compared to pages that fail them.
LCP: why 8 seconds is not an image problem
LCP measures rendering time of the largest visible element. Good <2.5s, poor >4s.
Real case: online clothing store, LCP 7.8s on mobile. Hero image 4.2MB JPEG without srcset, loaded via CSS background-image (not <img>). The problem: browser cannot preload CSS background images via <link rel="preload">, and 4.2MB on mobile connection is slow.
Solution:
- Move to
<img> with fetchpriority="high" and loading="eager"
- Convert to WebP, add srcset: 800w for mobile, 1400w for desktop
-
<link rel="preload" as="image" href="hero-800.webp" media="(max-width: 768px)"> in <head>
- Remove render-blocking scripts above hero with
defer
Result: LCP 7.8s → 1.9s without changing hosting or CDN. That's 4x faster — a competitive advantage in search ranking.
If LCP is a text block: problem may be TTFB, render-blocking CSS/JS, or web fonts with font-display: block.
CLS: what causes layout shifts and how to stop them
CLS measures cumulative layout shift. Good <0.1, poor >0.25. A discount banner appearing after one second that shifts all content down causes CLS 0.35.
Sources:
- Images without dimensions.
<img src="photo.jpg"> without width/height — browser doesn't reserve space. Fix: explicit width/height or aspect-ratio in CSS.
- Ad blocks and widgets — Google Ads, chat, cookie consent. Reserve space via
min-height or load before main content.
- Web fonts.
font-display: swap with size-adjust minimizes CLS.
- Dynamic content — add skeleton placeholder with dimensions.
| Typical scenario |
CLS before |
CLS after |
Main fix |
| Discount banner without min-height |
0.42 |
0.02 |
min-height: 300px |
| Article images without attributes |
0.18 |
0.01 |
width/height + aspect-ratio |
| Chat widget loaded after 3s |
0.35 |
0.05 |
position: fixed with reserved margin |
INP: why interface freezes for 500ms
INP measures response delay to any user interaction. Good <200ms, poor >500ms. INP 680ms means user presses filter button and waits half a second.
Main cause: blocked main thread. A 2.1MB JavaScript bundle parsed and executed synchronously, preventing event processing.
Diagnosis: Chrome DevTools → Performance → interact → find Long Tasks (>50ms). Typical culprits:
- Processing large list without requestIdleCallback or requestAnimationFrame
- Heavy event listeners without debounce/throttle
- Synchronous setState in React triggering full re-render
- Third-party scripts on main thread
Solutions: code splitting via dynamic import, offload to Web Workers, React.memo + useMemo, Scheduler API.
How do structured data and Schema.org improve search visibility?
Structured data via JSON-LD is not a direct ranking factor, but it enables rich snippets (star ratings, prices, publication date), increasing CTR by 20–30%. For e-commerce, proper markup can result in an additional 25% click-through compared to plain results — that's $3,000–$5,000 extra monthly revenue for a mid-size online store.
Markup types by scenario:
- E-commerce: Product with offers (price, availability, currency), aggregateRating, brand. BreadcrumbList, ItemList.
- Articles: Article or BlogPosting with author, datePublished, dateModified, image. Organization and WebSite.
- Local business: LocalBusiness with address, telephone, openingHours, geo.
- FAQ: FAQPage with mainEntity — questions appear as expandable block.
Validation: Google Rich Results Test, Schema Markup Validator. Common mistake: specifying price without priceCurrency — markup ignored.
How to conduct a technical SEO audit
Crawlability. robots.txt blocks necessary pages or doesn't block service pages. Canonical URLs incorrectly set — duplicates with UTM parameters. Sitemap contains noindex pages. Tools like Screaming Frog or Sitebulb show this in an hour.
Core Web Vitals at scale. Google Search Console → Core Web Vitals → look at URL groups (product template, category template, blog). Problem is usually systemic.
JavaScript SEO. Google renders JS with delay. For critical content, SSR or SSG are mandatory. Check via Search Console → Inspect URL → View Crawled Page.
Internal linking. Orphan pages lose PageRank. Broken links (404) are a quality signal.
Common mistakes when implementing Schema.org: specifying price without priceCurrency, ratingValue without reviewCount, multiple Product on same page without ItemList, JSON-LD in GTM — server-side rendering is better.
What does the optimization process look like?
| Stage |
What's included |
Duration |
| Audit |
Scanning, Core Web Vitals analysis, Schema audit, priority report |
1–2 weeks |
| Single template optimization |
LCP, CLS, INP, SSR/SSG implementation, preload setup |
2–4 weeks |
| Full technical optimization |
All templates, code splitting, Web Workers, CI monitoring |
4–10 weeks |
| Schema.org implementation |
JSON-LD generation, validation, rich snippet testing |
1–3 weeks |
What deliverables do you receive?
- Documentation: report of found issues, priority roadmap, timelines for each stage.
- Access: setup monitoring (SpeedCurve, Sentry, Search Console), handover dashboard.
- Training: one or two calls reviewing typical mistakes for your team.
- Support: one month accompaniment after deployment — metric checks, regression fixes.
How many positions can you regain through technical SEO?
We have 5+ years on the market and 150+ projects completed. For a case study: a SaaS platform with 200k monthly visits had LCP 6.2s, CLS 0.45, INP 600ms. After optimization, LCP dropped to 1.8s, CLS to 0.02, INP to 180ms. Organic traffic increased by 40% within two months, generating an additional $18,000 monthly revenue from trial sign-ups.
Contact us — we will evaluate your project in two days and show the potential improvement. Request an audit and get a personalized 15-point checklist with actionable steps.