HOSTİNG BLOĞU

WordPress Optimizasyon, Güvenlik ve Hata Ayıklama Kılavuzu: Sistem Yöneticisinin El Kitabı

Modern web ekosisteminde, dünya genelindeki web sitelerinin %40’ından fazlası WordPress altyapısını kullanmaktadır. Ancak bu popülerlik,

beraberinde performans darboğazlarını, güvenlik zafiyetlerini ve sistem hatalarını da getirmektedir. Bir IT uzmanı ve sistem yöneticisi (SysAdmin) perspektifinden bakıldığında, bir WordPress sitesini yönetmek yalnızca yönetim panelindeki butonlara tıklamaktan ibaret değildir. Sunucu kaynaklarının verimli kullanılması, PHP yorumlayıcısının optimizasyonu, veritabanı indekslerinin düzenlenmesi ve katmanlı güvenlik mimarisinin kurulması gibi pek çok alt süreç mevcuttur.

Bu rehberde; sunucu katmanından kod mimarisine kadar bir WordPress sitesinin nasıl daha hızlı, güvenli ve kararlı çalıştırılacağını derinlemesine inceleyeceğiz.

728 X 90 kopyası

 

1. WordPress PHP Güncelleme Nasıl Yapılır?

PHP, WordPress’in kalbidir. WordPress çekirdeği, temaları ve eklentileri tamamen PHP tabanlı çalışır. Dolayısıyla kullanılan PHP sürümü; sitenizin yanıt süresini (TTFB), bellek tüketimini ve genel güvenliğini doğrudan etkiler. Eski bir PHP sürümü (örneğin PHP 7.4 veya daha eskisi) kullanmak, sitenizi hem bilinen güvenlik açıklarına karşı savunmasız bırakır hem de modern PHP 8.x sürümlerinin getirdiği JIT (Just-In-Time) derleyicisi gibi performans avantajlarından mahrum kalmanıza neden olur.

MultiPHP Manager ile Php sürüm yükseltme isimli makalemizi inceleyebilirsiniz.

 

PHP Sürüm Güncellemesi Öncesi Alınması Gereken Önlemler

Doğrudan canlı (production) ortamda PHP sürümünü yükseltmek, eklenti uyuşmazlıkları nedeniyle sitenizin tamamen çökmesine yol açabilir. Bu nedenle bir IT uzmanı olarak şu adımları izlemelisiniz:

  1. Tam Yedekleme (Full Backup): Hem dosyaların (wp-content, wp-config.php vb.) hem de MySQL veritabanının yedeğini alın.
  2. Staging (Sahneleme) Alanı Oluşturun: Canlı sitenizin bir kopyasını alt alan adında (staging.alanadi.com) oluşturun ve güncellemeyi önce burada test edin.
  3. Eklenti ve Tema Uyumluluğu Denetimi: Kullanılan tüm bileşenlerin hedef PHP sürümünü (örneğin PHP 8.1 veya 8.2) destekleyip desteklemediğini kontrol edin. Güncel olmayan, geliştiricisi tarafından terk edilmiş eklentileri devredışı bırakın veya alternatifleriyle değiştirin.

 

Kontrol Panelleri Üzerinden PHP Güncelleme Adımları

Sistem yöneticileri genellikle sunucu yönetimini cPanel, Plesk veya DirectAdmin gibi paneller üzerinden gerçekleştirirler.

A. cPanel (MultiPHP Yöneticisi) ile PHP Güncelleme

  1. cPanel hesabınıza giriş yapın.
  2. Yazılım (Software) kategorisi altında yer alan MultiPHP Yöneticisi (MultiPHP Manager) modülüne tıklayın.
  3. Güncellemek istediğiniz alan adının yanındaki kutucuğu işaretleyin.
  4. Sağ üst köşede bulunan PHP Sürümü (PHP Version) açılır menüsünden en güncel ve kararlı sürümü (Örn: PHP 8.2) seçin.
  5. Uygula (Apply) butonuna tıklayarak işlemi tamamlayın.

 

