JavaScript SEO

JavaScript SEO: Araç Sayfalarında İlk HTML ve Render Kontrolü

Araç sayfasında JavaScript SEO kontrolü iki çıktıyı karşılaştırır: sunucunun gönderdiği ilk HTML ile JavaScript çalıştıktan sonraki DOM. Başlık, cevap metni, bağlantılar ve canonical ilk HTML'de bulunmalı; yalnız araç arayüzü JavaScript ile gelebilir. Yadem Reklam'ın beş araç sayfasında 17 ve 18 Ekim 2026'da yapılan render kontrolleri arayüzün oluşmadığını gösterdi: araclar.js'te sözdizimi hatası vardı.

Güncellendi: 18 Ekim 20267 dk okumaHazırlayan: Yadem Reklam ekibi
JavaScript SEO: Araç Sayfalarında İlk HTML ve Render Kontrolü – Yadem Reklam
İlk HTML'de neler bulunmalı?

Başlık, meta açıklama, canonical, robots etiketi, H1/H2 başlıkları, cevap metni ve href'li bağlantılar. Araç arayüzü ve içindekiler JavaScript ile gelebilir.

Render hatası nasıl yakalanır?

Betiği node –check ile denetleyin, sayfayı başsız tarayıcıda açıp konsol hatalarını ve form öğesi sayısını okuyun. Google tarafında URL Denetleme aracının canlı testi aynı görüntüyü verir.

Hesaplayıcının sonucu dizinlenir mi?

Buna güvenmeyin. Google'ın belgeleri işleme servisinin kullanıcı seçimi yaptığını söylemez; izin isteklerini reddeder ve durumu sayfa yüklemeleri arasında saklamaz. Sonucun anlamını metinde yazın.

Tek bir JavaScript hatası tüm aracı bozar mı?

Sözdizimi hatası evet: dosyanın tamamı çalışmaz. yademreklam.com'da tek satırdaki kesme işareti beş aracın beşini de durdurdu.

JavaScript SEO'da araç sayfasında önce neye bakılır?

Araç sayfasında JavaScript SEO kontrolü iki çıktıyı karşılaştırır: sunucunun gönderdiği ilk HTML ile JavaScript çalıştıktan sonraki DOM. Başlık, cevap metni, bağlantılar ve canonical ilk HTML’de bulunmalı; yalnız araç arayüzü JavaScript ile gelebilir. Google’ın JavaScript belgesi süreci üç aşamada anlatır: tarama, işleme (render) ve dizinleme; Googlebot HTTP 200 dönen tüm sayfaları işlenmek üzere kuyruğa alır ve JavaScript’i güncel bir Chromium ile çalıştırır.

Öğeİlk HTML’de olmalı mı?Gerekçe
title, meta açıklama, canonical, robots etiketiEvetGoogle, canonical’ı JavaScript ile eklemeyi önermez; robots etiketini de ilk HTML’de vermek daha sağlamdır
H1, H2 başlıkları ve cevap metniEvetSayfanın anlamı ve alıntılanabilir cevap metin olarak gelir
BağlantılarEvet, href’li a öğesi olarakGoogle bağlantıları yalnızca href’li a öğeleri olarak keşfeder
JSON-LD yapısal veriTercihen evetGoogle JSON-LD’nin JavaScript ile eklenebildiğini söyler; ilk HTML’de olması daha sağlamdır
Araç arayüzü (form öğeleri)Hayır, JavaScript ile gelebilirArayüz kullanıcı içindir; sayfanın cevabı ayrıca metin olarak yazılmalı
İçindekiler listesiHayır, JavaScript ile gelebilirYardımcı gezintidir; başlıklar zaten ilk HTML’de

Belge ayrıca işleme aşamasının sınırlarını sayar: Google robots.txt ile engellenmiş dosyalardaki ya da sayfalardaki JavaScript’i çalıştırmaz, durumu sayfa yüklemeleri arasında saklamaz (yerel depolama ve çerezler her yüklemede silinir) ve kullanıcı izni isteyen işlemleri reddeder. Sunucu tarafı ya da önceden işlenmiş HTML’in kullanıcıyı ve tarayıcıları hızlandırdığı için hâlâ iyi bir fikir olduğunu da yazar. Genel teknik kontrol listesindeki JavaScript maddesi için teknik SEO rehberine bakın.

Araç sayfasının ilk HTML'inde ne var?

Araç sayfasının ilk HTML’inde aracın yalnızca kabuğu vardır: başlık, “Ücretsiz araç” etiketi ve içinde tek bir noscript uyarısı olan boş bir gövde. yademreklam.com’da kısa kodu sunucuda şu HTML’e dönüşüyor (/reklam-filmi-maliyet-hesaplama/, 18.10.2026 03:42, JavaScript çalıştırılmadan alınan yanıt; WhatsApp numarası bu sayfada kısaltıldı):

