WordPress, dünyanın en popüler içerik yönetim sistemi olmasını esnekliğine ve kullanıcı dostu yapısına borçludur. Ancak bu esneklik, bazen arka planda çalışan ve site hızını olumsuz etkileyebilen teknik süreçleri de beraberinde getirir. Bu süreçlerin en başında WP-Cron gelmektedir. Bir SEO ajansı veya web sitesi sahibi olarak, sitenizin Google sıralamalarında kalıcı olması için sadece içerik değil, teknik altyapının da kusursuz çalışması gerekir. Seojen.com olarak hazırladığımız bu makalede, WP-Cron'un gizli dünyasına inecek, performans sorunlarını nasıl gidereceğinizi ve sistem kaynaklarını nasıl daha verimli kullanacağınızı detaylandıracağız.
WP-Cron, WordPress'in zamanlanmış görevleri yürütmek için kullandığı yerleşik bir mekanizmadır. İsmindeki "Cron" terimi, UNIX tabanlı işletim sistemlerinde belirli zaman aralıklarıyla çalışan komutları ifade eden "crontab" sisteminden gelir. Ancak WP-Cron, gerçek bir sistem cronu değildir; WordPress geliştiricileri tarafından sunucu tarafında her kullanıcının crontab erişimi olmayabileceği düşünülerek geliştirilmiş bir simülasyondur.
Bir ziyaretçi sitenizdeki herhangi bir sayfayı yüklediğinde, WordPress arka planda WP-Cron'un çalışıp çalışmaması gerektiğini kontrol eder. Eğer zamanı gelmiş bir görev (örneğin zamanlanmış bir yazı veya güncelleme kontrolü) varsa, WordPress bu görevi o ziyaretçinin isteği üzerinden tetikler. Bu yapı, WordPress'in sunucu erişimi kısıtlı olan paylaşımlı hosting hesaplarında bile görevleri yürütmesini sağlar. Ancak bu "istek odaklı" çalışma mantığı, özellikle trafiği yoğun sitelerde her sayfa yüklemesinde gereksiz bir sorgu yükü anlamına gelebilir.
WP-Cron, WordPress ekosisteminin "otomasyon merkezi" olarak görev yapar. Sitenizde elinizle yapmadığınız, ancak belirli aralıklarla gerçekleşmesi gereken onlarca işlem bu yapı sayesinde yürütülür. SEO açısından sitenizin güncel kalması ve veritabanı sağlığının korunması için hayati önem taşır.
WP-Cron'un yürüttüğü temel görevler şunlardır:
| Görev Türü | Açıklama | SEO Etkisi |
| Zamanlanmış Yazılar | Gelecekte bir tarihte yayınlanması için hazırladığınız içeriklerin tam vaktinde yayına alınması. | Düzenli içerik girişi sinyali sağlar. |
| Güncelleme Kontrolleri | WordPress çekirdek, tema ve eklentilerin yeni sürümlerinin olup olmadığının denetlenmesi. | Site güvenliğini ve hızını korur. |
| Yedekleme İşlemleri | Yedekleme eklentilerinin (UpdraftPlus vb.) belirlediğiniz periyotlarda yedek alması. | Veri kaybı riskini minimize eder. |
| E-posta Bildirimleri | Yorum bildirimleri veya şifre sıfırlama gibi sistem e-postalarının sıraya alınması. | Kullanıcı etkileşimini artırır. |
| Veritabanı Bakımı | Çöp kutusundaki yorumların temizlenmesi veya veritabanı optimizasyon işlemleri. | Sorgu hızını ve site performansını artırır. |
Teknik olarak WP-Cron'un tüm mantığı WordPress'in ana dizininde (root directory) bulunan wp-cron.php dosyasında saklıdır. Bu dosya, WordPress kurulumunuzun olduğu dizinde wp-config.php ve wp-settings.php gibi dosyalarla aynı hizada yer alır.
Dosyaya FTP (FileZilla vb.) veya cPanel/Plesk dosya yöneticisi aracılığıyla ulaşabilirsiniz. Ancak bu dosyayı doğrudan düzenlemek genellikle önerilmez. WP-Cron ile ilgili yapılacak en yaygın işlem, bu dosyanın otomatik tetiklenmesini durdurmak ve sunucu üzerinden kontrol etmektir. SEO çalışmalarında site hızını (LCP ve TTFB değerlerini) optimize etmek isteyen uzmanlar, bu dosyanın her sayfa yüklemesinde sunucuyu meşgul etmesini engellemek için yapılandırma dosyalarında değişiklik yaparlar.
Özellikle yüksek trafikli sitelerde, WP-Cron her ziyaretçi geldiğinde sunucuda ayrı bir işlem (process) açmaya çalışır. Bu durum, sunucu kaynaklarının (CPU ve RAM) hızla tükenmesine ve sitenin yavaşlamasına neden olur. Çözüm, WordPress'in bu sahte cron sistemini durdurup yerine gerçek bir sistem cronu kurmaktır.
WP-Cron'u devre dışı bırakmak için şu adımları izleyin:
Sitenizin ana dizinindeki wp-config.php dosyasını açın.
/* That's all, stop editing! Happy publishing. */ satırından hemen önce şu kodu ekleyin:
define('DISABLE_WP_CRON', true);
Dosyayı kaydedip sunucuya geri yükleyin.
Bu işlemden sonra WordPress, her sayfa yüklemesinde wp-cron.php dosyasını tetiklemeyi bırakacaktır. Dikkat: Bu işlemi yaptıktan sonra görevlerin (yazı zamanlama vb.) çalışmaya devam etmesi için sunucu panelinizden (cPanel/Plesk) bir "Cron Job" (Zamanlanmış Görev) oluşturmanız şarttır.
Sitenizde arka planda hangi görevlerin sıraya alındığını, hangi işlemin ne zaman çalışacağını görmek teknik denetim (audit) için kritiktir. WordPress varsayılan olarak bu listeyi panelde göstermez.
WP-Cron görevlerini görüntülemenin en etkili yolları:
WP Control Eklentisi: SEO uzmanlarının en çok tercih ettiği yöntemdir. Bu ücretsiz eklentiyi kurduğunuzda, "Araçlar > Cron Jobs" sekmesi altında sitenizdeki tüm zamanlanmış görevleri, çalışma aralıklarını ve bekleyen işlemleri görebilirsiniz. Hatta hatalı çalışan görevleri silebilir veya anlık olarak çalıştırabilirsiniz.
WP-CLI Komutları: Eğer terminal erişiminiz varsa, wp cron event list komutunu kullanarak tüm listeyi komut satırı üzerinden hızlıca dökebilirsiniz.
Veritabanı Üzerinden: Teknik olarak bu veriler wp_options tablosunda cron opsiyon adı altında tutulur. Ancak buradaki veri "serialized" formatta olduğu için okunması zordur.
Sistemdeki tıkanıklıkları tespit etmek için bu araçları kullanmak, gereksiz çalışan eklenti görevlerini ayıklamanıza ve sunucu performansını geri kazanmanıza olanak tanır.
Hayır, doğrudan zarar vermez ancak WP-Cron'u devre dışı bıraktıktan sonra yerine gerçek bir sunucu cronu (Real Cron Job) kurmazsanız, zamanlanmış yazılarınız yayınlanmaz, yedeklemeleriniz alınmaz ve eklenti güncellemeleri denetlenmez. Bu nedenle devre dışı bırakma işlemi her zaman bir alternatif kurulumla birlikte yapılmalıdır.
Çünkü gerçek cron, sitenize ziyaretçi gelip gelmemesinden bağımsızdır. Örneğin her 15 dakikada bir çalışacak şekilde ayarlarsanız, sunucu o saatte sitenize kimse girmese bile görevleri yürütür. Bu, sunucu üzerindeki ani yük sıçramalarını (spike) önler ve TTFB (ilk bayt süresi) performansını iyileştirir.
Büyük ihtimalle evet. Eğer sitenize o saat diliminde hiç ziyaretçi gelmediyse WP-Cron tetiklenmez ve yazı yayınlanma vaktini kaçırır. Ayrıca sunucu kaynakları yetersizse veya bir eklenti çakışması varsa cron işlemi yarıda kesilebilir. Sistem cronuna geçmek bu sorunu %99 oranında çözer.
Birçok hosting firması sunucu sağlığını korumak için cron girişlerini minimum 15 veya 30 dakikada bir olacak şekilde sınırlandırır. SEO performansı için genellikle 15 dakikada bir çalışan bir cron yeterlidir. Eğer çok kritik bir e-ticaret siteniz yoksa, 10-15 dakikalık aralıklar sunucuyu yormadan görevlerin sağlıklı yürümesini sağlar.
WP Control gibi görüntüleme eklentileri sadece panelde işlem yaptığınızda çalışır, dolayısıyla ön yüze (frontend) bir yük bindirmezler. Ancak sürekli arka planda işlem yapan (örneğin her dakika veritabanı optimize eden) eklentiler WP-Cron üzerinden sunucuyu yorabilir. Bu yüzden sadece ihtiyacınız olan eklentileri kullanmalısınız.
Bu kod wp-config.php dosyasının içine yazılmalıdır. Dosyanın en başına veya WP_DEBUG satırlarının hemen altına ekleyebilirsiniz. En güvenli yer, dosyanın sonundaki "stop editing" uyarısından önceki kısımdır.
Genellikle cPanel'deki komut şu şekildedir:
wget -q -O - https://websiteniz.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Bu komut, sunucuya dışarıdan bir ziyaretçi gibi değil, içeriden bir komutla dosyayı çalıştırmasını söyler.
WordPress her sayfa yüklemesinde "çalışacak görev var mı?" diye PHP işlemi başlattığı için, anlık 100 ziyaretçi geldiğinde 100 ayrı PHP sorgusu cron kontrolü yapmaya çalışabilir. Bu, CPU kullanımında ani %100'e vurma (spike) sorunlarına yol açar. SEO uyumlu bir site için bu yükü sunucuya yaymak gerekir.
Evet. Eğer siteniz HTTPS kullanıyorsa, cron komutundaki URL'nin de https:// ile başladığından emin olmalısınız. Aksi takdirde yönlendirme hataları nedeniyle cron görevleri tetiklenmeyebilir.
Eklentiler yeni bir sürüm olup olmadığını WP-Cron aracılığıyla kontrol eder. Eğer cron çalışmazsa, panelde "Güncelleme mevcut" uyarısını göremezsiniz. Bu da sitenizin güvenlik açıklarına karşı savunmasız kalmasına neden olabilir.
E-ticaret sitelerinde stok güncellemeleri, sipariş e-postaları ve ödeme hatırlatıcıları çok kritiktir. WooCommerce sitelerinde WP-Cron mutlaka devre dışı bırakılmalı ve sunucu üzerinden 5 veya 10 dakikada bir çalışan hassas bir sistem cronu kurulmalıdır.
Eğer WP-Cron düzgün yapılandırılmadıysa veya bir eklenti tarafından hatalı çağrılıyorsa, adres çubuğunda URL'nizin sonuna bu ibare eklenebilir. Bu, SEO açısından "duplicate content" riski yaratabilir. Canonical etiketleri bunu çözse de en köklü çözüm sistem cronuna geçmektir.
Kullanmadığınız eski eklentilerden kalan (Hook) cron görevlerini temizlemek tamamen güvenlidir ve veritabanını rahatlatır. Ancak wp_version_check veya wp_scheduled_delete gibi çekirdek görevleri silmemelisiniz.
wp-cron.php dosyasının varlığını FTP üzerinden kontrol edin. Dosya yerindeyse, .htaccess dosyanızda bu dosyaya erişimi engelleyen bir kural olup olmadığını denetleyin. Dosya erişime kapalıysa zamanlanmış görevler çalışmaz.
Bazı önbellek eklentileri (WP Rocket vb.) kendi içlerinde cron optimizasyonu sunarlar. Genellikle çakışmazlar ancak site tamamen statik HTML olarak sunuluyorsa, WordPress PHP tetiklenemediği için WP-Cron görevlerini yerine getiremez. Bu durum sistem cronu kullanımını zorunlu kılar.
Evet, PHP 8.x sürümleri PHP 7.x'e göre çok daha hızlı işlem yapar. WP-Cron görevleri de PHP ile yürütüldüğü için güncel bir PHP sürümü kullanmak arka plan işlemlerinin daha az kaynakla daha hızlı bitmesini sağlar.
Her iki yöntem de işe yarar. wget daha yaygındır ancak bazı sunucularda curl daha stabil çalışabilir. Önemli olan komutun sonunda çıktıları çöpe atan >/dev/null 2>&1 kısmının olmasıdır.
Genellikle kırık link tarayıcıları (Broken Link Checker), veritabanı istatistik tutan eklentiler ve yoğun medya optimizasyon eklentileri en çok cron yükü yaratan araçlardır. SEO çalışmalarında bu eklentilerin çalışma aralıklarını geniş tutmak mantıklıdır.
Eğer bir görev "Due" (vakti gelmiş) olarak görünüyor ama çalışmıyorsa, WordPress'in bir görevi bitirmeden diğerine geçemediği bir tıkanıklık söz konusu olabilir. Bellek (Memory Limit) artırımı yapmak veya takılan görevi manuel silmek gerekebilir.
Dolaylı yoldan etkiler. Yavaşlayan bir site, başarısız içerik zamanlamaları ve güvenlik açıkları SEO puanınızı düşürür. WP-Cron optimizasyonu, "Teknik SEO"nun bir parçasıdır.
Litespeed sunucularda LSCache eklentisi kullanıyorsanız, eklenti ayarlarında cron optimizasyonu mevcuttur. Ancak temel prensip (devre dışı bırakıp sistem cronu kurmak) tüm sunucu tiplerinde en performanslı yöntemdir.
Hayır, kendileri şişirmez ancak görevler çalışmazsa temizlenmesi gereken revizyonlar, çöpler ve geçici veriler (transients) birikerek veritabanını şişirebilir.
Sadece ön yüzü statik olan (headless) yapılarda cron çalışmaz. Bu tür sitelerde görevleri tetiklemek için harici bir ping servisi veya sunucu taraflı bir tetikleyici şarttır.
wp-config.php içinde WP_DEBUG_LOG özelliğini açarak wp-content/debug.log dosyasından cron hatalarını ve PHP uyarılarını takip edebilirsiniz.
Varsayılan olarak WordPress saatlik, günlük gibi aralıklar sunar. WP Control eklentisi ile bu aralıkları özelleştirebilir, örneğin "her 15 dakikada bir" gibi yeni periyotlar ekleyebilirsiniz.
Çoklu site kurulumlarında her sitenin kendi cron sırası vardır. Her site için ayrı ayrı sistem cronu kurmak gerekebilir veya tüm ağı tetikleyen global scriptler kullanılmalıdır.
Evet, eğer hostinginiz cron izni vermiyorsa, "cron-job.org" gibi harici servisler üzerinden sitenizin wp-cron.php URL'sini belirli aralıklarla pingleyerek görevleri tetikleyebilirsiniz.
WordPress'in yeni sürümleri cron tetiklemeleri için bazen dahili loopback istekleri yapar. Eğer sunucunuzda loopback istekleri engelliyse WP-Cron çalışmayacaktır. "Site Sağlığı" bölümünden loopback testini kontrol edebilirsiniz.
Eğer sitenize günde sadece birkaç kişi giriyorsa, sistem cronu kurmak daha mantıklıdır. Çünkü günlerce kimse girmezse, cron görevleriniz günlerce bekler. Sistem cronu ile siteyi "canlı" tutarsınız.
Siteniz ne kadar büyük olursa olsun, en sağlıklı yöntem WP-Cron'u WordPress içinde devre dışı bırakıp, sunucu (cPanel/Plesk) üzerinden 15 dakikada bir çalışan sistem cronu kurmaktır. Bu, hem hız hem de görev kararlılığı için altın standarttır.
Yorum Yap