15 Adımda WordPress Hız Optimizasyonu (Eklentisiz)
WordPress Hız Optimizasyonu en çok talep gören aramalardan bir tanesi çünkü, bu sistemin en büyük problemi hız. Gelişmiş olmasından dolayı, birçok kullanıcı WordPress sitelerinin yavaş olmasından şikayetçi. Bu yazıda “eklentisiz” WordPress hız optimizasyonu nasıl yapılır onu anlatacağım.
internet sitesi performansı söz konusu olduğunda, her bayt ve milisaniye önemlidir.
WordPress kendi başına o kadar ağır bir sistem değildir, ancak kullandığınız temalar ve eklentiler, sayfa yükleme süresini yavaşlatabilir. WordPress internet sitenizi hızlandırmak için birçok teknik vardır.
Örneğin:
- CDN (İçerik Dağıtım Ağı) kullanmak
- Tarayıcı ve sunucu önbelleğinden yararlanmak
- Performans açısından optimize edilmiş sunucuda barındırmak
- Hafif bir tema kullanmak
- Az sayıda ve hafif eklentiler kullanmak
- Functions.php’ye ve wp-config.php dosyalarına birkaç satır kod ekleyerek
Eklentisiz WordPress Hız Optimizasyonu Nasıl Yapılır?
Bu yöntemlerin yanı sıra, WordPress’in kendi içinde olan ancak kullanmadığınız fonksiyonları devre dışı bırakarak da sitenizdeki sorgu sayısını azaltarak biraz daha hızlandırabilirsiniz.
Functions.php’ye ve wp-config.php dosyalarına birkaç satır kod ekleyerek yapabileceğiniz bu hız optimizasyonuna hemen başlayalım.
Functions.php Performans ve Güvenlik Optimizasyonu
Functions.php ile hız optimizasyonu yapmak için:
- FTP dizininden /wp-content/themes/temaniz/functions.php konumuna gidip dosyayı açın ya da,
- WordPress Yönetim Paneli > Görünüm > Düzenleyici‘ye tıklayın ve sağdan functions.php dosyasını seçin.
Uyarı!
Eğer temanıza ait bir “child-theme” kullanmıyorsanız, temanızı güncellediğinizde bu kodların üzerine yazılabilir. Lütfen çalışmaların kalıcı olması için “child-theme” kullanın.
Eğer yeterli bilgiye sahip değilseniz, olası bir kritik hatadan korunmak için “functions.php” dosyanızın bir kopyasını oluşturup saklayın.
1. Sorgu Dizelerini Kaldırmak
İnternet sitenizi yükleme süresi için analiz ettiyseniz, sorgu dizelerini statik kaynaklardan (CSS, JS dosyaları) ortadan kaldırmak için bir öneriyle karşılaşmış olabilirsiniz.
Kaldırılması önerilir.
Dikkat!
Dosyalarda sorgu dizelerinin bulunması CDN’nin dosyaları önbelleğe almamasına neden olabilir; bu nedenle, sağlanan tüm önbelleğe alma avantajlarından yararlanamayabilirsiniz.
Sorgu dizelerini kaldırmak için aşağıdaki kodu ekleyin.
function remove_cssjs_ver( $src ) {
if( strpos( $src, '?ver=' ) )
$src = remove_query_arg( 'ver', $src );
return $src;
}
add_filter( 'style_loader_src', 'remove_cssjs_ver', 10, 2 );
add_filter( 'script_loader_src', 'remove_cssjs_ver', 10, 2 );
2. RSD Bağlantılarını Kaldırmak
XML-RPC, pingback gibi servisleri kullanmak istiyorsanız RSD (Really Simple Discovery) gereklidir ancak, içeriğinizi yönetmek için pingback veya uzak istemciye ihtiyacınız yoksa aşağıdaki kodu ekleyerek bu gereksiz başlıktan kurtulun.
Kaldırılması önerilir.
remove_action( 'wp_head', 'rsd_link' ) ;
3. WordPress Emojilerini Kaldırmak
Tüm emojiler artık neredeyse bütün tarayıcılarda yerel olarak geliyor. Ekstra sorgu oluşturan emojileri kaldırmanızda hiçbir sakınca yok.
Kaldırılması önerilir.
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
remove_action( 'admin_print_styles', 'print_emoji_styles' );
4. Kısa Bağlantıları Kaldırmak
WordPress 3. sürümden başlayarak WordPress, başlık koduna kısa bağlantı (internet adresinin daha kısa bağlantısı) ekledi.
Örneğin:
<link rel='shortlink' href='https://sezginbilir.com/?p=21' />
Herhangi bir işlev için kısa bağlantı kullanmıyorsanız, aşağıya ekleyerek bunları kaldırabilirsiniz.
remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0);
Kaldırılması önerilir.
5. Gömülüleri Kaldırmak
WordPress, 4.4’te herhangi bir sitenin WordPress gönderisini uzaktan yerleştirmesine izin veren oEmbed özelliklerini tanıttı ve böyle görünüyor.
Kaldırılması önerilir.
Aşağıdaki kodu ekleyerek, başkalarının blog yayınınızı embedlemesini engelleyecek ve ilgili JS dosyasını yüklemeyi devre dışı bırakacaktır. Avantajı siteye ekstra sorgu binmemesidir.
function disable_embed(){
wp_dequeue_script( 'wp-embed' );
}
add_action( 'wp_footer', 'disable_embed' );
6. XML-RPC’yi Kaldırmak
Bir yazıyı yayınlamak/düzenlemek/silmek, yorumları düzenlemek veya dosya yüklemek için WordPress API (XML-RPC) servisini kullanmıyorsanız kapatmanızda hiçbir sakınca yok. Ayrıca XML-RPC’nin etkinleştirilmiş olması ve düzgün şekilde güvenli hale getirilmemiş olması DDoS ve bruteforce saldırılarına neden olabilir.
Kaldırılması önerilir.
add_filter('xmlrpc_enabled', '__return_false');
7. WordPress Sürümünüzü Gizlemek
Bu adım, sitenizin performansına hiçbir etki etmese de bilgi sızıntısı güvenlik açığını azaltmaya daha çok yardımcı olur. Varsayılan olarak, WordPress, kaynak koda ve HTTP başlığına sürüm ayrıntılarıyla birlikte meta ad oluşturucu ekler. Bu da hackerların güvenlik açığı denemelerinde işlerini kolaylaştırır.
Kaldırılması önerilir.
remove_action( 'wp_head', 'wp_generator' ) ;
7. WLManifest Bağlantısını Kaldırmak
Muhtemelen Windows live writer nedir bir bilginiz yok. Eğer Windows live writer kullanmıyorsanız aşağıdaki kodu ekleyerek bağlantıyı kaldırabilirsiniz.
Kaldırılması önerilir.
remove_action( 'wp_head', 'wlwmanifest_link' ) ;
7. Self PingBack Özelliğini Kaldırmak
Blogunuzun bir yazısından, diğer yazıya bir iç linkleme yaptığınızda yorumda bir pingback bildirimi gelir. Bunun kesinlikle hiçbir anlamı yok. Pingback olayı sadece, yazdığınız bir içerikte bağlantısını eklediğiniz siteye bildirim göndermek için kullanılır. Kaldırmak için aşağıdaki kodu ekleyebilirsiniz.
Kaldırılması önerilir.
function disable_pingback( &$links ) {
foreach ( $links as $l => $link )
if ( 0 === strpos( $link, get_option( 'home' ) ) )
unset($links[$l]);
}
add_action( 'pre_ping', 'disable_pingback' );
8. Heartbeat API Kaldırmak
WordPress, sık sık admin-ajax.php’yi çağırarak tarayıcı ve sunucu arasında aktif iletişim kurmak için Heartbeat API’sini kullanır. Bu, genel sayfa yükleme süresini yavaşlatabilir ve paylaşılan barındırmada ise CPU kullanımını artırabilir.
Heartbeat API’si, yazı editöründen bir gönderi oluşturduğunuzda veya gönderiyi düzenlediğinizde, o gönderiyi periyodik olarak otomatik kaydetme işlevi sağlar.
Heartbeat API kullanma zorunluluğunuz yoksa aşağıdaki kodu ekleyerek devre dışı bırakabilirsiniz. Bu kod Heartbeat API’ını tamamen iptal eder. Bazı eklentiler API’ın otomatik çalışma sürelerini kontrol ederek devredışı bırakmadan optimize etme imkanı sunar. (Eklentiye gitmek için: https://wordpress.org/plugins/heartbeat-control/)
Kaldırılması önerilir.
add_action( 'init', 'stop_heartbeat', 1 );
function stop_heartbeat() {
wp_deregister_script('heartbeat');
}
9. Contact Form 7’yi Gereksiz Sayfalarda Kapatmak
Contact Form 7 güzel bir eklenti fakat, iletişim formunun olmadığı sayfalara ekstra stil ve script dosyası ekliyor. Bu da gereksiz sorgu ve yük oluşmasına neden oluyor. Bunu kapamak çok kolay.
Aşağıdaki kodu functions.php dosyanıza ekleyerek, gerekli stil ve script dosyalarının sadece formun olduğu sayfalara çağrılmasını sağlayabilirsiniz.
# Contact form 7 script ve stillerini kapama
function conditionally_load_contactform7() {
if (strpos(get_the_content(null, false, get_post()), "[contact-form-7") === false) {
wp_dequeue_script('contact-form-7'); # Dequeue scripts.
wp_dequeue_style('contact-form-7'); # Dequeue css.
}
}
add_action( 'wp_enqueue_scripts', 'conditionally_load_contactform7' );
Wp-config.php Performans ve Güvenlik Optimizasyonu
Wp-config.php ile hız optimizasyonu yapmak için:
FTP dizininden ana dizinden wp-config.php dosyasını açın
Uyarı!
Eğer yeterli bilgiye sahip değilseniz, olası bir kritik hatadan korunmak için “wp-config.php” dosyanızın bir kopyasını oluşturup saklayın.
10. İçerik Versiyonlarını Kapatın veya Limitleyin
Varsayılan olarak, WordPress yazınızdaki veya sayfanızdaki her düzeltmeyi otomatik olarak kaydeder. Bu özellik ne kadar faydalı olursa olsun, MySQL Veritabanını gereksiz verilerle şişirecek, sonunda onu işlemek için çok fazla kaynak gerektirecek kadar büyük olacak ve böylece siteyi yavaşlatacaktır.
Limitlemek için:
define( 'WP_POST_REVISIONS', 2 ); // en fazla 2 adet versiyon kaydeder
Tamamen kaldırmak için:
define( 'WP_POST_REVISIONS', false );
Ben genelde en fazla 2 adet versiyon kaydetmesini tercih ediyorum.
11. Oto-Kaydetme Süresi
Bir gönderiyi düzenlerken, WordPress, düzenlerken gönderideki düzeltmeleri otomatik olarak kaydetmek için Ajax’ı kullanır. Otomatik kayıtlar arasında daha uzun gecikmeler için bu ayarı artırmak veya değişiklikleri asla kaybetmemek için ayarı azaltmak isteyebilirsiniz. Varsayılan kaydetme süresi 60 saniyedir.
Eğer Heartbeat API’ı devredışı bırakmadıysanız, otomatik kaydetme gibi bir fonksiyonu limitleyebilirsiniz.
define( 'AUTOSAVE_INTERVAL', 160 ); // saniye bazında süredir
12. Admin ve Kullanıcı Girişlerinde SSL Zorlamak
Yönetici alanınızı bu kolay SSL tanımıyla güvence altına alabilirsiniz. Bu özellik, oturum açma işlemlerini ve yönetici alanını güvenli hale getirmek istediğinizde kullanışlıdır, böylece hem parolalar hem de tanımlama bilgileri hiçbir zaman açık bir şekilde gönderilmez.
define( 'FORCE_SSL_ADMIN', true );
13. Ayrılan RAM Miktarını Yükseltme (Wp-Memory)
Bu ayar, PHP tarafından kullanılabilecek maksimum bellek miktarını belirlemenizi sağlar. Bu ayar, “İzin verilen bellek boyutu bayt bitti” gibi bir mesaj almanız durumunda gerekli olabilir. Eğer PHP.ini ayarlarında PHP için 64MB tahsis edilmişse, WordPress gerekirse 64MB’nin tamamını otomatik olarak kullanacağı için bu değeri 64M’ye ayarlamaya gerek yoktur.
define( 'WP_MEMORY_LIMIT', '128M' );
Wp-admin için normal işlemlerden daha fazla bellek gerekir. Wp-admin’de, WP_MAX_MEMORY_LIMIT tanımlanarak bellek WP_MEMORY_LIMIT’ten artırılabilir veya azaltılabilir. Böylelikle wp-admin yavaşlamaları bir miktar çözülebilir.
define( 'WP_MAX_MEMORY_LIMIT', '256M' );
14. Cron ve Cron Sıklığını Ayarlamak
Bir ziyaretçi sitenizi her ziyaret ettiğinde, bir Cron tetikleyicisi gibi davranır ve yapılacak şeylerin bir listesi için sunucunuza ping atar. Eğer zamanlanmış gönderiler gibi şeyleri kullanıyorsanız bu kodu kullanmayın.
define( 'DISABLE_WP_CRON', true );
Eğer çok yüksek trafiği olan bir siteniz varsa, Cron işlemlerinin sıklığını ayarlayabilirsiniz. Genelde hosting sağlayıcıları, paylaşımlı hostinglerde en fazla 15 dakikada 1 olacak Cron işlerine izin verir. Eğer böyle bir limitlemeniz yoksa, aşağıdaki kod ile ayarlayabilirsiniz.
define( 'WP_CRON_LOCK_TIMEOUT', 60 ); // saniye bazında süredir
15. Otomatik Veritabanı Optimizasyonunu Ayarlamak
WordPress kendi içerisinde, otomatik olarak veritabanı optimizasyonu yapabilmenizi sağlar. Aşağıdaki kodu ekleyerek otomatik veritabanı optimizasyonunu aktifleştirebilirsiniz.
define( 'WP_ALLOW_REPAIR', true );
Benim Kullandığım Functions.php ve Wp-config.php Ayarları
Functions.php Ayarlarım
function disable_pingback( &$links ) {
foreach ( $links as $l => $link )
if ( 0 === strpos( $link, get_option( 'home' ) ) )
unset($links[$l]);
}
add_action( 'pre_ping', 'disable_pingback' );
function remove_cssjs_ver( $src ) {
if( strpos( $src, '?ver=' ) )
$src = remove_query_arg( 'ver', $src );
return $src;
}
add_filter( 'style_loader_src', 'remove_cssjs_ver', 10, 2 );
add_filter( 'script_loader_src', 'remove_cssjs_ver', 10, 2 );
remove_action( 'wp_head', 'rsd_link' ) ;
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
remove_action( 'admin_print_styles', 'print_emoji_styles' );
remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0);
function disable_embed(){
wp_dequeue_script( 'wp-embed' );
}
add_action( 'wp_footer', 'disable_embed' );
add_filter('xmlrpc_enabled', '__return_false');
remove_action( 'wp_head', 'wp_generator' ) ;
remove_action( 'wp_head', 'wlwmanifest_link' ) ;
add_action( 'init', 'stop_heartbeat', 1 );
function stop_heartbeat() {
wp_deregister_script('heartbeat');
}
# Contact form 7 script ve stillerini kapama
function conditionally_load_contactform7() {
if (strpos(get_the_content(null, false, get_post()), "[contact-form-7") === false) {
wp_dequeue_script('contact-form-7'); # Dequeue scripts.
wp_dequeue_style('contact-form-7'); # Dequeue css.
}
}
add_action( 'wp_enqueue_scripts', 'conditionally_load_contactform7' );
Wp-config.php Ayarlarım
define( 'WP_POST_REVISIONS', false );
define( 'AUTOSAVE_INTERVAL', 160 ); // Seconds
define( 'IMAGE_EDIT_OVERWRITE', true );
define( 'FORCE_SSL_ADMIN', true );
define( 'WP_MEMORY_LIMIT', '2048M' );
define( 'WP_MAX_MEMORY_LIMIT', '2048M' );
define( 'WP_CRON_LOCK_TIMEOUT', 60 );
define( 'WP_ALLOW_REPAIR', true );
Kapanış
Wp-config ve functions.php dosyaları üzerinden yaptığımız bu ayarlamalar çok ciddi etkilere sahip olmasa bile yine de sunucunuzun büyük anlamda rahatlamasını sağlayacaktır ve sitenizdeki sorgu sayısını azaltarak açılış hızınızı biraz daha hızlandıracaktır.