B. Plesk Panel ile PHP Güncelleme

  1. Plesk kontrol paneline giriş yapın.
  2. İlgili alan adının altında bulunan PHP Ayarları (PHP Settings) seçeneğine tıklayın.
  3. PHP desteği (PHP support) bölümündeki açılır menüden hedef PHP sürümünü seçin (Örn: 8.2.x FPM application served by nginx).
  4. Tamam (OK) veya Uygula (Apply) butonuna basarak değişiklikleri kaydedin.

 

Sunucu Seviyesinde Kritik PHP Parametrelerinin Yapılandırılması

Yalnızca PHP sürümünü yükseltmek yetmez; sunucu kaynaklarının WordPress’in ihtiyaç duyduğu işlemleri kesintisiz yapabilmesi için php.ini veya .user.ini dosyası üzerinden belirli limitlerin optimize edilmesi gerekir. Bir IT uzmanının yapılandırması gereken ideal değerler şunlardır:

  • memory_limit = 256M (veya 512M): WordPress’in ağır eklentileri (WooCommerce, Elementor vb.) çalıştırırken "Fatal Error: Allowed memory size exhausted" hatası almasını önler.
  • upload_max_filesize = 64M: Büyük boyutlu PDF, görsel veya eklenti dosyalarının yüklenebilmesini sağlar.
  • post_max_size = 64M: Form verilerinin ve dosya yüklemelerinin sınırını belirler. upload_max_filesize değerine eşit veya ondan biraz büyük olmalıdır.
  • max_execution_time = 300: PHP betiklerinin çalışma süresini saniye cinsinden sınırlar. Özellikle yedekleme ve güncelleme esnasında işlemlerin yarıda kesilmesini engeller.
  • max_input_vars = 3000: Menü öğelerinin çok fazla olduğu veya karmaşık eklentilerin kullanıldığı sitelerde veri kaybını önler.

 

İdeal php.ini Optimizasyon Şablonu
max_execution_time = 300
max_input_time = 120
memory_limit = 512M
post_max_size = 128M
upload_max_filesize = 128M
max_input_vars = 5000

 

2. WordPress Beyaz Ekran Sorunu Çözümü

WordPress ekosisteminde "White Screen of Death" (WSoD) olarak bilinen Beyaz Ekran Sorunu, genellikle PHP kaynaklı kritik bir hatanın (Fatal Error) tarayıcıya yansımasıdır. Güvenlik ve estetik gerekçelerle PHP hataları varsayılan olarak dış dünyaya kapatıldığı için kullanıcı boş, beyaz bir ekranla karşılaşır.

Bir sistem yöneticisi için beyaz ekran korkutucu değildir; arkasındaki mantığı anlamak ve log dosyalarını analiz etmek hatayı saniyeler içinde çözüme kavuşturur.

wmaraci Banner

 

Adım Adım Teşhis ve Çözüm Algoritması

1. WP_DEBUG Modunu Aktif Etme

Beyaz ekranın arkasındaki gerçek teknik hatayı görmek için WordPress hata ayıklama modunu açmalıyız.

  • FTP veya Dosya Yöneticisi aracılığıyla sitenizin kök dizinine (public_html) bağlanın.
  • wp-config.php dosyasını bir metin editörüyle açın.
  • Aşağıdaki satırları bulun ve değerlerini true olarak değiştirin (eğer yoksa ekleyin):

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', true );
@ini_set( 'display_errors', 1 );

 

Bu işlemden sonra sitenizi yenilediğinizde, beyaz ekran yerine hatanın kaynağını gösteren bir kod dizini (örneğin: /wp-content/plugins/contact-form-7/... on line 124) göreceksiniz.

 

2. Eklenti ve Tema Çakışmalarını İzole Etme

Eğer hata bir eklentiden kaynaklanıyorsa ve yönetim paneline (wp-admin) erişemiyorsanız:

  • Eklentileri Toplu Devre Dışı Bırakma: FTP üzerinden /wp-content/ dizinine gidin. plugins klasörünün adını geçici olarak plugins_old yapın. Siteniz açılırsa hata kesinlikle bir eklentiden kaynaklanıyordur. Klasör adını tekrar plugins yapıp, içerisindeki eklenti klasörlerini tek tek yeniden adlandırarak sorunlu eklentiyi tespit edebilirsiniz.
  • Temayı Varsayılana Döndürme: /wp-content/themes/ dizinindeki aktif temanızın klasör adını değiştirerek WordPress'i varsayılan temaya (Twenty Twenty-Four gibi) dönmeye zorlayabilirsiniz.

 

