Ana içeriğe geç

Loc Etiketi: URL Formatı ve Kuralları

Loc Etiketi URL Formatı - Teknik SEO Rehberi

Google Search Console'da "sitemap işlenemedi" hatası yok, URL sayısı makul görünüyor; ama beklediğiniz sayfaların önemli bir bölümü indekslenmemiş. Bu tablonun en sık görülen nedeni bozuk <loc> değerleri değil, geçerli gibi görünen ama canonical URL ile çelişen <loc> değerleridir. Çoğu sitemap doğrulayıcısı bu çelişkiyi hata olarak işaretlemez.

XML sitemap'te her <url> bloğunun yalnızca bir zorunlu alanı vardır: <loc>. changefreq, priority ve lastmod isteğe bağlıdır. <loc> zorunludur ve Googlebot'a hangi URL'in taranmasını beklediğinizi söyler. Bu zorunluluğun bir maliyeti var: format hataları sessizce geçer, indekslenmeyen URL'ler Search Console'da "geçersiz" değil "keşfedilmedi" olarak görünür.

Sessiz başarısızlık. Format geçerli, sitemap temiz, ama Google hangi URL'i canonical olarak seçtiğini size söylemez, sadece seçer.

<loc> ile canonical etiket arasındaki güç sırası

İki etiket benzer bir işlev üstlenir gibi görünse de Googlebot bu ikisine farklı ağırlık verir. Canonical etiket bir öneridir; Googlebot tercih edebileceği URL'i seçer ama zorunlu hissetmez. <loc> ise bir bildirimdir: "bu URL indekslenmesini bekliyor" sinyalidir.

Çelişki başladığında Google ikisinden birini seçer ve bu seçim tahmin edilemez. <loc>'ta https://www.example.com/sayfa/ yazarken sayfanın <link rel="canonical"> etiketi https://example.com/sayfa gösteriyorsa (trailing slash ve www farkı bir arada), Google bu iki sinyali tutarsız bulur. Sonuç genellikle sayfanın ne sitemap'teki ne de canonical URL üzerinden değil, Googlebot'un kendi belirlediği bir versiyonu üzerinden işlenmesidir. Hangi versiyonun indekslendiğini Search Console'da görmek, bu senaryoda kaçınılmaz bir sürpriz olur.

Kural tek: <loc> değeri sayfanın canonical URL'iyle karakter karakter örtüşmeli. Protokol, hostname, yol ve trailing slash dahil.

Geçerli bir <loc> URL'si için beş zorunlu kural

1. Absolute URL zorunlu. Göreli yollar (/blog/yazi.html) XML sitemap standardında geçersizdir. Her <loc> değeri protokol ve hostname dahil tam URL içermelidir: https://www.seodenetim.com/blog/yazi.html.

2. Protokol canonical'la örtüşmeli. Sitenin canonical versiyonu HTTPS ise tüm <loc> değerleri https:// ile başlamalıdır. HTTP ve HTTPS karışık kullanım, Googlebot'un URL'i HTTP versiyonuna normalize etmesine yol açabilir; bu durum HTTPS sayfasının canonical sinyalini zayıflatır.

3. Hostname tutarlı olmalı. Sitenin canonical versiyonu www'suz çalışıyorsa (example.com), <loc>'ta www.example.com kullanmak sinyal çelişkisi yaratır. Googlebot bu URL'i taramadan önce 301 yanıtıyla karşılaşır; bu da crawl bütçesinden gereksiz istek tüketimi demektir.

4. Fragment içermemeli. # işaretinden sonraki kısım sunucuya iletilmez; Googlebot bu URL'i geçersiz kaynak olarak değerlendirir. Anchor link içeren hiçbir URL <loc>'a girmemeli.

5. URL uzunluğu 2048 karakteri aşmamalı. Teknik standart daha uzun URL'lere izin verse de Googlebot'un davranışsal eşiği pratikte 2048 civarındadır. Dinamik parametre zinciriyle oluşan uzun URL'ler sitemap'e değil canonical yönlendirme yapısına taşınmalıdır.

Her biri yeterli. Trailing slash farkı tek başına Googlebot'u her taramada ekstra bir HTTP isteğine zorlar; bu istek 301 yanıtı dönerse canonical sinyal zayıflar, döngü binlerce URL'de çalışırsa crawl bütçesi fiilen tükenir.

Trailing slash ve www/non-www: sessiz tutarsızlık

Sitemap doğrulayıcıları bu iki hatayı çoğunlukla hata olarak işaretlemez, çünkü URL biçimsel olarak geçerlidir. Google ise example.com/sayfa ile example.com/sayfa/ arasındaki farkı potansiyel olarak iki farklı kaynak olarak değerlendirebilir; sunucu hangisi için 301 veriyorsa onu canonical olarak seçer.

Sorun tek bir URL'de değil, sitemap genelindeki tutarsızlıkta yatıyor. Sitenin yarısı trailing slash'la, yarısı slash olmadan <loc>'a girilmişse Googlebot her URL için ayrı ayrı ne döneceğini test etmek zorunda kalır; bu da 301 yanıtlarıyla dolu gereksiz bir tarama turu anlamına gelir. Sitemap'in işlevi Googlebot'u doğru URL'e yönlendirmektir; her URL için ayrı bir yönlendirme zinciri bu işlevi tersine çevirir.

Kontrol yöntemi: Sitenin canonical URL yapısını bir kez belirleyin (trailing slash var mı yok mu, www var mı yok mu) ve sitemap'teki tüm <loc> değerlerinin bu yapıyla örtüştüğünü satır satır doğrulayın. Sitemap oluştururken URL normalizasyon ayarını baştan doğru yapılandırmak, sonradan yüzlerce URL'i elle düzeltme maliyetini ortadan kaldırır.

WordPress, Yoast veya Rank Math kullanan sitelerde bu tutarsızlık genellikle permalink ayarıyla sitemap ayarının senkronize edilmemesinden kaynaklanır. CMS tabanlı sitelerde sitemap çıktısını bir kez ham XML olarak indirip canonical yapıyla karşılaştırmak, sessiz hataları erkenden yakalar.

Bir diğer sessiz tutarsızlık kaynağı CDN veya reverse proxy katmanlarıdır. Cloudflare gibi servisler bazen trailing slash yönlendirme davranışını Page Rule veya Transform Rule seviyesinde yönetir; bu durumda sunucu tarafındaki canonical yapıyla CDN katmanındaki yönlendirme çelişkiye düşebilir. <loc>'a yazdığınız URL'in CDN arkasında da aynı HTTP 200 yanıtını döndürdüğünü ve başka bir URL'e 301 vermediğini bir kez doğrulamak, bu tür katman kaynaklı çelişkileri erken yakalar.

<loc>'a girmemesi gereken URL türleri

Sitemap'in amacı Google'ı indekslenmesini istediğiniz sayfalara yönlendirmektir. Aşağıdaki URL türleri bu kapsamın dışındadır:

  • noindex direktifi olan sayfalar: Sayfada <meta name="robots" content="noindex"> varsa URL'i sitemap'e eklemek doğrudan çelişki yaratır. Google bu çelişkiyle karşılaştığında genellikle noindex direktifini tercih eder; ama sayfayı "keşfedilmiş, indekslenmiyor" kategorisinde listeler ve bu durum crawl bütçesini tüketmeye devam eder.
  • Robots.txt ile engellenen sayfalar: Googlebot sayfayı tarayamazsa <loc>'ta görmesi bir anlam taşımaz. Disallow kurallarıyla sitemap içeriğinin çelişmemesi, teknik SEO denetiminin temel kontrol noktalarından biridir.
  • 301 veya 302 yönlendirme veren URL'ler: Yönlendirme zincirinin başlangıç URL'leri değil hedef canonical URL'ler eklenmelidir. Başlangıç URL'i sitemap'te tutmak, Googlebot'u her taramada ekstra bir HTTP isteğine zorlar.
  • 404 veya 410 döndüren URL'ler: Kaldırılmış sayfaların sitemap'te kalması hem crawl bütçesini tüketir hem de Search Console'da sürekli hata üretir. 410 (kalıcı kaldırıldı) döndüren URL'leri sitemap'ten çıkarmak, 404'e kıyasla Googlebot'un bu URL'i daha hızlı unutmasını sağlar.
  • UTM parametreli ve session ID içeren URL'ler: ?utm_source=newsletter veya ?sessionid=abc123 gibi parametreler içeren URL'ler duplicate content olarak değerlendirilir. Parametresiz canonical versiyonu ekleyin; parametreli versiyonları Google Search Console'daki URL Parametre ayarlarıyla yönetin.
  • Dinamik filtre ve sıralama URL'leri: E-ticaret sitelerinde /kategori?siralama=fiyat&amp;renk=mavi gibi filtre kombinasyonlarından oluşan URL'ler sitemap'e eklenirse Googlebot bu URL'lerin tümünü ayrı sayfa olarak taramaya çalışır. Yüzlerce filtre kombinasyonu olan bir kategori sayfasında bu durum crawl bütçesini fiilen tüketir. Yalnızca kanonik kategori URL'ini (/kategori/) sitemap'e ekleyin; filtreli versiyonları robots.txt ile değil canonical etiketiyle yönetin.

