İçeriğe geç

Tarama sorunları: sorun kodu kaydı

Pro taramasının bildirdiği her sorun, tek bir kayıt olan Rankbeam\Seo\Pro\Scanning\IssueRegistry içinden alınan sabit sorun kodudur. Tarayıcılar işlem sırasında kod uydurmaz; her sorunu IssueRegistry::make() üzerinden oluşturur. Bu işlem önem derecesini ve alanı kayıttan atar, tanımlı olmayan her kodu reddeder. Böylece aşağıdaki katalog, üzerine sistem kurabileceğiniz bir sözleşmedir: panolar, dışa aktarımlar ve Pro puanı mesajları ayrıştırmak yerine kodları okur. Ücretsiz seo:audit, daha dar kapsamlı ve bazı hreflang kodları farklı olan kendi core meta veri kaydını kullanır.

Her kod şunları taşır:

  • id: seo_scan_issues.issue_type olarak saklanan sabit dize.
  • severity: critical, warning veya notice; kod başına sabittir. Önem derecesini değiştirmek yerine kodu ayırırız.
  • field: ilgili seo_meta alanı veya sayfa düzeyindeki bulgular için page.
  • execution class: bunu tespit etmek için tüketicinin neye ihtiyaç duyduğu; aşağıda açıklanır.
  • evidence: sorunun context dizisinin taşıdığı anahtarlar.

Yürütme sınıfları

Her kontrol, çalışmak için ihtiyaç duyduğu şeye göre tam olarak üç sınıftan birine girer:

SınıfGerekenlerÇalıştırabilen
metadatamodel ve core çözümleyicisi; sayfa getirilmezmodel taraması (PageScanner); ücretsiz seo:audit, meta veri kontrollerinin bir alt kümesini kapsar
renderedsayfanın sunulan HTML'si; süreç içi kernel isteği veya dışarıdan getirmeURL taraması (UrlScanner)
networkayrı bir hedefi (başka yere işaret eden kanonik URL) doğrulamak için dışarıya istekURL taraması, her zaman SsrfGuard üzerinden

Ücretsiz süreç içi denetimin tam Pro taramasına eşit olamamasının nedeni budur. Sayfa oluşturmadan yalnızca metadata kodları hesaplanabilir; oluşturulmuş HTML'yi getirip kanonik hedefleri ağ üzerinden doğrulayan yalnızca Pro hattıdır. Kaydı sınıfa göre IssueRegistry::byClass(IssueRegistry::EXEC_METADATA) ile filtreleyin.

Meta veri kodları

Model ve çözümleyiciden PageScanner tarafından tespit edilir. missing_title, missing_description ve uzunluk kodları, sunulan <head> değerini ölçen oluşturulmuş URL taraması tarafından da üretilir; kodlar ve anlamları aynıdır.

KodÖnem derecesiAlanKanıtAnlamı
missing_titlecriticaltitleBaşlık ve hesaplanabilir yedek değer yok.
missing_descriptionwarningdescriptionMeta açıklama ve hesaplanabilir yedek değer yok.
missing_og_imagenoticeog_imageOpen Graph görseli ve hesaplanabilir yedek değer yok.
missing_focus_keywordnoticefocus_keywordsOdak anahtar kelime atanmamış.
duplicate_titlewarningtitletitle, duplicate_urlsBaşlık aynı yerel ayardaki başka sayfalarda da kullanılıyor.
duplicate_descriptionwarningdescriptiondescription, duplicate_urlsAçıklama aynı yerel ayardaki başka sayfalarda da kullanılıyor.
title_too_longwarningtitlelength, max, scriptÇözümlenen başlık, yazı sistemi için önerilen uzunluğu aşıyor (Latin için 60, CJK için ~30).
title_too_shortnoticetitlelength, min, scriptÇözümlenen başlık, yazı sisteminin alt sınırının altında (Latin için 30, CJK için ~15).
description_too_longwarningdescriptionlength, max, scriptÇözümlenen açıklama, yazı sistemi için önerilen uzunluğu aşıyor (160 / ~80).
description_too_shortnoticedescriptionlength, min, scriptÇözümlenen açıklama, yazı sisteminin alt sınırının altında (70 / ~35).
robots_conflict_indexingcriticalrobotsrobotsRobots yönergesi hem index hem noindex içeriyor.
robots_conflict_followingwarningrobotsrobotsRobots yönergesi hem follow hem nofollow içeriyor.
noindex_warningwarningrobotsrobots, canonical, page_url, shipping_signalKendine işaret eden kanonik URL'ye sahip sayfa noindex durumunda. İncelenecek sezgisel bulgudur; sayfanın dizine eklenmesi gerektiğinin kanıtı değildir. Hem model hem oluşturulmuş URL taramasında üretilir.
invalid_canonicalcriticalcanonicalcanonicalKanonik değer geçerli URL değil.
cross_domain_canonicalwarningcanonicalcanonical, page_urlKanonik URL, sayfadan farklı sunucuya işaret ediyor.
shared_canonicalnoticecanonicalcanonicalBirkaç sayfa aynı kanonik URL'yi bildiriyor.
insecure_canonicalwarningcanonicalcanonicalhttps sitesinde http:// kanonik URL.
hreflang_invalid_codewarningalternatesinvalid_codesHreflang alternatifi, x-default veya geçerli BCP-47 dil kodu olmayan değer kullanıyor.
hreflang_missing_self_referencewarningalternateslocale, page_urlAlternatifler bildirilmiş ancak hiçbiri sayfanın kendi yerel ayarına işaret etmiyor; kendine referans veren hreflang eksik.
hreflang_duplicate_codewarningalternatesduplicate_codesAynı hreflang kodu birden fazla URL'ye eşlenmiş; küme belirsiz.
hreflang_missing_x_defaultnoticealternateslanguagesÇok dilli hreflang kümesinde x-default yedek hedefi yok.
aeo_missing_authornoticeschemaSayfanın yapılandırılmış verisindeki yazıda yazar varlığı yok; yazarlık / köken şemada açıkça belirtilmemiş.
aeo_article_missing_datenoticeschemaSayfanın yapılandırılmış verisindeki yazıda yayın/değişiklik tarihi yok; yazının zaman çizelgesi şemada açıkça belirtilmemiş.