3. PHP Bellek Limitini Artırma

Eğer loglarda "Allowed memory size of ... bytes exhausted" hatası görüyorsanız, wp-config.php dosyanızın en üstüne (ancak wp-settings.php çağrısından önce) şu satırı ekleyerek WordPress'e daha fazla bellek tahsis edebilirsiniz:

define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );

 

4. Sunucu Hata Loglarını (Error Logs) İnceleme

Eğer WordPress debug modu hiçbir şey göstermiyorsa, sorun doğrudan web sunucusu (Apache/Nginx) katmanındadır.

  • cPanel kullanıyorsanız Hatalar (Errors) bölümünü inceleyin.
  • SSH erişiminiz varsa terminal üzerinden logları gerçek zamanlı takip edin:

# Apache için error log takibi
tail -f /var/log/apache2/error.log

# Nginx için error log takibi
tail -f /var/log/nginx/error.log

# cPanel kullanıcı bazlı log takibi
tail -f /home/kullanici_adi/logs/alanadi.com.error_log

 

pre reseller  mail

3. WordPress Hızlandırma Yöntemleri

Web sitenizin yüklenme hızı, kullanıcı deneyimini doğrudan etkilediği gibi Google'ın Core Web Vitals (Önemli Web Verileri) metrikleri üzerinden arama motoru sıralamanızı da belirler. Yavaş bir web sitesi, dönüşüm oranlarında ciddi kayıplara yol açar. Sistem mühendisliği yaklaşımıyla WordPress hızlandırma, çok katmanlı bir optimizasyon sürecidir.

 

Optimizasyon Katmanı Kullanılan Teknoloji / Yöntem Sağladığı Avantaj
Sunucu (Caching) Redis, Memcached, OPcache Veritabanı ve PHP yükünü azaltır, TTFB'yi düşürür.
Ön Yüz (Frontend) CSS/JS Minifikasyonu, Gzip/Brotli Dosya boyutlarını küçülterek tarayıcı yükünü azaltır.
Görsel Optimizasyonu WebP/Avif Dönüşümü, Lazy Load Bant genişliği tasarrufu sağlar, LCP skorunu iyileştirir.
Veritabanı İndeksleme, Tablo Optimizasyonu Sorgu sürelerini milisaniyeler seviyesine indirir.

 

A. Sunucu Seviyesinde Önbellekleme (Caching) Mimari Kurulumu

Bir web sayfası talep edildiğinde PHP her seferinde veritabanına sorgu gönderir, şablonları birleştirir ve HTML çıktısı üretir. Bu dinamik süreç sunucu işlemcisini (CPU) yorar.

  • OPcache: PHP kodunun derlenmiş halini bellekte (RAM) tutarak her istekte yeniden derlenmesini önler. php.ini dosyasında mutlaka aktif edilmelidir:

opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2

  • Nesne Önbellekleme (Object Caching - Redis/Memcached): Sık tekrarlanan veritabanı sorgu sonuçlarını RAM üzerinde depolayarak veritabanı üzerindeki I/O yükünü sıfıra yaklaştırır. LiteSpeed Memcached veya Redis nesne önbellekleme eklentileriyle entegre edilerek kullanılmalıdır.

 

B. Görsel Optimizasyonu ve Yeni Nesil Biçimler

Görseller, bir sayfa boyutunun ortalama %60-70'ini oluşturur.

  • WebP ve AVIF Kullanımı: JPEG ve PNG formatındaki görsellerinizi kayıpsız veya az kayıplı olarak yeni nesil WebP veya AVIF formatlarına dönüştürün. Bu dönüşüm dosya boyutlarını %50'den fazla azaltır.
  • Gecikmeli Yükleme (Lazy Loading): Kullanıcı sayfayı aşağı kaydırmadıkça ekran dışındaki görsellerin yüklenmesini engelleyin. WordPress bunu yerel olarak desteklese de modern optimizasyon eklentileriyle bu süreci daha agresif hale getirebilirsiniz.

 