<section class="yd-tool" data-arac="maliyet" data-wa="…" aria-label="Video maliyet hesaplayıcı"><div class="yd-tool__head"><span class="yd-eyebrow">Ücretsiz araç</span><h2>Video maliyet hesaplayıcı</h2></div><div class="yd-tool__body"><noscript>Bu aracı kullanmak için JavaScript gerekir.</noscript></div></section>

İçindekiler listesi de ilk HTML’de boştur:

<aside class="yd-toc" aria-label="İçindekiler"><b>Bu sayfada</b><ol></ol></aside>

Bu iki parça, JavaScript’in dolduracağı yerlerdir. Beş araç sayfasının hepsinde ilk HTML’de araç gövdesindeki form öğesi sayısı 0, içindekiler bağlantısı 0 ve kimlik (id) taşıyan H2 sayısı 0; başlıklar ve açıklama metinleri ise ilk HTML’de bulunuyor. Sayfanın dizinlenecek cevabı bu yüzden render’a bağlı değildir.

JavaScript çalışınca ne değişiyor? (canlı render)

JavaScript çalışınca değişen tek şey içindekiler listesi ve H2 kimlikleridir; araç arayüzü beş sayfanın hiçbirinde oluşmaz. Beş sayfa, Chrome 155.0.8059.80 ile (Playwright, başsız, 18.10.2026 03:42; ilk ölçüm 17.10.2026 23:49, aynı sonuç) açıldı, ağ boşta kalana kadar beklendi ve 2,5 saniye daha beklenip DOM okundu. Sonuçlar:

Araç sayfasıİlk HTML: form / içindekiler / id’li H2Canlı render: form / içindekiler / id’li H2Konsol
/reklam-filmi-maliyet-hesaplama/0 / 0 / 0 (H2: 12)0 / 12 / 12Unexpected identifier ‘ta’
/llms-txt-nedir/0 / 0 / 0 (H2: 8)0 / 8 / 8Unexpected identifier ‘ta’
/geo-gorunurluk-testi/0 / 0 / 0 (H2: 8)0 / 8 / 8Unexpected identifier ‘ta’
/reels-kanca-ornekleri/0 / 0 / 0 (H2: 9)0 / 9 / 9Unexpected identifier ‘ta’
/sosyal-medya-video-boyutlari/0 / 0 / 0 (H2: 7)0 / 7 / 7Unexpected identifier ‘ta’

İçindekiler, 7 ile 12 arasında bağlantıyla doldu ve her H2’ye kimlik atandı; bu işi tema betiği (site.js) yapıyor. Araç gövdesi ise render sonrasında da yalnız noscript uyarısını taşıyor, yani form öğesi sayısı 0 kaldı ve beş sayfada da tarayıcı konsolu aynı hatayı yazdı: Unexpected identifier 'ta'. Bu iletiyi Google’ın araçları da görür: belge, URL Denetleme aracı ve Zengin Sonuçlar Testi ile yüklenen kaynakları, JavaScript konsol çıktısını, istisnaları ve işlenmiş DOM’u görebileceğinizi yazar.

Araç arayüzü neden oluşmadı?

Araç arayüzü, araclar.js dosyasının 98. satırındaki bir sözdizimi hatası yüzünden oluşmadı: tek tırnakla yazılmış bir dize, içindeki kesme işaretinde (“Tools’ta”) bitiyor ve dosyanın geri kalanı ayrıştırılamıyor. JavaScript’te bir sözdizimi hatası yalnız o satırı değil, dosyanın tamamını çalışmaz hale getirir; bu yüzden beş aracın beşi de aynı anda açılmadı. Hata, Node’un node --check komutuyla da yakalanıyor (çıkış kodu 1, iletisi “Unexpected identifier ‘ta’”).

Hatanın kapsamı da ölçülebilir: aynı sitede ayrı bir dosyayla (videoobject.js) çalışan VideoObject schema oluşturucu bu hatadan etkilenmedi. 18.10.2026 03:44 ölçümünde bu sayfanın ilk HTML’inde araç gövdesindeki form öğesi 0, render sonrasında 21’di; konsolda hata yoktu ve videoobject.js node --check denetiminden geçti (çıkış kodu 0). Araçları ayrı dosyalara bölmek, tek bir hatanın bütün araçları birlikte durdurmasını önler.

// araclar.js, satır 98 (tek tırnaklı dize içinde kesme işareti):
'Önemli sayfalar Google Search Console ve Bing Webmaster Tools'ta dizinde (site haritası gönderilmiş).',

// Düzeltme: kesme işaretini kaçışlayın
'Önemli sayfalar Google Search Console ve Bing Webmaster Tools\'ta dizinde (site haritası gönderilmiş).',

Düzeltmeyi canlı siteye uygulamadan sınadık: aynı tarayıcıda araclar.js isteğini yerel olarak düzeltilmiş kopyayla yanıtlayıp beş sayfayı yeniden işledik. Düzeltilmiş dosya node --check komutundan geçti, konsol hatası kalmadı ve her aracın arayüzü oluştu:

AraçDüzeltilmiş betikle (yerel sınama)Sınama
Maliyet hesaplayıcı4 form öğesi, konsol hatası yokVarsayılan 30 sn video: 1.800 TL; intro seçilince: 900 TL
llms.txt oluşturucu8 form öğesi, konsol hatası yokAd alanına yazılınca çıktının ilk satırı: # Deneme Ltd
GEO görünürlük testi14 form öğesi, konsol hatası yok18 soru, 10 kontrol maddesi
Reels kanca üretici10 form öğesi, konsol hatası yok10 kanca, 6 stil düğmesi
Video boyutu seçici8 form öğesi, konsol hatası yok8 platform düğmesi, ilk oran 9:16

Hesaplayıcının varsayılan çıktısı, sitenin yayımlanmış fiyat listesiyle uyuşuyor: 30 saniyelik video 1.800 TL, 15 saniyelik intro 900 TL (fiyat listesi). Araç sayfalarının hangi sorgulara cevap verdiği için maliyet hesaplayıcı, GEO görünürlük testi ve llms.txt sayfalarına bakın.

Googlebot bu sayfayı nasıl görür?

Googlebot araç sayfasını, ilk HTML’deki tüm metinle görür ve araç arayüzünün eksikliği sayfanın dizinlenecek metnini değiştirmez. İki betik dosyası da Googlebot’a açık ve 200 dönüyor; bu önemlidir, çünkü Google robots.txt ile engellenmiş dosyalardaki JavaScript’i çalıştırmaz.

KaynakHTTProbots.txt (Googlebot)Not
araclar.js200İzinlitext/javascript, 18093 bayt, defer ile yükleniyor
site.js200İzinlitext/javascript, 10693 bayt

Üç sonuç çıkıyor. Birincisi, sayfanın metni (cevap, tablolar, SSS) ilk HTML’de olduğu için render hatası dizinlenecek içeriği bozmaz; hatanın bedeli kullanıcıya ödettiği deneyimdir ve “ücretsiz araç” vaadinin boş kalmasıdır. İkincisi, hesaplayıcının sonucu bir kullanıcı seçimiyle oluşur ve Google’ın belgeleri işleme servisinin bu tür seçimleri yaptığını söylemez; bu yüzden aracın ne yaptığını ve sonucun nasıl yorumlanacağını metinde yazmak güvenlidir (bu sayfalarda yazılı). Üçüncüsü, JavaScript hataları kullanıcı ve tarayıcı tarafında sessizdir; yalnız konsola yazılır ve ancak render’ı kendiniz denediğinizde görürsünüz. robots.txt tarafı için robots.txt ve noindex farkı sayfasına bakın.

Kendi araç sayfanızda render hatası nasıl yakalanır?

Render hatasını yakalamak için betiği node --check ile denetler, sayfayı gerçek bir tarayıcıda açıp form öğelerini sayar ve konsol hatalarını toplarsınız. Aşağıdaki iki adım bu sayfadaki denetimin özetidir; ikinci adımın çıktısı 18.10.2026 03:42 tarihli gerçek sonuçtur.

# 1) Betiğin sözdizimini denetle (hata varsa satır numarasını verir)
node --check araclar.js

# 2) Sayfayı gerçek tarayıcıda aç, form öğelerini say, konsol hatalarını topla
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    tarayici = p.chromium.launch(channel="chrome", headless=True)
    sayfa = tarayici.new_page()
    hatalar = []
    sayfa.on("pageerror", lambda e: hatalar.append(str(e)))
    sayfa.goto("https://yademreklam.com/reklam-filmi-maliyet-hesaplama/", wait_until="networkidle")
    sayfa.wait_for_timeout(2500)
    print("form öğesi:", sayfa.locator(".yd-tool__body input, .yd-tool__body select").count())
    print("konsol hataları:", hatalar)
    tarayici.close()

İkinci adımın canlı çıktısı:

form öğesi: 0
konsol hataları: ["Unexpected identifier 'ta'"]

Google tarafında aynı görüntüyü Search Console’daki URL Denetleme aracında “Canlı URL’yi test et” ve “Taranan sayfayı göster” ile alırsınız; işlenmiş HTML, ekran görüntüsü ve konsol iletileri orada görünür. Bu kayıt yademreklam.com için bu denetime dahil değildir. Hesaplayıcı gibi etkileşimli bir bileşenin sonucunu ayrıca metinde de yazmak, hem kullanıcı hem tarayıcı için en güvenli yoldur.

Araç sayfası için JavaScript SEO kontrol listesi

Araç sayfası için JavaScript SEO kontrol listesi sekiz maddedir ve her madde bir komut ya da araçla doğrulanır.

  1. Başlık, canonical ve robots etiketi ilk HTML’de mi? curl -s çıktısına bakın.
  2. Sayfanın cevabı ve tabloları ilk HTML’de mi? JavaScript’i kapatıp sayfayı açın.
  3. Bağlantılar href’li a öğesi mi? İlk HTML’de href’siz düğme ya da yalnız JavaScript olay dinleyicisiyle çalışan bağlantı olmasın.
  4. Betik dosyaları 200 dönüyor ve robots.txt’te engelli değil mi?
  5. Betiklerin sözdizimi geçerli mi? node --check her dosyada 0 dönmeli.
  6. Gerçek tarayıcıda konsol hatası var mı? Başsız tarayıcıyla topladığınız pageerror listesi boş olmalı.
  7. Araç arayüzü oluşuyor mu? Form öğesi sayısı sıfırdan büyük olmalı.
  8. Araç çıktısının anlamı ayrıca metinde yazılı mı? Hesaplayıcıların fiyat, süre ve sınır bilgisi metinde de bulunmalı.

Hız ve etkileşim ölçümü ayrı bir konudur: JavaScript’in ana iş parçacığına bindirdiği yük WordPress Core Web Vitals sayfasında ölçüldü. Yapısal verinin işlenmesi için schema yapısal veri rehberine, bu denetimin sitenizde yapılması için SEO hizmeti sayfasına bakın.

Sık sorulan sorular

JavaScript SEO nedir?

JavaScript ile oluşturulan ya da değiştirilen içeriğin arama motorları tarafından doğru taranması, işlenmesi ve dizinlenmesi için yapılan teknik çalışmadır. Google bunu tarama, işleme ve dizinleme aşamalarında ele alır.

JavaScript ile eklenen içerik Google'da dizinlenir mi?

Google JavaScript'i güncel bir Chromium ile çalıştırır ve işlenmiş HTML'i dizinler; ancak işleme sırası beklemeyi ve hata riskini artırır. Önemli metni, başlıkları ve bağlantıları ilk HTML'de vermek daha güvenlidir.

Araç sayfasındaki hesaplayıcının sonucu dizinlenir mi?

Buna güvenmeyin. Sonuç bir kullanıcı seçimiyle oluşur ve Google'ın belgeleri işleme servisinin böyle seçimler yaptığını söylemez. Aracın ne yaptığını ve sonucun nasıl yorumlanacağını metinde yazın.

noscript içindeki metin ne işe yarar?

JavaScript çalışmadığında gösterilecek yedek iletiyi taşır. yademreklam.com'un araç sayfalarında bu ileti ilk HTML'de bulunuyor, ama aracın yerine geçmez; cevap metni ayrıca sayfada yazılıdır.

İçindekiler listesi JavaScript ile oluşturulursa sorun olur mu?

Başlıklar ilk HTML'de olduğu sürece sorun olmaz; liste yardımcı gezintidir. Kimliksiz başlıklara bağlantı vermek gerekiyorsa kimlikleri de sunucu tarafında ekleyin.

Render hatasını Search Console'da nasıl görürüm?

URL Denetleme aracında 'Canlı URL'yi test et' ve 'Taranan sayfayı göster' ile işlenmiş HTML'i, ekran görüntüsünü ve konsol iletilerini görürsünüz. Rich Results Test de aynı bilgiyi verir.

Sunucu tarafı render gerekli mi?

Zorunlu değil. Google, sunucu tarafı ya da önceden işlenmiş HTML'in kullanıcıyı ve tarayıcıları hızlandırdığı için hâlâ iyi bir fikir olduğunu yazar.

Canonical etiketini JavaScript ile eklemek doğru mu?

Mümkündür ama Google önermez. Canonical'ı sunucudan ilk HTML'de verin; yademreklam.com'da canonical ilk HTML'de bulunuyor.

Sıradaki adım

Araç sayfalarınızın render çıktısını birlikte denetleyelim

Site adresinizi WhatsApp'tan yazın; ilk HTML ile işlenmiş DOM'u karşılaştırıp konsol hatalarını ve eksik arayüzleri raporlayalım. SEO fiyatı kapsama göre aylık tekliftir.

WhatsApp'tan yazın