Uzunluk eşikleri, core'un yazı sistemine duyarlı uzunluk politikasından gelir (Pro 2.33): Latin için 60/160, CJK için ~30/80. Grafem sayılır; böylece tarama düzenleyicinin karakter sayaçlarıyla çelişmez. Alt sınırlar (Latin için başlık 30, açıklama 70; CJK için yaklaşık yarısı), taramanın yetersiz optimizasyon eşiğidir. script bağlam anahtarı uygulanan grubu belirtir. Uzunluk, çözümlenen başlık/açıklamaya göre ölçülür: yedek değerler ve başlık son eki dahil gerçekten oluşturulan değer.

hreflang_* kodları, çözümleyicinin alternates alanından okunan, sayfanın bildirdiği hreflang alternatiflerini doğrular: geçersiz/yinelenen kodlar, eksik kendine referans ve çok dilli kümede eksik x-default. Yalnızca sayfa alternatifler bildiriyorsa çalışırlar. Sayfalar arası karşılıklılık (“geri dönüş etiketleri”) bu meta veri kontrollerinde incelenmez; aşağıdaki isteğe bağlı ağ kontrolü diğer sayfayı getirir.

aeo_* kodları yanıt hazırlığı (AEO) sinyalleridir: sayfanın yazı içeriği yapılandırılmış verisinde anlaşılabilir mi? Çözümlenen JSON-LD grafını okur ve yalnızca author varlığı (açık yazarlık / köken) veya datePublished / dateModified (açık zaman çizelgesi) eksik yazı türünde yapılandırılmış veri (Article, BlogPosting, NewsArticle, …) bildirildiğinde tetiklenir. Yazı içermeyen sayfa asla işaretlenmez. Varsayılan olarak açık seo-pro.scan.checks.aeo seçeneğine bağlıdır ve ücretsiz seo:audit ile aynı davranışı gösterir.

missing_focus_keyword koşula bağlıdır

Odak anahtar kelime bildirimi yalnızca core odak anahtar kelime iş akışı açıkken tetiklenir (seo.keywords.enabled, varsayılan false). Kapalıyken tarama, odak anahtar kelimesi olmayan sayfayı işaretlemez. Ücretsiz seo:audit komutu ve Filament düzenleyicisi aynı core seçeneğini okur; tarama, denetim ve düzenleyici hatırlatması daima uyumludur. Yalnızca tek bir etkinleştirme koşulu vardır.

Oluşturulmuş HTML kodları

UrlScanner tarafından sunulan HTML'den tespit edilir. Aynı sunucudaki hedeflerde süreç içi kernel isteği kullanılır (dış trafik yok); dış hedeflerde korumalı getirme yapılır.

