WordPress wp_head ile Gereksiz Head Etiketlerini Temizleme

WordPress kurduğunuzda, tema ve eklentiler sayfa bölümüne onlarca gereksiz HTML etiketi, meta verisi ve link ekler. Ziyaretçi bu etiketlerin büyük çoğunluğunu hiç görmez ama tarayıcı her birini okumak zorundadır. Sayfa hızı, güvenlik ve temiz kod açısından bakıldığında bu durum ciddi bir sorun haline gelir. wp_head kancası üzerinden yapacağınız birkaç satır functions.php kodu ile bu karmaşadan kurtulmak mümkündür.

wp_head Nedir ve Neden Önemlidir?

WordPress, bloğunu kapatmadan önce wp_head() fonksiyonunu çalıştırır. Bu fonksiyon bir kanca (hook) sistemidir ve tema ile eklentiler buraya istediklerini ekleyebilir. Teoride bu esneklik güzeldir. Pratikte ise her eklenti “ben de bir şeyler ekleyeyim” mantığıyla hareket ettiğinden bölümü zamanla şişer.

Tarayıcı geliştirici araçlarını açıp bir WordPress sitesinin kaynak koduna baktığınızda şunları görmek oldukça yaygındır:

  • RSD (Really Simple Discovery) bağlantıları
  • Windows Live Writer manifest dosyası
  • WordPress sürüm numarasını açıklayan generator meta etiketi
  • Kısaltılmış link (shortlink) etiketleri
  • Emoji CSS ve JavaScript dosyaları
  • oEmbed keşif bağlantıları
  • Feed bağlantıları (RSS)
  • REST API endpoint bağlantıları

Bunların büyük çoğunluğu ortalama bir site için tamamen gereksizdir. Üstelik generator etiketi gibi bazıları güvenlik açığı da oluşturur çünkü saldırganlara hangi WordPress sürümünü kullandığınızı söyler.

functions.php Nereye Yazılmalı?

Tüm örnekleri child tema içindeki functions.php dosyasına eklemeniz gerekir. Ana temayı güncellerseniz yaptığınız değişiklikler silinir. Child tema yoksa ve sıfırdan başlıyorsanız bile en azından functions.php düzenlemelerini bir şekilde yönetilen bir ortamda yapın. Bazı sistem yöneticileri bu tür kod parçacıklarını yönetmek için Code Snippets eklentisini tercih eder, bu da geçerli bir yaklaşımdır.

Gereksiz Etiketleri Tek Tek Kaldırmak

Generator Meta Etiketini Kaldırma

WordPress, varsayılan olarak şöyle bir meta etiketi ekler:

<meta name="generator" content="WordPress 6.4.2" />

Bu etiket arama motorlarına hiçbir fayda sağlamaz. Saldırganlara ise sürüm bilgisi verir. Kaldırmak için:

// Generator meta etiketini kaldır
remove_action('wp_head', 'wp_generator');

Bu tek satır bile başlı başına değerlidir. Pentest yapan bir güvenlik uzmanı bu etiketi gördüğünde doğrudan o sürüme ait CVE listesine bakar.

Emoji Desteğini Devre Dışı Bırakma

WordPress 4.2 ile gelen emoji sistemi, her sayfaya bir JavaScript dosyası ve CSS yükler. Modern tarayıcılar zaten emoji desteğine sahiptir. Bu yükleme tamamen gereksizdir:

// Emoji script ve stillerini kaldır
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_filter('the_content_feed', 'wp_staticize_emoji');
remove_filter('comment_text_rss', 'wp_staticize_emoji');
remove_filter('wp_mail', 'wp_staticize_emoji_for_email');

Bunu bir fonksiyon içinde daha derli toplu yazabilirsiniz:

function temizle_emoji_kaldir() {
    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_filter('the_content_feed', 'wp_staticize_emoji');
    remove_filter('comment_text_rss', 'wp_staticize_emoji');
    remove_filter('wp_mail', 'wp_staticize_emoji_for_email');
}
add_action('init', 'temizle_emoji_kaldir');

Gerçek dünya deneyimi: Orta ölçekli bir e-ticaret sitesinde emoji scriptini kaldırdıktan sonra sayfa yükleme süresinde 150-200ms iyileşme gördüm. Küçük görünür ama Google PageSpeed puanına yansıması anında olur.

RSD ve WLW Manifest Bağlantılarını Kaldırma

RSD (Really Simple Discovery), blog istemcilerinin WordPress API’sini bulmasına yardımcı olur. Windows Live Writer (WLW) ise Microsoft’un çoktan terk ettiği bir blog yazma uygulamasıdır. İkisini de kaybetmezsiniz:

// RSD bağlantısını kaldır
remove_action('wp_head', 'rsd_link');

// Windows Live Writer manifest bağlantısını kaldır
remove_action('wp_head', 'wlwmanifest_link');

Shortlink Etiketini Kaldırma

WordPress her sayfa için otomatik olarak kısaltılmış URL meta etiketi ekler. Eğer özel bir kısaltma servisi kullanmıyorsanız bu tamamen gereksizdir:

