seo-audit — Temel SEO Denetimi
OpenClaw tarafından desteklenen, hızlı, varsayılan tek sayfa SEO denetimleri için tasarlanmış hafif bir SEO ajan becerisi. Tam teknik derinlik gerektirmeyen ilk sayfa kontrolleri veya hızlı bir değerlendirme gerektiğinde uygundur.
Bu Beceri Ne Zaman Kullanılır
Aşağıdaki durumlarda seo-audit kullanın:
- Kullanıcı şunları söylediğinde: "bu sayfayı denetle", "SEO'yu kontrol et", "URL'mi analiz et", "hızlı SEO kontrolü", "sayfamda ne yanlış var"
- Belirli bir derinlik istenmediğinde — bu varsayılan giriş noktasıdır
- Kullanıcı kapsamlı bir teknik döküm yerine hızlı, okunabilir bir özet istediğinde
Kullanıcı daha fazla derinlik isterse, seo-audit-full'a yükseltin:
İpucu: Derin teknik denetimler, gelişmiş sayfa içi SEO veya tam raporlar için
seo-audit-fullbecerisini kullanın.
Beklenen Girdi
| Girdi | Gerekli | Notlar |
|---|---|---|
| Sayfa URL'si | Evet | Denetlenecek sayfa |
| Ham HTML veya sayfa içeriği | İsteğe bağlı | Daha doğru sayfa içi analiz sağlar |
| GSC / analitik verileri | İsteğe bağlı | Temel denetim için gerekli değildir |
Yalnızca bir URL sağlanmışsa ve kaynak kodu veya tarayıcı verisi yoksa, açıkça belirtin:
Sınırlama: Bu denetim yalnızca görünür sayfa içeriğine ve herkese açık sinyallere dayanmaktadır. Bu denetim için kaynak kodu, GSC verileri, tarama günlükleri ve performans metrikleri mevcut değildir.
Çıktı
assets/report-template.html adresindeki şablonu doldurarak bir Temel SEO Denetim Raporu oluşturun, sonra bir dosyaya kaydedin — asla ham HTML'i terminale yazdırmayın.
Dosya adlandırma: reports/<sunucu-adı>-<kısa-ad>-denetim.html
https://example.com/blog/en-iyi-araclar → reports/example-com-blog-en-iyi-araclar-denetim.html
https://example.com/ → reports/example-com-denetim.html
Kaydettikten sonra kullanıcıya söyleyin:
✅ Rapor kaydedildi → reports/example-com-denetim.html
Şimdi açmak ister misiniz? (evet / hayır)
Evet ise → çalıştırın: open reports/example-com-denetim.html
Şablon yer tutucuları — her birini bağımsız olarak doldurun:
| Yer Tutucu | İçerik |
|---|---|
{{summary_verdict}} | Bir cümle: toplam kaç kontrol yapıldı, kaçı başarısız/uyarı/geçti |
{{summary_critical_html}} | Her kritik (başarısız) öğe için <li> veya <li class="summary-empty">Yok</li> |
{{summary_warnings_html}} | Her uyarı öğesi için <li> veya <li class="summary-empty">Yok</li> |
{{summary_passing_html}} | Her geçen kontrol için <li> veya <li class="summary-empty">Yok</li> |
Betikler
Herhangi bir bulgu yazmadan önce bu betikleri çalıştırın. Yapılandırılmış JSON çıktısı verirler — JSON'u doğrudan kanıt olarak kullanın; aynı URL'leri manuel olarak tekrar getirmeyin.
Bağımlılıklar: pip install requests (html ayrıştırma Python stdlib kullanır)
# Adım 1: site düzeyinde kontroller (robots.txt + sitemap.xml)
python scripts/check-site.py https://example.com
# Adım 2: sayfa düzeyinde kontroller (H1, başlık, meta açıklaması, canonical)
python scripts/check-page.py https://example.com
# Birincil anahtar kelime ile (önerilir — H1 anahtar kelime varlığı kontrolünü etkinleştirir)
python scripts/check-page.py https://example.com --keyword "koşu ayakkabıları"
# İsteğe bağlı: daha fazla inceleme için ham sayfa HTML'sini getir
python scripts/fetch-page.py https://example.com --output page.html
# Adım 3: JSON-LD şema doğrulaması
python scripts/check-schema.py https://example.com
# Veya önceden getirilmiş HTML'den (gereksiz getirmeyi önler):
python scripts/check-schema.py --file page.html
Her betik 0 (tümü geçti/uyarı) veya 1 (herhangi bir başarısızlık/hata) koduyla çıkar.
KATI KAPSAM — aşağıda listelenmeyen hiçbir kontrol eklemeyin. İstisna yok.
İzin verilen site düzeyi kontrolleri ({{site_checks_html}} içinde):
- robots.txt · sitemap.xml · 404 Yönetimi · URL Kanonikleştirme · i18n / hreflang
İzin verilen E-E-A-T kontrolleri ({{eeat_checks_html}} içinde):
- Hakkımızda · İletişim · Gizlilik Politikası · Hizmet Şartları · Medya/Ortaklar (yalnızca mevcutsa)
İzin verilen sayfa düzeyi kontrolleri ({{page_checks_html}} içinde), bu tam sırayla çıktı verin:
URL Kısa Adı · Başlık Etiketi · Meta Açıklaması · H1 Etiketi · Kanonik Etiket · Görsel Alt Metni · Kelime Sayısı · Anahtar Kelime Yerleşimi · Başlık Yapısı · Dahili Bağlantılar · Şema (JSON-LD)
Görsel Alt Metni mantığı:
- Statik HTML'den <img> etiketlerini ayrıştırın
- Geçti: tüm görsellerin boş olmayan alt metni var (alt="" olan dekoratif görseller uygundur)
- Uyarı: herhangi bir içerik görselinde alt özelliği eksik
- Doğrulanamadı (durum-bilgisi): statik HTML'de 0 görsel bulundu → muhtemelen JS ile oluşturulmuş, doğrulanamaz
⛔ KESİN KURAL — Yalnızca report-template.html'de tanımlanan kontrol satırlarını çıktı olarak verin. Bir kontrol yukarıdaki izin verilen listelerde yoksa, onu çıktı olarak VERMEYİN — sorun bulsanız bile. İstisna yok. "Bonus" kontrol yok. Doğaçlama yok. Şablon tek doğruluk kaynağıdır. Onu katı bir beyaz liste olarak kabul edin.
Hâlâ YASAKLI (seo-audit-full'a ait): OG etiketleri · Twitter Kartı · Sosyal etiketler · Sayfa Ağırlığı · Temel Web Verileri · Robots Meta
JSON çıktısı nasıl kullanılır:
- Her alanın
statusdeğerini (pass/warn/fail/error) doğrudan rapor kontrol tablosuna eşleyin - Her alanın
detaildizesini, bulgulardaki Kanıt satırı için başlangıç noktası olarak kullanın - Ek gözlemlenebilir kanıtınız olmadıkça betik çıktısıyla çelişmeyin
{{site_checks_html}}içinde kontrol gruplarını<div class="subsection-label">Etiket</div>ile ayırın:Taranabilirlik·URL Kanonikleştirme·i18n / hreflang·Şema (JSON-LD)ve{{eeat_checks_html}}öncesinde<div class="subsection-label">E-E-A-T Güven Sayfaları</div>
LLM incelemesi — llm_review_required: true olduğunda zorunludur:
Betik, kendisinin gerçekleştiremeyeceği anlamsal veya kalite yargısı gerektiren alanları işaretler.
llm_review_required: true asla çözülmemiş bırakmayın — her zaman açık bir yargı çağrısı yapın.
H1 — keyword_match == "partial" olduğunda tetiklenir:
h1_metni : (h1.values[0]'dan)
anahtar_kelime : (betiğe geçirilen --keyword)
Yargılayın: Bu H1, anahtar kelimenin arama amacını anlamsal olarak kapsıyor mu?
- Eş anlamlıları, doğal varyantları, konu kapsamını göz önünde bulundurun
- evet → "pass" olarak düşürün, varyantı not edin
- hayır → "warn" olarak bırakın veya "fail" olarak yükseltin, boşluğu açıklayın
Başlık — keyword_match == "partial" VEYA keyword_position != "start" olduğunda tetiklenir:
başlık : (title.value'dan)
anahtar_kelime : (--keyword geçirildi)
Yargılayın:
1. Başlık, anahtar kelimenin arama amacını anlamsal olarak kapsıyor mu?
2. Başlık dilbilgisel olarak doğru ve doğal olarak okunabilir mi?
3. Anahtar kelime konumu — sayfa türüne göre farklı standartlar uygulayın:
- Ana sayfa : Marka + çekirdek anahtar kelime doğrudur (ör. "Acme | Yapay Zeka İş Akışı Otomasyonu")
Marka-önce olmasını sorun olarak işaretlemeyin.
- İç sayfalar: Çekirdek anahtar kelime önde olmalıdır (ör. "Takımlar için Yapay Zeka İş Akışı Otomasyonu — Acme")
Anahtar kelime, iyi bir neden olmaksızın başlığın ortasında gömülüyse işaretleyin.
ÖNEMLİ — bunları olumsuz olarak işaretlemeyin:
- Yıllar (ör. "2026") → güncellik sinyali verir, TO'yu artırır — sayfa, tarihlemenin uzun ömürlülüğü zedeleyeceği açıkça her dem yeşil içerik değilse olumlu olarak değerlendirin.
- Sayılar (ör. "5 en iyi", "En iyi 10", "3 adım") → net beklentiler oluşturur,
sayısal olmayan başlıklara göre TO'da sürekli daha iyi performans gösterir — her zaman artı olarak değerlendirin.
- Belirli niteleyiciler ("Açık Kaynaklı", "Kendi Sunucunda", "Ücretsiz") → amacı daraltır
ve daha yüksek kaliteli tıklamalar çeker — cezalandırmayın.
URL Kısa Adı — keyword_match != "full" veya is_homepage == false olduğunda tetiklenir:
kısa_ad : (url_slug.slug'dan)
anahtar_kelime : (--keyword geçirildi)
Yargılayın:
1. Kısa ad, birincil anahtar kelimeyi veya doğal bir varyantını içeriyor mu?
2. Yol hiyerarşisi mantıklı mı? (/kategori/anahtar-kelime idealdir)
3. Kısa ve insan tarafından okunabilir mi?
Ana sayfa (is_homepage: true): atlayın — yargılamaya gerek yok.
Meta Açıklaması — içerik mevcut olduğunda her zaman tetiklenir:
meta_aciklamasi : (meta_description.value'dan)
anahtar_kelime : (--keyword geçirildi)
Dördünü de yargılayın:
1. Tam cümle(ler) mi? (1-2 cümle, parça yok)
2. Somut bir sonuçtan bahsediyor mu — belirsiz boş laf değil?
İyi: "Yapay zeka destekli şablonlarla tasarım süresini %60 azaltın"
Kötü: "Tüm tasarım ihtiyaçlarınız için en iyi araç"
3. Anahtar kelime veya doğal eş anlamlısı bir kez kullanılmış — doldurulmamış?
4. Tipik bir rakibin yazacağından daha spesifik mi?
ÖNEMLİ — bunları olumsuz olarak işaretlemeyin:
- Yıllar (ör. "2026") → güncellik sinyali verir, zamana duyarlı sorgular için TO'yu iyileştirir.
Yalnızca sayfa, tarihlemenin zarar vereceği açıkça her dem yeşil içerikse yılı not edin.
- Sayılar (ör. "5 en iyi", "3 adım") → somut özgüllük, güçlü TO sinyali.
- Sondaki "ve daha fazlası." → en fazla küçük bir stil notu, asla Uyarı veya Başarısız değil.
Önerilen İş Akışı
Bu adımları sırayla izleyin:
-
Kapsamı onaylayın — bunun temel bir denetim olduğunu doğrulayın; eksik verileri not edin
-
Birincil anahtar kelimeyi çıkarsayın — sayfayı
fetch-page.pyile getirin, ardından birincil anahtar kelimeyi belirleyin:- Kullanıcı açıkça bir anahtar kelime verdiyse → doğrudan kullanın
- Vermediyse → sayfanın H1'ini, başlığını ve ilk paragrafını okuyun, ardından en olası hedef anahtar kelime öbeğini çıkarsayın (bir arayan bu sayfayı bulmak için ne yazardı?)
- Kontrolleri çalıştırmadan önce çıkarsanan anahtar kelimeyi açıkça belirtin:
"Çıkarsanan birincil anahtar kelime: açık kaynak claude alternatifleri"
-
check-site.pybetiğini çalıştırın — robots, site haritası, 404 yönetimi ve URL kanonikleştirme için JSON çıktısını ayrıştırın404 kontrolü:
<origin>/bu-sayfa-kesinlikle-mevcut-degil-seo-denetim-kontroluadresini getirin- 404 döndürür → Geçti · 200 döndürür (yumuşak 404) → Başarısız · Ana sayfaya 301 döndürür → Uyarı
URL Kanonikleştirme kontrolleri (her biri ayrı bir alt kontroldür):
- HTTP→HTTPS:
http://<host>adresini getirin —https://adresine 301 yönlendirmelidir. 200 döndürür → Başarısız. - www tutarlılığı: hem
https://www.<host>hem dehttps://<host>adresini getirin — biri diğerine 301 yönlendirmelidir. Her ikisi de 200 döndürür → Uyarı. - Sondaki eğik çizgi: gerçekten sunulan URL'yi sayfadaki kanonik etiketle karşılaştırın. Uyuşmazlık → Uyarı.
- Kanonik eşleşmesi: kanonik etiket href'i, tüm yönlendirmelerden sonraki nihai URL ile tam olarak eşleşmelidir. Uyuşmazlık → Uyarı.
-
E-E-A-T altyapı kontrolü — aşağıdaki her güven sayfası için iki katmanı kontrol edin:
- Katman 1 — Var: URL'yi getirin, HTTP durumunu kontrol edin (200 = var, 404/yönlendirme = eksik)
- Katman 2 — Erişilebilir: Ana sayfa HTML'sini getirin, altbilgi veya gezinme çubuğunda bu sayfaya bir bağlantı olup olmadığını kontrol edin
Sayfa Gerekli Hakkımızda Evet İletişim Evet Gizlilik Politikası Evet Hizmet Şartları Evet Medya / Ortaklar Hayır — yalnızca mevcutsa dahil edin Durum kuralları:
- Sayfa eksik (200 olmayan) → Başarısız
- Sayfa var ancak altbilgi/gezinme çubuğunda bağlantılı değil → Uyarı
- Sayfa var ve altbilgi/gezinme çubuğunda bağlantılı → Geçti
- İsteğe bağlı sayfa eksik → atlayın, satır eklemeyin
-
check-page.py --keyword "<cikarsanan_anahtar_kelime>"betiğini çalıştırın — H1, başlık, meta açıklaması, kanonik ve URL kısa adı için JSON çıktısını ayrıştırın -
i18n / hreflang kontrolü — yalnızca sayfa hreflang etiketleri içeriyorsa veya
<html lang>çok dilli olduğunu gösteriyorsa çalıştırın:- Tamamen atlayın (N/A) eğer hiçbir hreflang etiketi bulunmazsa ve site tek dilli görünüyorsa
- Hreflang etiketleri varsa, kontrol edin:
- Karşılıklı simetri: referans verilen her URL, diğer tüm varyantlara geri bağlantı vermelidir — herhangi bir kırık bağlantı = Başarısız
- Dil kodları: geçerli BCP 47 olmalıdır (ör.
zh-CNzhdeğil,en-USen-usdeğil) — yanlış kod = Uyarı - x-default: dil seçici veya yedek sayfalar için bulunmalıdır — eksik = Uyarı
- html[lang] özelliği: sayfanın birincil hreflang'i ile eşleşmelidir — uyuşmazlık = Uyarı
- URL yapısı: önerilen desen — varsayılan dil (genellikle
en) kökte ön eksiz, diğer diller alt dizinlerde (/zh/,/es/)./page(en) +/zh/page+/es/page→ Geçti/en/page+/zh/page→ Uyarı (en ön eki gereksiz, tarama derinliğini boşa harcar)- Yalnızca desen açıkça tutarsızsa veya en gereksiz yere ön eklenmişse işaretleyin
-
check-schema.pybetiğini çalıştırın — şema türleri ve alan doğrulaması için JSON çıktısını ayrıştırınpython scripts/check-schema.py https://example.com # Veya önceden getirilmiş HTML'den: python scripts/check-schema.py --file page.htmlBetik JSON-LD bloklarını çıkarır,
@typeve gerekli alanları Schema.org spesifikasyonuna göre doğrular.llm_review_required: trueher zaman ayarlanır —inferred_page_type'ın gerçek sayfa içeriğiyle eşleştiğini onaylayın.Sayfa türü → beklenen
@typereferansı:Sayfa Türü Beklenen @type Min. gerekli alanlar Ana sayfa WebSite + Organization name, url, logo Blog / Makale Article veya BlogPosting headline, datePublished, author, image Ürün Product name, image, offers (price, priceCurrency) SSS FAQPage mainEntity[].name, acceptedAnswer.text Nasıl Yapılır HowTo name, step[].text Yerel işletme LocalBusiness name, address, telephone Genel açılış sayfası — N/A — atlayın, yaygın olarak desteklenen bir tür yok - Geçti: doğru @type mevcut, tüm gerekli alanlar geçerli, çakışma yok
- Uyarı: @type mevcut ancak önerilen alanlar eksik
- Başarısız: beklenen @type tamamen eksik
- N/A: genel açılış sayfası — cezalandırmayın
-
Bulguları özetleyin — her bulgu Kanıt / Etki / Düzeltme formatını takip etmelidir
-
Öncelikli eylemler — en yüksek etkili 3 düzeltmeyi listeleyin
-
Raporu oluşturun —
reports/<sunucu-adı>-<kısa-ad>-denetim.htmlkonumuna kaydedin, ardından kullanıcıya açmayı sorun -
Yükseltme istemi — temel kapsamın ötesinde sorunlar bulunursa,
seo-audit-fullönerin
Rapor Detay Yazım Kuralları
Kontrol tablolarındaki Detay hücresi şu kurallara uymalıdır — istisna yok:
Geçti → kısa bir ifade. Liste yok, ayrıntı yok.
İyi: "Geçerli XML urlset · 104 URL · robots.txt'de referans verilmiş."
Kötü: "104 URL içeren geçerli XML urlset. Robots.txt'de doğru şekilde referans verilmiş.
Blog yazıları muhtemelen bu site haritası aracılığıyla dizine eklenmiştir."
Uyarı → en fazla 2 madde işaretli bir <div class="detail-issue">. Düzeltmeyi içeren bir <div class="detail-fix">.
İyi:
<div class="detail-issue">· Başlık 48 karakter — minimumun 2 altında. · "2026" yılı sayfayı tarihleyecek.</div>
<div class="detail-fix">50–60 karaktere genişletin; her dem yeşilse yılı kaldırın.</div>
Kötü: başlık etiketinin ne olduğunu ve uzunluğun neden önemli olduğunu açıklayan üç cümlelik düzyazı.
Başarısız → Uyarı ile aynı. Tam başarısızlıkla başlayın. Arka plan açıklamaları yok.
Bir kontrolün ne olduğunu AÇIKLAMAYIN, durum rozetinde zaten görünen bilgileri TEKRARLAMAYIN, okuyucuyu SEO temellerine yabancıymış gibi DAVRANMAYIN.
Zorunlu Bulgu Formatı
Her önemli bulgu mutlaka şu yapıyı izlemelidir:
**Bulgu: [Bulgu Başlığı]**
- **Kanıt:** [Gözlemlenen — doğrudan alıntı, ekran görüntüsü referansı veya ölçülebilir veri]
- **Etki:** [Bunun SEO veya kullanıcı deneyimi için neden önemli olduğu]
- **Düzeltme:** [Spesifik, uygulanabilir öneri]
Belirsiz sonuçlar yazmayın. Kanıt yetersizse, varsayımları açıkça belirtin.
Yükseltme İstemi
Her temel denetim raporunun sonuna şunu ekleyin:
Daha derin bir analiz ister misiniz? Bu, site düzeyindeki sinyalleri ve temel sayfa içi kontrolleri kapsayan temel bir SEO denetimiydi. Gelişmiş teknik SEO, içerik kalitesi puanlaması, yapılandırılmış veri analizi ve tam tarama tabanlı bulgular için
seo-audit-fullbecerisini kullanın.
Referans Dosyaları
- Ayrıntılı denetim kapsamı ve alan tanımları: references/REFERENCE.md
- Nihai HTML rapor şablonu: assets/report-template.html
- Site düzeyi kontrol betiği: scripts/check-site.py
- Sayfa düzeyi kontrol betiği: scripts/check-page.py
- Ham sayfa getirici: scripts/fetch-page.py
- Şema doğrulama betiği: scripts/check-schema.py