C. CSS, JavaScript ve HTML Minifikasyonu ve Erteleme

  • Minifikasyon: Kod satırlarındaki gereksiz boşlukları, yorum satırlarını ve karakterleri temizleyerek dosya boyutunu küçültün.
  • JS Erteleme (Defer/Async): Sayfa render edilirken JavaScript dosyalarının yüklenmesini erteleyerek "Oluşturmayı Engelleyen Kaynakları Ele Edin" (Eliminate render-blocking resources) uyarısını giderin.

 

D. Brotli ve Gzip Sıkıştırma Aktivasyonu

Sunucu ile istemci (tarayıcı) arasındaki veri aktarımını sıkıştırarak veri boyutunu %70'e varan oranda azaltabilirsiniz. Nginx sunucularda Brotli, Apache sunucularda ise mod_deflate (Gzip) kullanılmalıdır.

.htaccess dosyasına eklenecek ideal Gzip kodu:

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript application/json
</IfModule>

 

4. WordPress Veritabanı Temizleme

WordPress, arka planda tüm verilerini saklamak için ilişkisel bir veritabanı olan MySQL veya MariaDB kullanır. Zamanla bu veritabanı; eski yazı sürümleri (revisions), silinmiş yorumlar, artık meta verileri ve eklentilerin bıraktığı çöp tablolar nedeniyle şişer. Şişen bir veritabanı, sorguların yavaşlamasına ve dolayısıyla sitenin performansının düşmesine neden olur.

Güvenli Veritabanı Temizliği için SQL Sorguları (Uzman Seviyesi)

Temizlik işlemlerine başlamadan önce mutlaka veritabanı yedeği alınmalıdır. İşlemleri doğrudan phpMyAdmin üzerinden SQL sekmesinden çalıştırabilirsiniz.

 

1. Yazı Sürümlerini (Revisions) Temizleme

Siz bir yazıyı düzenlerken WordPress her taslağı veritabanına kaydeder. Yıllar içinde binlerce gereksiz yazı sürümü oluşur. Aşağıdaki SQL sorgusu ile tüm eski sürümleri silebilirsiniz:

DELETE FROM wp_posts WHERE post_type = 'revision';

İpucu: Gelecekte bu birikmeyi önlemek için wp-config.php dosyanıza şu satırı ekleyerek revizyon sınırını 3 ile limitleyebilirsiniz:

define( 'WP_POST_REVISIONS', 3 );

 

2. Artık Eklenti ve Meta Verilerini (Orphaned Metadata) Temizleme

Silinen eklentiler veya yazılar ardında yetim kalmış (bağlantısı kopmuş) meta veriler bırakır. Bu verileri temizlemek için:

-- Yetim post meta verilerini temizleme
DELETE pm FROM wp_postmeta pm LEFT JOIN wp_posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL;

-- Yetim yorum meta verilerini temizleme
DELETE xm FROM wp_commentmeta xm LEFT JOIN wp_comments xc ON xc.comment_ID = xm.comment_id WHERE xc.comment_ID IS NULL;

 

3. Geçici Verileri (Transients) Temizleme

Eklentilerin API istekleri veya geçici sorgular için oluşturduğu transient veriler zaman aşımına uğradıktan sonra bile bazen veritabanında kalır:

DELETE FROM wp_options WHERE option_name LIKE '_transient_%' OR option_name LIKE '_site_transient_%';

 

4. Tabloları Optimize Etme ve Defragmentasyon

Veritabanından büyük miktarda veri silindiğinde, disk üzerinde boş alanlar (overhead) kalır. Tabloları birleştirmek ve indeksleri tazelemek için phpMyAdmin üzerinden tüm tabloları seçip sayfa altındaki açılır menüden "Tabloyu Optimize Et" (Optimize Table) seçeneğini işaretleyin.

 

5. WordPress Güvenlik Ayarları

Dünyanın en popüler CMS’i olmak, siber korsanların ve otomatik bot ağlarının (botnets) da bir numaralı hedefi olmak anlamına gelir. WordPress sitelerinin hacklenme nedenlerinin başında güncellenmemiş bileşenler, zayıf parolalar ve sunucu seviyesindeki yapılandırma hataları gelir. Katmanlı bir güvenlik stratejisiyle sitenizi aşılmaz bir kaleye dönüştürebilirsiniz.

abweb8gbbaner

 

Sistem Seviyesinde Güvenlik Protokolleri