// Shortlink etiketini kaldır
remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0);

Feed Bağlantılarını Kaldırma

Blog yazmıyorsanız veya RSS feed’ini aktif olarak kullanmıyorsanız bu bağlantıları kaldırmak mantıklıdır. WooCommerce sitelerinde bu özellikle geçerlidir:

// RSS feed bağlantılarını kaldır
remove_action('wp_head', 'feed_links', 2);
remove_action('wp_head', 'feed_links_extra', 3);

Dikkat: Aktif blog işleten bir sitede bunu yapmayın. Feed bağlantıları RSS okuyucuların sitenizi bulmasını sağlar. Sadece tamamen statik ya da e-ticaret odaklı sitelerde bu mantıklıdır.

REST API Link Etiketini Kaldırma

WordPress, bölümüne REST API endpoint’ini belirten bir link etiketi ekler:

// REST API link etiketini kaldır
remove_action('wp_head', 'rest_output_link_wp_head', 10);

Bu etiketi kaldırmak REST API’yi devre dışı bırakmaz. Sadece endpoint URL’sinin içinde açıklanmasını engeller. API’yi tamamen kapatmak istiyorsanız ayrıca önlem almanız gerekir, ama bu başka bir yazının konusu.

oEmbed Keşif Bağlantılarını Kaldırma

oEmbed, başka sitelerin sizin içeriğinizi embed etmesine olanak tanır. Buna ihtiyaç duymuyorsanız kaldırabilirsiniz:

// oEmbed keşif bağlantılarını kaldır
remove_action('wp_head', 'wp_oembed_add_discovery_links');
remove_action('wp_head', 'wp_oembed_add_host_js');

Hepsini Tek Fonksiyonda Toplama

Yukarıdaki parçaları tek ve organize bir fonksiyonda toplamak hem okunabilirliği artırır hem de yönetimi kolaylaştırır. Gerçek bir projede kullandığım ve iyi sonuç veren versiyon şöyledir:

/**
 * wp_head temizleme fonksiyonu
 * Gereksiz meta etiketleri, scriptler ve link etiketlerini kaldırır
 */
function sysadmin_wp_head_temizle() {

    // WordPress sürüm bilgisini gizle
    remove_action('wp_head', 'wp_generator');

    // RSD ve WLW manifest bağlantılarını kaldır
    remove_action('wp_head', 'rsd_link');
    remove_action('wp_head', 'wlwmanifest_link');

    // Shortlink etiketini kaldır
    remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0);

    // Feed bağlantılarını kaldır (blog kullanmıyorsan)
    // remove_action('wp_head', 'feed_links', 2);
    // remove_action('wp_head', 'feed_links_extra', 3);

    // REST API link etiketini kaldır
    remove_action('wp_head', 'rest_output_link_wp_head', 10);

    // oEmbed bağlantılarını kaldır
    remove_action('wp_head', 'wp_oembed_add_discovery_links');
    remove_action('wp_head', 'wp_oembed_add_host_js');

    // Emoji desteğini kaldır (modern tarayıcılar destekliyor zaten)
    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_filter('the_content_feed', 'wp_staticize_emoji');
    remove_filter('comment_text_rss', 'wp_staticize_emoji');
    remove_filter('wp_mail', 'wp_staticize_emoji_for_email');
}

add_action('after_setup_theme', 'sysadmin_wp_head_temizle');

Feed bağlantılarını yorum satırı olarak bıraktım çünkü o karar siteye göre değişir. Aktif blog varsa yorumu açmayın.

WooCommerce Sitenizde Ekstra Dikkat

WooCommerce kurulu bir siteniz varsa bazı ek düzenlemeler yapabilirsiniz. WooCommerce de bölümüne bazı gereksiz şeyler ekler.

WooCommerce Generator Etiketini Kaldırma

WooCommerce kendi sürüm etiketini ekler:

// WooCommerce generator etiketini de kaldır
remove_action('wp_head', array($GLOBALS['woocommerce'], 'generator'));

Eğer yukarıdaki kod hata verirse (nesne henüz yüklenmemiş olabilir) şu alternatifi deneyin:

add_filter('the_generator', '__return_empty_string');

Bu filtre tüm generator etiketlerini (WordPress ve WooCommerce dahil) boş string döndürerek etkisiz hale getirir. Daha kapsamlı bir çözümdür.

Script Yüklemesini Sayfa Bazlı Kontrol Etme

WooCommerce, alışveriş sepeti scriptlerini her sayfada yükler. Bunu sadece gerekli sayfalarda yüklemek için:

function woo_scriptleri_optimize_et() {
    if (function_exists('is_woocommerce')) {
        if (!is_woocommerce() && !is_cart() && !is_checkout()) {
            // WooCommerce script ve stillerini WooCommerce dışı sayfalarda kaldır
            wp_dequeue_style('woocommerce-general');
            wp_dequeue_style('woocommerce-layout');
            wp_dequeue_style('woocommerce-smallscreen');
            wp_dequeue_script('wc-cart-fragments');
            wp_dequeue_script('woocommerce');
            wp_dequeue_script('wc-add-to-cart');
        }
    }
}
add_action('wp_enqueue_scripts', 'woo_scriptleri_optimize_et', 99);