KodÖnem derecesiAlanKanıtAnlamı
http_errorcriticalpagestatusURL, 4xx/5xx durumuyla yanıt verdi.
empty_responsecriticalpageURL boş gövde döndürdü.
missing_canonicalnoticecanonicalOluşturulan head içinde <link rel="canonical"> yok.
noindex_pagenoticerobotsrobotsOluşturulmuş sayfa noindex durumunda (bilgi amaçlı). Aynı zamanda kendine işaret eden kanonik URL kullanan noindex sayfa, bunun yerine puanlanan noindex_warning durumuna yükseltilir.
missing_h1noticepage<h1> başlığı yok.
multiple_h1noticepagecountBirden fazla <h1> var (bilgi amaçlı).
missing_image_altwarningpagecount, total, sampleİçerik görsellerinde alt özniteliği eksik. Açıkça belirtilen alt="" dekoratif sayılır ve işaretlenmez.
thin_contentnoticepageword_count, threshold, segmenterGövde metni yapılandırılmış sözcük sayısının altında. Sözcükler kontrol listesi sözcük ayırıcısıyla sayılır: boşluklu yazı sistemlerinde boşluklar, Çince, Japonca ve Taycada ICU sözlük bölümlemesi (segmenter: intl; ext-intl gerekir). Böylece 400 sözcüklük Japonca yazı tek “sözcük” sayılmaz.
mixed_contentwarningpagecount, samplehttps sayfasında http:// alt kaynakları.
html_lang_missingnoticepage<html lang> yok veya boş. Yardımcı teknoloji uygun olmayan ses seçebilir.
html_lang_invalidnoticepagedeclaredlang değeri BCP-47 etiketi değil (english, alt çizgili en_US, jp).
html_lang_mismatchwarningpagedeclared, declared_script, detected_scriptGörünür gövde metni, bildirilen dilin kullanmadığı yazı sisteminde: Japonca sayfada lang="en", Latin metinde lang="ru". Yalnızca yazı sistemi düzeyindedir; Latin metnin yanlış Latin dilini bildirmesi tahmin gerektirir ve tarama tahmin etmez. Gövde metninde en az 40 harf gerekir.

Ağ kodları

UrlScanner tarafından yalnızca ilgili isteğe bağlı seçenek açıkken tespit edilir: kanonik hedef için seo-pro.scan.url_checks.check_canonical_target, hreflang alternatifleri için check_hreflang_reciprocity. Her hedef SsrfGuard üzerinden getirilir: şema izin listesi, sunucu kapsamı, özel IP reddi, yönlendirme/zaman/boyut bütçeleri. Yönlendirmeler izlenmez; böylece yönlendiren kanonik URL görünür olur. Kendine işaret eden kanonik veya alternatif atlanır; sayfanın kendisi zaten az önce getirilmiştir.

KodÖnem derecesiAlanKanıtAnlamı
blocked_urlnoticepagereasonHedef, HTTP başlamadan önce SsrfGuard tarafından reddedildi.
canonical_target_brokencriticalcanonicalcanonical, statusKanonik URL, HTTP hatası döndüren sayfaya işaret ediyor.
canonical_target_redirectwarningcanonicalcanonical, status, locationKanonik URL yönlendiren sayfaya işaret ediyor; son URL'yi kullanın.
canonical_target_noindexwarningcanonicalcanonicalKanonik URL, kendisi de noindex olan sayfaya işaret ediyor.
canonical_target_blockednoticecanonicalcanonical, reasonKanonik hedef doğrulanamadı (koruma reddi / çözümlenememe).
hreflang_not_reciprocalwarningalternateshreflang, href, statusSayfanın bildirdiği alternatif, bu sayfayı geri bildirmiyor. Hreflang çifti yok sayılabilir; bu durum tek başına çeviriyi dizine eklenemez yapmaz.
hreflang_target_unverifiednoticealternateshreflang, href, reasonAlternatif getirilemedi (koruma reddi, hata durumu, yönlendirme, boyut sınırı aşımı); karşılıklılık hiç kontrol edilmedi. Kusur değil, kanıt yokluğudur.

Karşılıklılık kontrolü, sayfa başına en fazla hreflang_max_alternates (varsayılan 10) hedef getirir; x-default dahildir, yinelenenler ve sayfanın kendisi atlanır. Yukarıdaki model düzeyindeki hreflang_* meta veri kodları bildirilen listeyi doğrular; diğer sayfaya ihtiyaç duyan kontrol bu taramadır.

Buradaki her ağ yolu ortak SsrfGuard kullanır. Tehdit modeli ve kalan TOCTOU riski notu için SECURITY.md dosyasına bakın.

Kodlar puanı nasıl etkiler