Bu liste, sitemap boyutunu küçülten bir tercih değil, indeksleme kalitesini koruyan bir zorunluluktur. Sitemap'e giren her URL Google'a "bu sayfa indekslenmeye değer" mesajı verir; yanlış URL eklemek bu mesajın güvenilirliğini düşürür.

XML encoding: &, Türkçe karakterler ve parse hataları

XML sitemap bir HTML belgesi değil, XML belgesidir. XML'in kendi encoding kuralları vardır ve bu kuralları ihlal etmek sitemap'in parse edilemez hale gelmesine yol açar. Search Console, parse edilemeyen sitemap'leri "sitemap okunamadı" hatasıyla değil kısmi URL sayısıyla raporlar; bu yüzden hata görünmese bile sorun var olabilir.

En sık karşılaşılan hata: URL içindeki & işaretini encode etmemek. Query string parametreli URL'lerde & işareti XML içinde &amp; olarak yazılmalıdır:

Yanlış: <loc>https://example.com/urun?renk=kirmizi&boyut=L</loc>
Doğru:  <loc>https://example.com/urun?renk=kirmizi&amp;boyut=L</loc>

Türkçe karakter içeren URL'ler farklı bir sorun üretir. Slug içinde Türkçe karakter yer alıyorsa bu karakterler percent-encode edilmiş halde yazılmalıdır: ş%C5%9F, ğ%C4%9F, ü%C3%BC, ö%C3%B6, ç%C3%A7, ı%C4%B1. CMS otomasyonuna dayanan sitelerde bu encode adımı çoğunlukla otomatik yapılır; elle oluşturulan sitemaplerde ise gözden kaçan bir detaydır.

Boşluk karakteri %20, < ve > işaretleri de URL içinde yer almamalıdır; yer alıyorsa sırasıyla &lt; ve &gt; olarak encode edilir. Sitemap'in Googlebot ile iletişim kurma biçimini anlamak bu encoding kurallarını daha somut hale getirir; Googlebot URL'i okuyana kadar XML parser devreye girer ve parser, XML kurallarına uymayan bir <loc> değerini sessizce atlar.

Sitemap'i elle ya da script ile oluşturuyorsanız, output'u bir XML validator'dan geçirmek bu tür hataları yayınlamadan önce yakalar. W3C'nin ücretsiz XML doğrulama aracı ya da herhangi bir tarayıcının geliştirici konsoluna XML yapıştırmak yeterlidir; tarayıcı parse hatalarını satır numarasıyla birlikte raporlar.

<loc> etiketinin formatı, sitenin teknik SEO sağlığının en küçük ama en doğrudan göstergelerinden biridir. Tutarsız bir canonical yapısı, encode edilmemiş tek bir & ya da noindex sayfasına koyulan bir URL; bunların her biri sitemap'in indeksleme rehberliği işlevini parçalayabilir. Sitemap üretim sürecinde bu kuralları otomatik uygulayan bir yapıya sahip olmak, Search Console'da hata avlamaktan çok daha az maliyetlidir; ama asıl kazanç, Google'ın sitemap sinyalinize güvenmeye devam etmesidir.