Dikkat: Bu kodu uyguladıktan sonra tüm sayfaları test edin. Bazı temalar WooCommerce stillerine bağımlıdır ve görünüm bozulabilir.

Sonuçları Doğrulama

Kodu ekledikten sonra değişikliğin gerçekten işe yarayıp yaramadığını kontrol etmelisiniz. Bunu birkaç yöntemle yapabilirsiniz.

Kaynak Kodu Kontrolü

Tarayıcıda sayfayı açıp Ctrl+U ile kaynak kodunu görüntüleyin. bölümünde artık generator, wlwmanifest, rsd_link gibi etiketlerin olmadığını doğrulayın.

Komut Satırından Kontrol

Linux sistem yöneticisi olarak curl ile hızlıca kontrol edebilirsiniz:

curl -s https://siteniz.com | grep -E "(generator|wlwmanifest|rsd_link|emoji)"

Bu komut çıktı vermezse temizlik başarıyla yapılmış demektir. Eğer hala etiketler görünüyorsa büyük ihtimalle bir eklenti o etiketleri yeniden ekliyor olabilir.

Hangi Eklentinin Neyi Eklediğini Bulma

Bazen bir eklenti kaldırdığınız bir etiketi yeniden ekler. Bunu tespit etmek için eklentileri tek tek devre dışı bırakıp test edebilirsiniz. Ama daha hızlı bir yol var:

curl -s https://siteniz.com | grep -n "wp-" | head -30

Bu komut içindeki WordPress kaynaklı tüm referansları satır numarasıyla listeler. Hangi eklentinin neyi eklediğini anlamak için bu çıktıyı inceleyebilirsiniz.

Dikkat Edilmesi Gereken Durumlar

Her şeyi kaldırmak her zaman doğru değildir. Bazı özel durumları göz önünde bulundurun:

  • Multisite kurulumlar: Bazı bağlantılar ağ yönetimi için gerekli olabilir, özellikle RSD ve feed bağlantılarına dokunurken dikkatli olun.
  • Üçüncü parti entegrasyonlar: Google Search Console, doğrulama meta etiketlerini bölümüne ekler. Bunları kaldırmayın.
  • Sosyal medya eklentileri: Yoast SEO, RankMath gibi eklentiler Open Graph etiketleri ekler. Bunlar gereksiz değildir.
  • Ödeme entegrasyonları: WooCommerce ile bazı ödeme geçitleri bölümüne script ekler. Bunların devre dışı bırakılması ödeme akışını bozabilir.

Genel kural şudur: Bir şeyi kaldırmadan önce ne işe yaradığını anlayın. Yukarıdaki fonksiyonlar genel olarak güvenlidir ama her site kendine özgüdür.

Gerçek Dünya Örneği: Bir Müşteri Sitesi

Geçen yıl bir hukuk bürosunun WordPress sitesini devraldım. Site çok yavaş yükleniyordu ve PageSpeed puanı 45 civarındaydı. bölümüne baktığımda tam 23 ayrı meta/link etiketi ve 8 JavaScript referansı buldum. Bunların yarısı aktif olmayan eklentilerden kalmış artıklardı.

wp_head temizliği ve eklenti auditinin ardından sayfa başına boyutu 4.2KB’dan 1.1KB’a düştü. Emoji scriptini kaldırmak 3 ayrı HTTP isteğini ortadan kaldırdı. PageSpeed puanı temizlik sonrası 71’e çıktı. Sunucu tarafında hiçbir şey değiştirmedim, sadece functions.php’ye birkaç satır yazdım.

Bu deneyim bana şunu öğretti: WordPress performans optimizasyonu çoğu zaman eklemekle değil, çıkarmakla başlar.

Sonuç

wp_head kancasını temizlemek WordPress yönetiminin en kolay ama en çok ihmal edilen adımlarından biridir. Generator etiketi güvenlik açığı oluşturur, emoji scriptleri gereksiz HTTP istekleri yapar, WLW manifest ve RSD bağlantıları ise yıllarca kimsenin kullanmadığı özelliklerin kalıntılarıdır.

Functions.php’ye ekleyeceğiniz kısa bir fonksiyon ile:

  • Sayfa ağırlığını azaltırsınız
  • HTTP istek sayısını düşürürsünüz
  • WordPress sürüm bilgisini gizlersiniz
  • bölümünü daha temiz ve okunabilir hale getirirsiniz
  • PageSpeed ve Core Web Vitals puanlarınızı olumlu etkilersiniz

Her değişiklikten sonra staging ortamında test etmeyi unutmayın. Production’a doğrudan yazmak, özellikle WooCommerce sitelerinde beklenmedik sonuçlara yol açabilir. Basit bir curl komutu ile kontrol etmek ise sadece birkaç saniye alır. Bu küçük alışkanlıklar uzun vadede hem size hem de müşterilerinize büyük fark yaratır.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir