Benim gibi dotclear‘dan wordpress’e göç etmiş bir blogcu iseniz yeni sitenizdeki bazı URL adreslerinin 404 hatası vermemesi neredeyse mümkün değil. Arama motorlarının indekslemiş olduğu URL adresleri sitenizde karşılık bulmuyorsa başınız biraz dertte demektir. Arama motorları bu adresleri periyodik olarak ziyaret ettikleri için sürekli 404 hataları ile karşılaşacakdır. 404’lerin ele geçirdiği bir site arama motorlarının gözünde değer kaybeder.
WordPress altyapısını kullanan sitenizin derinliklerindeki geçersiz URL adresleri haberiniz olmayan birçok 404 hatasını üretmektedir. Şahsen uzunca bir süre farkında olmadığım ve aslında kolayca tespit de edilemeyecek bu durumu düzeltmek biraz zamanımı aldı doğrusu. Bu sorunu gidermek çin aşağıdaki PHP kodlarını yazdım.
Kodları wordpress temanıza ekleyerek siz de kullanabilirsiniz. Kodlar sitenizde var olmayan bir adres talep edildiğinde, ilgili adresi ve isteğin kimden geldiği gibi bilgileri eposta adresinize göndererek raporlayacaktır. Bundan sonra iş gelen raporlara göre kırık bağlantıları onarmaya geliyor. Bir hafta içerisinde posta kutumda 2000’e yakın rapor birikti.
Genel olarak kırık bağlantılar ile ilgili karşılaştığım sorunlar, arama motorlarında kayıtlı eski formatlı bağlantıları saymazsak; dosya adı ile çağrı yapılan dosya adının büyük/küçük harf duyarlılığından dolayı farklılık göstermesinden kaynaklanan geçersiz bağlantılar (örneğin FancyZoom.js ismi ile sunucuda kayıtlı bir dosyayı ‘fancyzoom.js’ ismiyle çağırırsanız linux sunucu bu dosyayı bulamaz), birşekilde arşivden silinmiş çok sayıda resim dosyası ve az sayıda arşiv dosyası tespit ettim.Ayrıca eski biçimli kırık bağlantıları da fark edip functions.php içine yerleştirdiğim yönlendirme kodları ile yeni adreslerine yönlenmelerini sağladım.
Kodları kullanmak için, aşağıdaki kodu tema dizininizde yeralan 404.php isimli dosyanin içerisine ekleyin ve kaydedin. Eğer tema dizininizde 404.php isminde bir dosya yok ise masaüstünüzde 404.php isimde bir dosya oluşturarak aşağıdaki kodları içerisine yapıştırın ve FTP’deki tema dizininize yükleyin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
<?php # ------------------------------------------------------------ # Disclamier about 404 page reporting codes # # TUR: 404 hatalarının eposta adresinize raporlanmasını # istemiyorsanız lütfen aşağıdaki 'CODE BEGIN' ve 'CODE END' # etiketleri arasındaki kod satırlarını kapatın veya silin. # # ENG: If you dont want to report brokent links please, # comment codes or delete lines between 'CODE BEGIN' # and 'CODE END' labels. # # ------------------------------------------------------------ # ********************* # CODE BEGIN # ********************* function currentPageURL() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } return $pageURL; } // mail header $site = parse_url(get_bloginfo('url'), PHP_URL_HOST); $from = 'noreply@'.str_replace('www.', '', $site); $admin_email = get_bloginfo('admin_email'); $headers = "MIME-Version: 1.0\nFrom: $from <$from> \nContent-Type: text/html; charset=\"".get_option('blog_charset')."\"\n"; // mail body $tm = time(); $mail_body = "Dikkat (Warning): Sayfa bulunamadı (<b>404 detected</b>)<br><br>"; $mail_body .= "BUGGY_URL: <b>". currentPageURL() ."</b><br><br>"; $mail_body .= "TIMESTAMP: " . date('l jS \of F Y h:i:s A', $tm) . ", Timestamp=". $tm . "<br>"; $mail_body .= "REMOTE_ADDR: ". $_SERVER['REMOTE_ADDR'] . "<br>"; $mail_body .= "REMOTE_HOST: ". $_SERVER['REMOTE_HOST'] . "<br>"; $mail_body .= "HTTP_REFERER: ". $_SERVER['HTTP_REFERER'] . "<br>"; $mail_body .= "HTTP_USER_AGENT: ". $_SERVER['HTTP_USER_AGENT']; wp_mail( $admin_email, "{{$site}} 404 Detected", $mail_body, $headers); # ********************* # CODE END # ********************* ?> <?php get_header(); ?> <div id="main"> <div id="content"> <center> <h2 class="center" style="background-color: #FFFFE0; display: inline; padding: 10px; border: 1px solid #FFCCCC; width:500px"> Üzgünüm <span style="color: #CC0000">404</span> - <strong>Sayfa Bulunamadı</strong> </h2> <br><br><br><br><br><p> Değerli ziyaretçimiz, site yöneticisi bu durum hakkında haberdar edilmiştir.<br><br> Eğer adresin doğruluğundan emin iseniz bir süre sonra tekrar ziyaret ediniz.</p> </center> </div> <div id="sidebar"> <?php get_sidebar(); ?> </div> </div> <div class='c'></div> <?php get_footer(); ?> |
Kod ile ilgili biraz daha teknik bilgi vermek istiyorum. Kodda yer alan curPageURL() fonksiyonu ziyaretçinin istek yaptığı URL’yi tespit etmeyi sağlıyor.
get_bloginfo(‘admin_email’) fonksiyonu ile WordPress’de kayıtlı site yöneticisinin e-posta adresi getiriliyor. (Eğer hiç rapor almıyorsanız ki bu pek mümkün değil, [en iyi ihtimalle /favicon.ico dosyanız yoksa bile birçok 404 durumu oluşur] muhtemelen WordPress->Ayarlar sayfanıza girdiğiniz yönetici e-posta adresiniz farklıdır.
PHP’nin $_SERVER isimli ön tanımlı dizi değişkeni ile ziyaretçinin kırık sayfamıza hangi adresten geldiği (HTTP_REFERER), IP adresi ve kullandığı tarayıcının ismi alınarak bir rapor haline getiriliyor.
Son olarak wp_mail isimli WordPress fonksiyonu ile raporun gönderilme işlemi gerçekleşiyor.
WordPress kırık bir adresle karşılaştığında tema dizininde yer alması gereken 404.php isimli dosyayı otomatik olarak çalıştırır. Ben kodlarda ziyaretçiye gösterilmesi için kendime göre bir 404 hata mesaj ekranı oluşturdum, siz burayı kendinize göre değiştirebilirsiniz. get_header(), get_sidebar() ve get_footer() fonksiyonları WordPress’in HTML sayfa içeriğimizi oluşturması için gereken komutlar.
Umarım faydalı olur.

Elinize sağlık güzel paylaşım olmuş. Benim gibi başka ihtiyaç sahiplerine de umarım faydası olur