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
Node.js ile sitemap oluşturmanın en basit yolu, sitenizdeki herkese açık ve kanonik sayfa adreslerini XML biçiminde üretip sitemap.xml dosyasına yazmaktır. Aşağıdaki örnek harici paket kullanmadan çalışır; URL listesini düzenleyip dosyayı projenizin public veya statik dosya klasörüne koyabilirsiniz.

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


Sitemap, arama motorlarına sitenizde taranmasını istediğiniz URL'leri bildiren XML dosyasıdır. Her sayfa <url>, adres ise <loc> etiketi içinde yer alır. Adreslerin tam URL olması, yani alan adıyla birlikte yazılması gerekir.

Sitemap'e genellikle şu sayfalar eklenir:
  • Yayınlanmış ve herkese açık içerikler
  • Kanonik ürün, kategori veya makale sayfaları
  • Giriş gerektirmeyen kalıcı sayfalar
Arama sonuçları, filtre kombinasyonları, oturum sayfaları, yönetim ekranları ve aynı içeriğin tekrarlarını eklemeyin.

Çalıştırılabilir Node.js örneği​


Aşağıdaki dosyayı generate-sitemap.cjs adıyla kaydedin. example.com alan adını kendi alan adınızla, URL listesini de uygulamanızdaki gerçek rotalarla değiştirin. .cjs uzantısı, proje module modunda olsa da bu require örneğini CommonJS olarak çalıştırır; adresler kurgusaldır.

Kod:
const fs = require('node:fs');

const baseUrl = 'https://example.com';
const paths = [
  '/',
  '/hakkimizda',
  '/blog/node-js-sitemap-olusturma',
  '/iletisim'
];

function escapeXml(value) {
  return value
    .replace(/&/g, '&amp;')
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/"/g, '&quot;')
    .replace(/'/g, '&apos;');
}

const urls = [...new Set(paths.map((path) => {
    const url = new URL(path, baseUrl);
    url.hash = '';

    if (url.origin !== new URL(baseUrl).origin) {
      throw new Error('URL site dışına çıkıyor: ' + url.href);
    }
    if (!['http:', 'https:'].includes(url.protocol)) {
      throw new Error(`Desteklenmeyen protokol: ${url.href}`);
    }

    return url.href;
  }))];

const entries = urls
  .map((url) => `  <url>\n    <loc>${escapeXml(url)}</loc>\n  </url>`)
  .join('\n');

const sitemap = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${entries}
</urlset>
`;

fs.writeFileSync('sitemap.xml', sitemap, 'utf8');
console.log(`${urls.length} URL sitemap.xml dosyasına yazıldı.`);

Çalıştırmak için terminalde şu komutu kullanın:

Kod:
node generate-sitemap.cjs

Beklenen çıktı buna benzer olmalıdır:

Kod:
4 URL sitemap.xml dosyasına yazıldı.

Ardından proje klasöründe sitemap.xml oluşur. Dosyanın içeriğinde kök <urlset> elementi ve her adres için bir <url> elementi bulunmalıdır. XML dosyasını tarayıcıda açtığınızda ham XML veya tarayıcının biçimlendirdiği XML görünümüyle karşılaşmanız normaldir.

Uygulama kararları​

DurumUygulamaNeden
Küçük ve sabit siteDosyayı build sırasında üretinGereksiz sunucu işlemi oluşmaz
İçerikler veritabanından geliyorsaURL listesini sorgudan oluşturunYeni içerikler otomatik dahil edilir
Dinamik rotalar çok fazlaysaParçalı üretim ve önbellek kullanınHer istekte pahalı sorguyu önlersiniz
Birden fazla sitemap gerekiyorsaAyrı dosyalar ve bir sitemap index kullanınYönetimi ve hata ayıklamayı kolaylaştırır
Veritabanından URL üretirken yalnızca yayın durumundaki kayıtları seçin. Silinmiş veya taslak içerikler listeye girerse sitemap, ziyaretçiye açılmayan adresleri bildirmiş olur.

Yayına alma ve kontrol​

  1. Üretilen sitemap.xml dosyasını sitenin herkese açık kök dizinine veya seçtiğiniz sabit dosya dizinine taşıyın.
  2. Tarayıcıda alan adınızın sitemap dosyasını açarak HTTP hata kodu, XML biçimi ve URL listesini kontrol edin.
  3. Her <loc> değerinin gerçek, erişilebilir ve tercih edilen URL olduğundan emin olun.
  4. Uygulamanızda statik dosyalar için uygun application/xml içerik türünün döndürüldüğünü kontrol edin.
  5. Sitemap adresini robots.txt içindeki Sitemap: satırıyla ve kullandığınız arama motoru araçlarıyla bildirin.
Dosya açılamıyorsa önce yanlış klasöre kopyalanıp kopyalanmadığını ve sunucunun statik XML dosyalarını yayınlayıp yayınlamadığını kontrol edin. XML ayrıştırma hatası varsa çoğunlukla kaçışlanmamış & karakteri, eksik kapanış etiketi veya bozuk URL vardır. Örnekteki escapeXml fonksiyonu bu tür karakter sorunlarını azaltır; ancak URL listesinin doğruluğunu yine sizin kontrol etmeniz gerekir.

Tek sitemap için 50.000 URL ve sıkıştırılmamış 50 MB sınırını gözetin. Bu örnek sitemap’i her çalıştırmada dosyanın üzerine yazar. İçerik değiştikçe build sürecinde yeniden çalıştırın veya veritabanı tabanlı üretimde kontrollü bir önbellekleme mekanizması kullanın. Sitemap, sayfaların indeksleneceğini garanti etmez; yalnızca keşfedilebilir URL'lerin düzenli biçimde bildirilmesini sağlar.

Sık sorulan sorular​


Sitemap'e görsel ve video adresleri eklenmeli mi?​


Temel sayfa sitemap'i yalnızca sayfa URL'lerini içerebilir. Görsel veya video keşfi özel metadata gerektiriyorsa bunu ayrı bir sitemap yaklaşımıyla tasarlamak daha uygundur; normal sayfa adreslerini bu nedenle kaldırmayın.

Aynı sayfa farklı yollarla listeye girerse ne olur?​


Örnek URL’leri çözüp fragmenti kaldırdıktan sonra tekilleştirir ve site dışına çıkan adresi reddeder. Ancak /urun ile /urun/ adreslerinin aynı sayfa olup olmadığını kendiliğinden bilmez. Gerçek kanonik adres kararını uygulamanızın yönlendirme ve canonical politikasından alın.
 

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.
Robotlar:
  • Anthropic