WordPress, dünya çapında en popüler içerik yönetim sistemi olmasına rağmen, yanlış yapılandırıldığında yavaş yüklenen siteler yaratabilir. 2025 yılında Google'ın Core Web Vitals'ı SEO ranking faktörü olarak kullanması, WordPress site hızlandırma işlemlerini daha da kritik hale getirmiştir. Bu kapsamlı rehberde, WordPress sitenizi maksimum performansa çıkarmak için ihtiyacınız olan tüm teknikleri öğreneceksiniz.
WordPress Hosting Seçimi: Performansın Temeli
Shared Hosting vs VPS vs Dedicated Server
Shared Hosting Sınırlamaları:
- CPU ve RAM kaynaklarının paylaştırılması
- Sunucu seviyesi optimizasyonların kısıtlı olması
- Traffic spike durumlarında performans düşüşü
VPS Hosting Avantajları:
- Dedicated kaynaklara erişim
- Root erişimi ile server-level optimizasyonlar
- Ölçeklenebilir kaynak yönetimi
- Önerilen VPS sağlayıcıları: DigitalOcean, Vultr, Linode
Dedicated Server Senaryoları:
- Yüksek trafikli enterprise siteler
- E-ticaret platformları
- Tam kontrol gereken özel uygulamalar
Hosting Performans Kriterleri
# Server response time kontrolü
curl -o /dev/null -s -w "Total time: %{time_total}s\n" https://yoursite.com
# MySQL performans testi
mysql> SELECT BENCHMARK(1000000, SHA1('test'));
CDN Implementation Rehberi
Cloudflare Konfigürasyonu
Temel Ayarlar:
- SSL/TLS → Full (Strict) moduna geçiş
- Speed → Optimization → Auto Minify aktifleştirme
- Caching → Browser Cache TTL → 1 yıl
- Network → HTTP/2 ve HTTP/3 aktivasyonu
Gelişmiş Cloudflare Optimizasyonları:
// Page Rules örneği
Cache Level: Cache Everything
Browser Cache TTL: a year
Edge Cache TTL: a month
// Workers ile critical CSS inline etme
addEventListener('fetch', event => {
if (event.request.url.includes('.css')) {
event.respondWith(handleCSSRequest(event.request))
}
})
AWS CloudFront vs KeyCDN Karşılaştırması
AWS CloudFront:
- Global edge locations (400+)
- Lambda@Edge ile custom logic
- AWS ekosistemi entegrasyonu
- Maliyet: $0.085/GB (ilk 10TB)
KeyCDN:
- Basit kurulum süreci
- Real-time analytics
- HTTP/2 Push desteği
- Maliyet: $0.04/GB
Caching Katmanları: Çok Seviyeli Strateji
1. Browser Cache Optimizasyonu
# .htaccess dosyasına eklenecek kod
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
</IfModule>
<IfModule mod_headers.c>
<filesMatch "\.(css|js|png|jpg|jpeg|gif|webp|svg)$">
Header set Cache-Control "max-age=31536000, public"
</filesMatch>
</IfModule>
2. Server-Side Caching
WP Rocket Konfigürasyonu:
- Page caching aktifleştirme
- Database cleanup programlama
- Minification ve concatenation
- Lazy loading implementasyonu
W3 Total Cache Gelişmiş Ayarları:
// wp-config.php optimizasyonları
define('WP_CACHE', true);
define('ENABLE_CACHE', true);
define('WP_MEMORY_LIMIT', '512M');
// Object cache aktivasyonu
define('WP_CACHE_KEY_SALT', 'your-unique-salt');
3. Database Caching
Redis Implementation:
# Redis kurulumu (Ubuntu)
sudo apt install redis-server
sudo systemctl enable redis-server
# WordPress için Redis object cache
wp plugin install redis-cache --activate
wp redis enable
Memcached Alternativi:
// wp-config.php Memcached ayarları
$memcached_servers = array(
'default' => array('localhost:11211')
);
Image Optimization: Görsel Performans Artırımı
WebP Conversion Stratejisi
Otomatik WebP Dönüşümü:
// functions.php WebP serve fonksiyonu
function serve_webp_images() {
if (strpos($_SERVER['HTTP_ACCEPT'], 'image/webp') !== false) {
add_filter('wp_generate_attachment_metadata', 'create_webp_version');
}
}
add_action('init', 'serve_webp_images');
function create_webp_version($metadata) {
$upload_dir = wp_upload_dir();
$image_path = $upload_dir['basedir'] . '/' . $metadata['file'];
$webp_path = preg_replace('/\.(jpg|jpeg|png)$/i', '.webp', $image_path);
// ImageMagick ile WebP dönüşümü
$image = new Imagick($image_path);
$image->setImageFormat('webp');
$image->setImageCompressionQuality(80);
$image->writeImage($webp_path);
return $metadata;
}
Responsive Images ve Srcset
<!-- Modern responsive image implementation -->
<picture>
<source
srcset="image-400.webp 400w, image-800.webp 800w, image-1200.webp 1200w"
sizes="(max-width: 600px) 400px, (max-width: 900px) 800px, 1200px"
type="image/webp">
<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: 900px) 800px, 1200px"
loading="lazy"
alt="Açıklayıcı alt text">
</picture>
Advanced Lazy Loading
// Intersection Observer ile custom lazy loading
const lazyImages = document.querySelectorAll('.lazy-image');
const imageObserver = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
img.classList.remove('lazy-image');
imageObserver.unobserve(img);
}
});
}, {
rootMargin: '50px 0px'
});
lazyImages.forEach(img => imageObserver.observe(img));
Database Optimization: Veri Tabanı Performansı
MySQL Query Optimizasyonu
Yavaş Sorguları Tespit Etme:
-- Slow query log aktivasyonu
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
-- En yavaş sorguları analiz etme
SELECT
DIGEST_TEXT,
COUNT_STAR,
AVG_TIMER_WAIT/1000000000000 as avg_sec,
MAX_TIMER_WAIT/1000000000000 as max_sec
FROM performance_schema.events_statements_summary_by_digest
ORDER BY AVG_TIMER_WAIT DESC
LIMIT 10;
WordPress Database Cleanup
-- Gereksiz revisions temizliği
DELETE FROM wp_posts WHERE post_type = 'revision';
-- Spam comments silme
DELETE FROM wp_comments WHERE comment_approved = 'spam';
-- Unused meta data temizliği
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
WHERE wp.ID IS NULL;
-- Transients temizliği
DELETE FROM wp_options
WHERE option_name LIKE '_transient_%'
AND option_name NOT LIKE '_transient_timeout_%';
Index Optimizasyonu
-- Performans artırıcı indexler
ALTER TABLE wp_posts ADD INDEX idx_post_status_date (post_status, post_date);
ALTER TABLE wp_postmeta ADD INDEX idx_meta_key_value (meta_key, meta_value(10));
ALTER TABLE wp_comments ADD INDEX idx_comment_post_approved (comment_post_ID, comment_approved);
Plugin Performance Audit
Plugin Impact Analysis
Query Monitor ile Analiz:
- Slow queries tespiti
- Plugin bazlı resource usage
- HTTP request analizi
- Memory usage tracking
P3 Plugin Profiler Alternatifleri:
# WP-CLI ile plugin performance testi
wp plugin list --status=active --format=table
wp db query "SELECT * FROM wp_options WHERE autoload = 'yes'" --format=csv
# Plugin autoload data kontrolü
wp option list --autoload=yes --format=table
Kritik Plugin Optimizasyonları
Contact Form 7 Optimizasyonu:
// CF7 scripts sadece gerekli sayfalarda yükleme
add_action('wp_enqueue_scripts', 'dequeue_cf7_scripts');
function dequeue_cf7_scripts() {
if (!is_page('contact')) {
wp_dequeue_script('contact-form-7');
wp_dequeue_style('contact-form-7');
}
}
WooCommerce Performance:
// WooCommerce cart fragments deaktivasyonu
add_action('wp_enqueue_scripts', 'disable_wc_cart_fragments', 11);
function disable_wc_cart_fragments() {
if (is_admin()) return;
wp_dequeue_script('wc-cart-fragments');
}
Critical CSS ve Above-the-Fold Optimization
Critical CSS Generation
# Critical CSS npm paketi ile oluşturma
npm install -g critical
critical https://yoursite.com \
--base=./ \
--css=style.css \
--dimensions 1300x900,375x667 \
--minify > critical.css
Above-the-Fold İyileştirmesi
// Critical CSS inline etme
function inline_critical_css() {
if (is_front_page()) {
echo '<style>' . file_get_contents(get_template_directory() . '/critical-home.css') . '</style>';
}
}
add_action('wp_head', 'inline_critical_css', 1);
// Non-critical CSS'yi async yükleme
function load_css_async($tag, $handle) {
if ('theme-style' === $handle) {
return str_replace("rel='stylesheet'", "rel='preload' as='style' onload=\"this.onload=null;this.rel='stylesheet'\"", $tag);
}
return $tag;
}
add_filter('style_loader_tag', 'load_css_async', 10, 2);
AMP Implementation Stratejisi
WordPress AMP Plugin Konfigürasyonu
Reader Mode vs Transitional Mode:
- Reader Mode: Ayrı AMP sayfaları (/amp/)
- Transitional Mode: Native AMP experience
Custom AMP Components:
<!-- AMP carousel implementation -->
<amp-carousel width="400" height="300" layout="responsive" type="slides">
<amp-img src="image1.webp" width="400" height="300" alt="Image 1"></amp-img>
<amp-img src="image2.webp" width="400" height="300" alt="Image 2"></amp-img>
</amp-carousel>
<!-- AMP analytics -->
<amp-analytics type="googleanalytics">
<script type="application/json">
{
"vars": {
"account": "UA-XXXXX-Y"
},
"triggers": {
"trackPageview": {
"on": "visible",
"request": "pageview"
}
}
}
</script>
</amp-analytics>
Monitoring ve Performance Tracking
Core Web Vitals Optimization
Largest Contentful Paint (LCP) İyileştirmesi:
- Hero image optimizasyonu
- Server response time azaltma
- Render blocking resources eliminasyonu
First Input Delay (FID) Düzeltme:
- JavaScript execution time optimizasyonu
- Web Workers kullanımı
- Event listener optimizasyonu
Cumulative Layout Shift (CLS) Önleme:
- Image ve video dimensions belirleme
- Font-display: swap kullanımı
- Dynamic content için space reservation
Continuous Monitoring Setup
// Real User Monitoring (RUM) implementation
function trackWebVitals() {
import('web-vitals').then(({getCLS, getFID, getFCP, getLCP, getTTFB}) => {
getCLS(console.log);
getFID(console.log);
getFCP(console.log);
getLCP(console.log);
getTTFB(console.log);
});
}
// Google Analytics 4 ile Core Web Vitals tracking
gtag('config', 'GA_MEASUREMENT_ID', {
custom_map: {'metric1': 'LCP', 'metric2': 'FID', 'metric3': 'CLS'}
});
Performance Budget Implementation
// Lighthouse CI budget.json
{
"budget": [
{
"path": "/*",
"timings": [
{"metric": "first-contentful-paint", "budget": 2000},
{"metric": "largest-contentful-paint", "budget": 2500},
{"metric": "cumulative-layout-shift", "budget": 0.1}
],
"resourceSizes": [
{"resourceType": "script", "budget": 300},
{"resourceType": "image", "budget": 500},
{"resourceType": "total", "budget": 1000}
]
}
]
}
Gelişmiş Optimizasyon Teknikleri
Service Worker ile Offline Caching
// sw.js - Service Worker implementation
const CACHE_NAME = 'wordpress-site-v1';
const urlsToCache = [
'/',
'/wp-content/themes/your-theme/style.css',
'/wp-content/themes/your-theme/script.js'
];
self.addEventListener('install', event => {
event.waitUntil(
caches.open(CACHE_NAME)
.then(cache => cache.addAll(urlsToCache))
);
});
self.addEventListener('fetch', event => {
event.respondWith(
caches.match(event.request)
.then(response => response || fetch(event.request))
);
});
HTTP/2 Push Implementation
// HTTP/2 Push header'ları
function add_http2_push_headers() {
if (is_front_page()) {
header('Link: </wp-content/themes/theme/critical.css>; rel=preload; as=style', false);
header('Link: </wp-content/themes/theme/app.js>; rel=preload; as=script', false);
}
}
add_action('send_headers', 'add_http2_push_headers');
Sonuç ve En İyi Uygulamalar
WordPress performans optimizasyonu sürekli bir süreçtir. 2025 yılında başarılı olmak için:
- Hosting altyapısını doğru seçin - Shared hosting yerine VPS tercih edin
- CDN kullanımını zorunlu görün - Cloudflare minimum gereklilik
- Çok katmanlı caching stratejisi - Browser, server, database, object cache
- Image optimizasyonunu otomatikleştirin - WebP, lazy loading, srcset
- Database bakımını ihmal etmeyin - Regular cleanup ve indexing
- Plugin sayısını minimize edin - Her plugin performans maliyeti
- Core Web Vitals'ı takip edin - Google ranking faktörü
- Continuous monitoring yapın - Performance regression önleme
Bu rehberdeki teknikleri uyguladığınızda WordPress sitenizin yükleme süresini %60-80 oranında iyileştirebilir, Google PageSpeed Insights skorunuzu 90+ seviyelerine çıkarabilirsiniz. Performans optimizasyonu bir kerelik işlem değil, sürekli izleme ve iyileştirme gerektiren bir süreçtir.
İlgili Konular: WordPress güvenlik, SEO optimizasyonu, WordPress migration, e-ticaret performansı
0 Yorumlar