Yayınlama yaptığınız her seferde site haritanızı tamamlanmış herkese açık sayfa kümesinden yeniden oluşturun, ardından ikisini birlikte yükleyin. Bu Mac iş akışı, eklenen sayfaları dahil edip kaldırılanları otomatik olarak çıkarmak için küçük bir Python betiği kullanır ve herkese açık sonucu denetler.
Buradaki görev, Mac’ten dışa aktarılan küçük ve statik bir web sitesinin site haritasını güncel tutmaktır. Örnekte renkler hakkında kurgusal sayfalar kullanılıyor. Dışa aktarma klasörünü yükleyebilen ve herkese açık siteden eski dosyaları kaldırabilen mevcut bir yayınlama süreciniz olduğu varsayılıyor.
Site haritasının yeniden oluşturulacağı yeri seçin
Önce yayınlama sisteminizin zaten bir site haritası oluşturup oluşturmadığını kontrol edin. Google, birçok içerik yönetim sisteminin bunu otomatik olarak sağladığını belirtiyor. Sisteminiz sağlıyorsa başka bir oluşturucu eklemeden önce bir test sayfasını ekleyip kaldırdıktan sonra site haritasını kontrol edin. Site haritaları hakkında bilgi edinin.
Statik bir dışa aktarma için şu sırayı izleyin: sayfaların dışa aktarımını tamamlayın, site haritasını bu dışa aktarımdan oluşturun ve ortaya çıkan klasörü yayınlayın. Bu, önerilen bir uygulama biçimidir: site haritasının yayınlayıcıya iletilen sayfa kümesini tanımlamasını sağlar.
Yayınlama sırasında oluşturmak, ekleme ve kaldırmalar için tutarlı tek bir kural da sağlar. Tamamlanmış dışa aktarımda bulunan sayfa dahil edilir; bulunmayan sayfa dışarıda bırakılır. Güncellemeyi hatırlamanız gereken ayrı bir liste olmaz.
Mevcut kurulumunuza uygun entegrasyonu seçin:
| Mevcut yayınlama kurulumu | Yeniden oluşturmanın yapılacağı yer |
|---|---|
| Bir CMS site haritasını zaten yönetiyor | Bu oluşturucuyu kullanmaya devam edin ve sayfa değişikliklerine verdiği yanıtı test edin |
| Statik dışa aktarıcı, dışa aktarma sonrasında bir komutu destekliyor | Yüklemeden önce oluşturucuyu burada çalıştırın |
| Mevcut bir komut tamamlanmış bir klasörü yayınlıyor | Bu komutu oluşturucunun isteğe bağlı yayınlama argümanıyla çalıştırın |
| Masaüstü arayüzü üzerinden yükleme yapıyorsunuz | Önce oluşturun, ardından klasörün tamamını yükleyin; gözetimsiz herkese açık güncellemeler için desteklenen bir yayınlama entegrasyonu gerekir |
Yerel bir betik uzaktaki bir web sitesini kendi başına değiştiremez. Aşağıdaki iş akışı site haritası oluşturmayı otomatikleştirir ve mevcut bir yayınlama komutunu başlatabilir. Gerçek yükleme, kullandığınız yayınlayıcının sorumluluğundadır.
Site haritasına tam olarak hangi sayfaların gireceğini belirleyin
Sıradan sayfa URL’leri için Google, her satırda tam bir URL bulunan bir metin site haritasını kabul eder. Bu görev için XML isteğe bağlıdır. Aynı içeriğin birden fazla URL sürümünü değil, her sayfanın tercih edilen herkese açık URL’sini ekleyin. Site haritası oluşturun ve gönderin.
Metin biçimi UTF-8 kodlaması gerektirir ve başlık ya da yorum içermeden yalnızca URL’lerden oluşur. Tek bir dosya en fazla 50.000 URL ve 52.428.800 bayt içerebilir. Bu örnekte site haritasını site köküne koyun; böylece bu konumun altındaki dışa aktarılmış sayfaları kapsar. Site Haritaları protokolü: metin dosyaları ve konum.
Oluşturucu özellikle basit bir dışa aktarma kuralı kullanır:
| Dışa aktarılan dosya | Örnek herkese açık URL |
|---|---|
public/index.html |
https://example.com/ |
public/colors/blue.html |
https://example.com/colors/blue.html |
public/tiles/index.html |
https://example.com/tiles/ |
Bu kuralı yalnızca barındırıcınız tam olarak bu URL’leri sunuyorsa kullanın. Yayınlayıcınız blue.html dosyasını /colors/blue/ adresine dönüştürüyorsa veya siteyi /collection/ gibi bir yol altında sunuyorsa, yayınlayıcının rota listesini kullanın ya da yayınlamadan önce eşlemeyi uyarlayın. Dosya adlarını taramak, özel yönlendirme kurallarını ortaya çıkaramaz.
Dışa aktarma klasöründe yalnızca dışa aktarımda bulunması amaçlanan sayfaları tutun. Bu örnek noktayla başlayan yolları ve adı 404.html olan dosyaları atlar; sayfa meta verilerini, standart URL bildirimlerini veya yönlendirme kurallarını incelemez. Bu tür ek koşulları olan siteler, bunun yerine yayınlayıcılarının uygun sayfa envanterinden oluşturma yapmalıdır.
Normal gezinme bağlantılarını da güncel tutun. WHATWG, a öğelerinin href özniteliğiyle oluşturduğu köprüleri tanımlar; Google ise doğru bağlantı verilmiş sayfaların genellikle gezinme aracılığıyla keşfedilebildiğini açıklar. Site haritasını güncellerken eklenen veya kaldırılan sayfalara işaret eden bağlantıları da güncelleyin. WHATWG HTML Standardı: bağlantılar, Site haritaları hakkında bilgi edinin.
Mac’inizde oluşturucuyu hazırlayın
Python 3.8 veya üzeri ve düz metin düzenleyici gerekir. Kullanabileceğiniz yorumlayıcıyı kontrol etmek için Terminal’de python3 --version komutunu çalıştırın. Python’a ihtiyacınız varsa Python Software Foundation’ın macOS kurulum talimatlarını izleyin. Belgelerinde ayrıca Terminal’den python3 kullanarak betiklerin nasıl çalıştırılacağı açıklanıyor. macOS’ta Python kullanımı.
Masaüstünüzde sitemap-demo adlı bir klasör oluşturun. Aşağıdaki programın tamamını bu klasöre regenerate_sitemap.py adıyla kaydedin. Program Python’ın standart kitaplığını kullanır ve ek paket gerektirmez.
import argparse
from pathlib import Path, PurePosixPath
import subprocess
import tempfile
from urllib.parse import quote, urlsplit
def make_sitemap(paths, origin):
parsed = urlsplit(origin)
if (parsed.scheme not in ("http", "https") or not parsed.hostname
or parsed.netloc != parsed.hostname
or parsed.path not in ("", "/")
or parsed.query or parsed.fragment):
raise ValueError("Use a site origin, such as https://example.com")
base = origin.rstrip("/")
urls = set()
for relative in paths:
path = PurePosixPath(relative)
if path.name == "index.html":
parent = path.parent.as_posix()
route = "" if parent == "." else parent + "/"
else:
route = path.as_posix()
urls.add(base + "/" + quote(route, safe="/"))
if not urls:
raise ValueError("No eligible pages; sitemap was not replaced")
if len(urls) > 50000:
raise ValueError("Split the sitemap: more than 50,000 URLs")
data = ("\n".join(sorted(urls)) + "\n").encode("utf-8")
if len(data) > 50 * 1024 * 1024:
raise ValueError("Split the sitemap: larger than 50 MB")
return data
def main():
parser = argparse.ArgumentParser()
parser.add_argument("folder")
parser.add_argument("origin")
parser.add_argument("publish", nargs=argparse.REMAINDER)
args = parser.parse_args()
root = Path(args.folder).resolve()
if not root.is_dir():
parser.error("The export folder must already exist")
paths = []
for file in root.rglob("*.html"):
relative = file.relative_to(root)
if (file.is_file() and file.name != "404.html"
and not any(p.startswith(".") for p in relative.parts)):
paths.append(relative.as_posix())
data = make_sitemap(paths, args.origin)
target = root / "sitemap.txt"
temporary = None
try:
with tempfile.NamedTemporaryFile(dir=root, delete=False) as handle:
temporary = Path(handle.name)
handle.write(data)
temporary.replace(target)
finally:
if temporary is not None:
temporary.unlink(missing_ok=True)
print(f"Wrote {len(data.splitlines())} URLs to {target}", flush=True)
if args.publish:
subprocess.run(args.publish, check=True)
if __name__ == "__main__":
main()
Her çalıştırma URL listesini baştan oluşturur. Sonucu sıralar ve yinelenenleri kaldırır, yollardaki boşluklar gibi karakterleri kodlar ve sitemap.txt dosyasını değiştirmeden önce geçici bir dosyaya yazar. Oluşturma hataları, isteğe bağlı yayınlama komutunun çalışmasını engeller.
Boş bir dışa aktarım bilerek hata oluşturur ve önceki site haritasını olduğu gibi bırakır. Böylece yanlış klasörün seçilmesi veya dışa aktarımın tamamlanmaması yakalanır. Tüm sayfaları bilerek kaldırmak, bu iş akışına boş bir dışa aktarım vermek yerine ayrıca bir yayınlama kararı gerektirir.
Yayınlamaya bağlamadan önce bir ekleme ve bir kaldırmayı test edin
Terminal’de örnek klasörünüze geçin:
cd "$HOME/Desktop/sitemap-demo"
Bu tam kurulum komutuyla iki kurgusal sayfa oluşturun. Yeni örnek klasöründe çalıştırın; belirtilen iki örnek dosyayı yazar.
python3 - <<'PY'
from pathlib import Path
root = Path("public")
(root / "colors").mkdir(parents=True, exist_ok=True)
pages = {
"index.html": "<!doctype html><title>Color collection</title><p>Color collection.</p>",
"colors/blue.html": "<!doctype html><title>Blue tile</title><p>A blue tile.</p>",
}
for name, content in pages.items():
(root / name).write_text(content, encoding="utf-8")
PY
Yerel site haritasını oluşturup inceleyin. Örnek kaynak adresi temsili amaçlıdır; bu komutlar buraya hiçbir şey yayınlamaz.
python3 regenerate_sitemap.py public https://example.com
cat public/sitemap.txt
Beklenen dosyada tam olarak şu iki satır bulunur:
https://example.com/
https://example.com/colors/blue.html
Şimdi kurgusal mavi sayfayı yeşil bir sayfayla değiştirin:
python3 - <<'PY'
from pathlib import Path
root = Path("public")
(root / "colors/blue.html").unlink()
(root / "colors/green.html").write_text(
"<!doctype html><title>Green tile</title><p>A green tile.</p>",
encoding="utf-8",
)
PY
python3 regenerate_sitemap.py public https://example.com
cat public/sitemap.txt
Beklenen sonuç, ana sayfa URL’sinin ardından https://example.com/colors/green.html gelmesidir. Dışa aktarılan dosyası artık bulunmadığından mavi URL listeden çıkar. Bu işlem, değişikliği fark etmesi için arama motoruna bağlı kalmadan güncellemenin her iki yönünü de kontrol eder.
Yeniden oluşturmayı her yayınlamanın parçası hâline getirin
Gerçek siteniz için örnek klasörü ve kaynak adresini gerçek, tamamlanmış dışa aktarma klasörünüz ve herkese açık kaynak adresinizle değiştirin. Oluşturucuyu yalnızca dışa aktarma tamamlandıktan sonra çalıştırın ve yayınlama bitene kadar klasörde değişiklik yapmayın. Yayınlamaları sırayla gerçekleştirin.
Proje klasörünüzde deploy-site.sh adlı çalışan bir yayınlama betiğiniz varsa, aşağıdaki entegrasyon komutu site haritasını oluşturur ve ardından bu betiği çalıştırır. Bu örnek, mevcut betiğin bulunmasını gerektirir; oluşturucu betiği oluşturmaz veya barındırma yapılandırması sağlamaz.
python3 regenerate_sitemap.py public https://example.com sh ./deploy-site.sh
Yayınlama betiğiniz, public klasörünün tamamını, sitemap.txt dâhil, yüklemeli ve dışa aktarımdan kaybolan herkese açık dosyaları kaldırmalıdır. Site haritası oluşturulduktan sonra sayfaları yeniden oluşturmamalıdır. Siteyi de oluşturan bir yayınlayıcı kullanıyorsanız oluşturma işlemini derleme ve yükleme aşamalarının arasına koyun.
Oluşturma başarısız olursa yayınlama komutu atlanır. Yayınlama başarısız olursa Python hatayı bildirir ancak uzak site kısmen değişmiş olabilir. Yeniden denemeden önce herkese açık sonucu kontrol edin. Barındırıcınız tüm bir sürümü birlikte yayınlamayı destekliyorsa belgelenen bu yöntemi kullanın.
Masaüstü üzerinden yükleme yapıyorsanız dışa aktarma klasörünü yüklemek üzere seçmeden önce site haritasını oluşturun. Yükleyicinin mevcut site haritasını değiştirdiğini ve kaldırılan sayfaları uygun şekilde ele aldığını doğrulayın. Yine de yükleme işlemini sizin yapmanız gerekir; yerel otomatik oluşturma tek başına gözetimsiz herkese açık yayınlama sağlamaz.
Herkese açık site haritasını ve kaldırılan sayfayı ayrı ayrı doğrulayın
Başarılı bir yayınlamanın ardından tarayıcıda gerçek herkese açık sitemap.txt URL’nizi açın. Eklenen sayfanın göründüğünü ve kaldırılan sayfanın görünmediğini kontrol edin. Ardından etkilenen her sayfayı doğrudan ziyaret edin. Bu, doğru bir yerel dışa aktarımı doğru bir herkese açık sürümden ayırt etmenizi sağlar.
Bir site haritası girdisini silmek, o sayfanın eski adresinde verilecek HTTP yanıtını belirlemez. Yerine başka sayfa gelmeyen kaldırılmış bir sayfa için barındırıcının uygun bir sayfa bulunamadı yanıtı verdiğini kontrol edin. RFC 9110, geçerli bir gösterimi bulunmayan kaynaklar için 404 ve kullanılamama durumunun muhtemelen kalıcı olduğunun bilindiği durumlar için 410 kodlarını tanımlar. RFC 9110: HTTP Semantiği.
Sayfa, 200 döndürürken sayfa bulunamadı mesajı gösteriyorsa bu durum, sahte bir 404 olarak değerlendirilebilir. Google ayrıca, önceden dizine eklenmiş ve geçerli 4xx yanıtları döndüren URL’lerin zamanla dizininden çıkarıldığını belgeliyor. Bu nedenle URL’yi site haritasından kaldırmak, sayfayı kaldırmanın yalnızca bir parçasıdır. HTTP durum kodlarının Google tarayıcılarını nasıl etkilediği.
Bir sorun gördüğünüzde şu tanılama adımlarını izleyin:
| Gözlem | Sonraki kontrol |
|---|---|
| Yerel site haritasında kaldırılmış bir sayfa hâlâ listeleniyor | Dışa aktarım klasöründe kalan bir dosya veya yanlış seçilmiş bir klasör olup olmadığına bakın |
| Yerel site haritası doğru, ancak herkese açık kopya farklı | Yüklenen klasörü, hedef konumu ve önbelleği kontrol edin |
| Herkese açık site haritası doğru, ancak kaldırılan sayfa hâlâ açılıyor | Yayınlamanın eski uzak dosyayı kaldırıp kaldırmadığını kontrol edin |
| Oluşturulan URL yanlış sayfayı açıyor | Barındırıcının rota eşlemesini dosya adı kuralıyla karşılaştırın |
| Yeni URL herkese açık, ancak aramada görünmüyor | Arama motorunun keşfetmesini ve dizine eklemesini ayrı bir süreç olarak değerlendirin |
Önbellekleme, herkese açık site haritasının neden değişmemiş göründüğünü açıklayabilir. RFC 9111, önbelleğe alınmış yanıtların nasıl güncel kaldığını ve yeniden doğrulandığını tanımlar. Barındırıcınız yanıt başlıklarını yapılandırmayı destekliyorsa Cache-Control: no-cache, depolanmış bir yanıt yeniden kullanılmadan önce başarılı doğrulama yapılmasını gerektirir; yerel bir dosyayı değiştirmek bu başlığı yapılandırmaz. RFC 9111: HTTP Önbellekleme.
Tek ve sabit bir site haritası adresi kullanın
Herkese açık site haritasını Search Console’daki Sitemaps raporu üzerinden göndererek veya sitenin mevcut robots.txt dosyasında belirterek bulunabilir hâle getirin. Google her iki yöntemi de açıklar ve gönderimin bir ipucu olduğunu belirtir. Site haritası oluşturun ve gönderin.
Örnek site için keşif satırı şöyle olurdu:
Sitemap: https://example.com/sitemap.txt
Yayınlama sırasında içeriğini değiştirirken site haritası adresini sabit tutun. Tamamlandığını doğrulamak için herkese açık site haritasının tamamlanmış dışa aktarımla eşleştiğini, eklenen sayfanın listelenen URL’de açıldığını ve kaldırılan sayfanın amaçlanan yanıtı verdiğini kontrol edin. Arama motorları bu değişiklikleri kendi takvimlerine göre işler; site haritasında yer almak taranmayı veya dizine eklenmeyi garanti etmez. Site haritaları hakkında bilgi edinin.
Kaynaklar
- Site haritası oluşturun ve gönderin — Google Search Central.
- Site haritaları hakkında bilgi edinin — Google Search Central.
- Site Haritaları XML biçimi — Sitemaps.org.
- HTML Standardı: Bağlantılar — WHATWG.
- macOS’ta Python kullanımı — Python Software Foundation.
- RFC 9110: HTTP Semantiği — RFC Editor / IETF.
- RFC 9111: HTTP Önbellekleme — RFC Editor / IETF.
- HTTP durum kodlarının Google tarayıcılarını nasıl etkilediği — Google Crawling Infrastructure.