Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi

Sitemap dosyasından URL çıkarma​


Sitemap dosyasındaki URL’leri çıkarmanın en güvenilir yolu, XML içindeki <loc> alanlarını okumaktır. Tek bir sitemap için <urlset> altındaki değerler alınır; dosya bir sitemap index ise <sitemapindex> içindeki sitemap dosyaları açılır ve onların URL’leri de toplanır. Aşağıdaki Python örneği bu iki yapıyı destekler ve her URL’yi ayrı satıra yazdırır.

Sitemap yapısı nasıl çalışır?​


Normal bir sitemap kabaca <urlset> köküne sahiptir:

XML:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url><loc>https://example.com/</loc></url>
  <url><loc>https://example.com/urun/ornek</loc></url>
</urlset>

Çok sayıda sitemap kullanıldığında ana dosya sitemap index olur. Bu dosyada doğrudan sayfa URL’leri yerine başka sitemap dosyalarının adresleri bulunur. Bu nedenle yalnızca ilk dosyanın <loc> değerlerini almak, index dosyasında sayfa URL’lerini değil alt sitemap adreslerini döndürür.

Çalıştırılabilir Python örneği​


Ön koşul olarak Python 3 kurulu olmalı ve sitemap adresine erişilebilmelidir. Örnek, bildiğiniz/güvendiğiniz sitemap dosyaları içindir ve dosyayı belleğe alır; çok büyük envanterlerde akışla okuyan, dosya ve toplam istek sınırı olan bir çözüm tercih edin. Aşağıdaki kodu sitemap_url_cikar.py adıyla kaydedin. Argüman olarak yerel dosya yolu veya HTTP/HTTPS sitemap adresi verebilirsiniz.

Python:
import gzip
import sys
import urllib.request
import xml.etree.ElementTree as ET

visited = set()

def read_data(target):
    if target.startswith(("http://", "https://")):
        with urllib.request.urlopen(target, timeout=30) as response:
            data = response.read()
    else:
        with open(target, "rb") as file:
            data = file.read()

    if data[:2] == b"\x1f\x8b":
        data = gzip.decompress(data)
    return data

def local_name(tag):
    return tag.rsplit("}", 1)[-1]

def loc_value(element):
    for child in element:
        if local_name(child.tag) == "loc" and child.text:
            return child.text.strip()
    return None

def extract(target):
    if target in visited:
        return
    visited.add(target)

    root = ET.fromstring(read_data(target))
    root_type = local_name(root.tag)

    if root_type == "sitemapindex":
        for item in root:
            if local_name(item.tag) == "sitemap":
                child_target = loc_value(item)
                if child_target:
                    if not child_target.startswith(("http://", "https://")):
                        raise ValueError("Alt sitemap adresi mutlak HTTP/HTTPS URL olmalı.")
                    extract(child_target)
    elif root_type == "urlset":
        for item in root:
            if local_name(item.tag) == "url":
                url = loc_value(item)
                if url:
                    print(url)
    else:
        raise ValueError("Dosya sitemap XML'i veya sitemap index değil.")

if len(sys.argv) != 2:
    raise SystemExit("Kullanım: python sitemap_url_cikar.py sitemap.xml")

try:
    extract(sys.argv[1])
except (OSError, ValueError, EOFError, ET.ParseError) as error:
    raise SystemExit(f"Sitemap okunamadı: {error}")

Çalıştırma örneği:

Bash:
python sitemap_url_cikar.py https://example.com/sitemap.xml

Başarılı sonuçta her satırda bir URL görürsünüz:

Kod:
https://example.com/
https://example.com/urun/ornek

Yerel dosya kullanacaksanız komut şu şekilde olur:

Bash:
python sitemap_url_cikar.py sitemap.xml > url-listesi.txt

url-listesi.txt boş kalıyorsa dosya geçerli bir <urlset> içermiyor olabilir, sitemap index alt dosyalarına erişilemiyor olabilir veya XML’de <loc> değeri bulunmuyor olabilir. XML ayrıştırma hatası alırsanız dosyanın eksik, bozuk ya da XML kurallarına aykırı olduğunu kontrol edin.

Hangi dosyadan ne çıkarılır?​


Sitemap türünü doğru belirlemek, çıktıyı yanlış yorumlamamanızı sağlar.

Dosya türüKök öğeÇıkarılan değer
Tek sitemap<urlset>Sayfa URL’leri
Sitemap index<sitemapindex>Alt sitemap adresleri; kod alt dosyaları izleyerek sayfa URL’lerini toplar
Sıkıştırılmış sitemap.xml.gzAçıldıktan sonra aynı <loc> değerleri

Çıktıyı SEO denetiminde kullanacaksanız önce tekrarları temizleyin ve URL’lerin hangi sitemap’tan geldiğini kaybetmek istemiyorsanız dosyaları ayrı ayrı çalıştırın. Sitemap’tan URL çıkarmak yalnızca dosyada beyan edilen adresleri listeler; adresin erişilebilir, indekslenmiş veya arama sonuçlarında sıralanıyor olduğunu kanıtlamaz. Sonraki kontrolde HTTP durum kodu, yönlendirme, robots kuralları ve sayfanın gerçek içeriği ayrıca incelenmelidir.

Sık sorulan sorular​


Aynı URL birden fazla sitemap’ta varsa ne yapmalıyım?​


Tekilleştirilmiş bir liste kullanın. Aynı URL’nin birden fazla dosyada bulunması, çıkarma işlemini bozmaz; ancak sayım ve denetim sonuçlarında mükerrer kayıt oluşturur.

Sitemap’tan çıkarılan URL’ler neden Google’da görünmeyebilir?​


Sitemap, URL’nin keşfedilmesine yardımcı olan bir bildirimdir; indeksleme veya sıralama garantisi değildir. Görünmeme nedenini anlamak için URL’nin erişim durumunu, yönlendirmelerini, robots kurallarını ve indeksleme sinyallerini ayrıca kontrol etmek gerekir.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.