Pro SEO puanı, 100 − toplam kesinti hesabıyla bulunur; puanlanan her sorun için yukarıdaki önem derecesine göre ağırlıklandırılmış sabit bir kesinti uygulanır. Çoğu kod hesaba katılır; bazıları bilinçli olarak dışarıdadır: missing_focus_keyword (tavsiye), noindex_page ve multiple_h1 (bilgi), blocked_url / canonical_target_blocked / hreflang_target_unverified (“kontrol edemedik” bir kusur değildir), ayrıca hreflang_*, html_lang_* ve aeo_* kodları (şimdilik puanın dışında tutulan tavsiye sinyalleri). Puanlama sayfası, tam izin listesini ve her kodun kesintisini içerir.

Sorun yaşam döngüsü

Sorun, yalnızca problem varken bulunan bir satır değildir; yaşam döngüsü vardır. Tarama hedefin sorunlarını silip yeniden oluşturmak yerine uzlaştırır. Her sorunun sabit kimliği, hedef (model için scannable_type + scannable_id veya rota/site haritası hedefi için url) ile issue_type birleşimidir. Her kod, tarama başına hedef başına en fazla bir kez üretilir. “N sorunlu öğe” kodları (missing_image_alt, mixed_content, hreflang_*, …) örneklerini count / sample içeren tek satırda birleştirir; kimlik bu nedenle benzersizdir.

Her taramada, her hedef için:

  • Mevcut satırı olmayan bulgu open olarak oluşturulur ve detected_at damgalanır;
  • Mevcut açık satırla eşleşen bulgunun kanıtı yenilenir, ilk detected_at değeri korunur; her taramada sıfırlanmayan sabit ilk görülme zamanıdır;
  • tamamlanan kontrolün artık bulmadığı açık sorun fixed işaretlenir (resolved_at damgalanır); satır silinmez, korunur, böylece gerçek düzeltme kaydedilir;
  • geri dönen bir fixed sorunu yerinde yeniden açılır (gerileme) ve detected_at yeniden damgalanır;
  • kullanıcının panoda ignored işaretlediği soruna dokunulmaz.
DurumAnlamıAyarlayan
openŞu anda mevcut.tarama (yeni veya hâlâ bulunan)
fixedÖnceden vardı, artık bulunmuyor.tarama (otomatik), tekrar bulunmadığı sonraki çalıştırmada
ignoredKullanıcı tarafından susturuldu; açık sayılarından ve puandan çıkarılır.panodaki Yoksay eylemi

Düzeltmeler artık atılmayıp kaydedildiğinden, markalı rapor raporlar arası anlık görüntü farkı yerine dönem boyunca gerçek düzeltilen / yeni sayılarını gösterebilir. Açık sayısını kullanan pano, seo-pro:scan-status komutu ve puan, yalnızca open durumunu filtreler; saklanan fixed satırları bunları asla şişirmez. Düzeltilen satırlar, onları çözen çalıştırmaya bağlanır ve normal tarama çalıştırması saklama süresiyle temizlenir.

Yapılandırma

php
// config/seo-pro.php → 'scan'
'url_checks' => [
    'enabled' => true,
    'crawl_external' => false,             // fetch external URL targets (guarded)
    'check_canonical_target' => false,     // EXEC_NETWORK canonical validation (guarded)
    'check_hreflang_reciprocity' => false, // EXEC_NETWORK hreflang link-back crawl (guarded)
    'hreflang_max_alternates' => 10,       // targets fetched per page by that crawl
],
'checks' => [
    'length' => true,            // title/description length (metadata + rendered)
    'rendered_content' => true,  // H1 / alt / thin content / mixed content / html lang
],
'content' => [
    'min_word_count' => 200,     // thin_content threshold
    'evidence_sample' => 5,      // max example URLs stored per issue
],

Korumalı isteklerin yanıt boyutu bütçesi seo-pro.http.max_response_bytes değeridir (varsayılan 2 MB); aynı sunucudaki süreç içi tarama sınırlanmaz.

Uyumluluk notu (sorun kodu değişikliği)

Önceki tek robots_conflict kodu iki önem derecesi taşıyordu; her kodun tam bir önem derecesine eşlenmesi için ayrıldı:

Eski kodYeni kodÖnem derecesi
robots_conflict (index + noindex)robots_conflict_indexingcritical
robots_conflict (follow + nofollow)robots_conflict_followingwarning

robots_conflict saklıyor veya buna göre filtreliyorsanız iki yeni kodu kullanacak şekilde güncelleyin.

rankbeam/laravel-seo MIT lisansı altında dağıtılır.