A. Dosya ve Klasör İzinlerinin Sıkılaştırılması (Chmod Yapılandırması)

Sunucuda barındırılan dosyaların yazma ve okuma yetkileri minimum ayrıcalık ilkesine (least privilege) göre ayarlanmalıdır. Hatalı verilen 777 izni, bir saldırganın sunucuya zararlı yazılım yüklemesine davetiye çıkarır.

  • Tüm Klasörler (Directories): 755 (veya 750) olmalıdır.
  • Tüm Dosyalar (Files): 644 (veya 640) olmalıdır.
  • wp-config.php Dosyası: Sitenin veritabanı şifresini barındırdığı için en hassas dosyadır. İzni 600 veya 400 olarak ayarlanmalıdır.

Terminal üzerinden toplu izin değiştirme komutları:

find /path/to/wordpress/ -type d -exec chmod 755 {} \;
find /path/to/wordpress/ -type f -exec chmod 644 {} \;
chmod 600 /path/to/wordpress/wp-config.php

 

B. wp-config.php Dosyasını Güvenceye Alma

Veritabanı bağlantı bilgilerini içeren bu dosyanın dışarıdan erişimini engellemek için Apache sunucularda .htaccess dosyasına şu kuralları ekleyin:

<files wp-config.php>
order allow,deny
deny from all
</files>

Ayrıca, wp-config.php içerisindeki benzersiz güvenlik anahtarlarını (SALT Keys) mutlaka tanımlayın. Bu anahtarlar şifreleme algoritmalarını güçlendirir:

define('AUTH_KEY', 'bunu_rastgele_ve_uzun_bir_karakter_dizisiyle_degistirin');
define('SECURE_AUTH_KEY', 'bunu_rastgele_ve_uzun_bir_karakter_dizisiyle_degistirin');
define('LOGGED_IN_KEY', 'bunu_rastgele_ve_uzun_bir_karakter_dizisiyle_degistirin');
define('NONCE_KEY', 'bunu_rastgele_ve_uzun_bir_karakter_dizisiyle_degistirin');

 

C. Kaba Kuvvet (Brute Force) Saldırılarına Karşı Önlemler

Saldırganlar, sitenizin yönetim paneline girmek için yüz binlerce şifre kombinasyonunu otomatik botlarla denerler.

  • wp-admin ve wp-login.php Yolunu Değiştirme: Varsayılan giriş sayfalarını değiştirerek botların sitenize istek atmasını engelleyin.
  • XML-RPC Protokolünü Devre Dışı Bırakma: XML-RPC, dış uygulamaların WordPress ile iletişim kurmasını sağlar ancak kaba kuvvet saldırıları için sıkça kötüye kullanılır. .htaccess dosyanıza şu kodu ekleyerek kapatın:

<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>

  • İki Faktörlü Doğrulama (2FA): Yönetici girişlerine mobil doğrulama (Google Authenticator vb.) şartı getirin.

 

D. Dosya Düzenleyiciyi Kapatma

Yönetim paneline sızan bir saldırganın doğrudan tema veya eklenti dosyalarından arka kapı (backdoor) açmasını engellemek için kod düzenleme yetkisini panelden tamamen kaldırın. wp-config.php içerisine ekleyin:

define( 'DISALLOW_FILE_EDIT', true );

 

Sonuç: Kesintisiz ve Sürdürülebilir Bir WordPress Ekosistemi

Başarılı bir WordPress yönetimi; doğru optimize edilmiş bir sunucu altyapısı, güncel tutulan bir yazılım mimarisi, düzenli temizlenen bir veritabanı ve proaktif güvenlik önlemlerinin bir araya gelmesiyle mümkündür.

Bir IT uzmanı olarak bu rehberde paylaşılan adımları periyodik bir bakım planına dönüştürmeniz, sitelerinizin her zaman hızlı, güvenli ve çevrimiçi kalmasını sağlayacaktır. Unutmayın, dijital dünyada en iyi sorun giderme yöntemi, sorunların ortaya çıkmasını en baştan engelleyecek sistemleri doğru inşa etmektir.

 

Bir sonraki yazımızda Web Sitesi Neden Yavaş Açılır? 15 Yaygın Sebep ve Çözümleri isimli makalemizi inceleyebilirsiniz.