Plan 2026: report card domeny na stronie host

2026-07-06 · updated 2026-09-05

Widok hosta (/hosts/:hostname) pokazuje dziś mniej użytecznych informacji, niż pozwala baza — kod już zawiera dane, których nie renderujemy: dns.*/tls.* na hoście, historię errors, protocol, cf_block, quality_score, content_length + text_len (baza pod complexity i carbon), health.

Cel: przekształcić stronę domeny w publiczny report card — Błędy / Security / Tekst-SEO / Complexity / Carbon z ocenami A–E i listą rekomendacji. Właściciel strony ma z jednego widoku dowiedzieć się, co poprawić. To realizuje kierunki z Co jeszcze możemy wdrożyć (internet health observatory, crawl cost accounting, oszczędzanie energii) oraz SEO na podstawie crawlingu.

Value / Effort

#UsprawnienieValueEffortNowe dane?
1Panel Security (DNS/TLS z targetu)wysoki — parytet z widokiem targetsniski — reużycie partialanie
2Panel Błędy (kolekcja errors + last_error)wysoki — diagnoza "czemu nie działa"niskinie
3Panel Carbon z zapisanych danychśredni — mierzalna emisja bez live fetchniskinie
4Rekomendacje Tekst/SEO (regułowe)wysoki — akcjonowalne "co poprawić"średninie
5Complexity score v1średni — narzut markupu, redirecty, protokółniskinie
6Report card A–E (5 badge)wysoki — czytelne podsumowanieniskinie
7Rozszerzenie pól publicznychśredni — value dla nie-adminówminimalnynie
8Security headers przy crawluwysoki — HSTS/CSP/XFO dla całego korpusuśrednitak (re-crawl)
9Metryki SEO/complexity przy crawluśredni — jedna definicja metryk, trendyśrednitak (re-crawl)
10Carbon per crawl w crawlsśredni — koszt crawla per root domainniskitak
11Agregaty na dashboardzie (HTTPS/HSTS/h2/CO2e)wysoki — publiczne metryki stanu sieciśredninie (po 8–10)

Fazy i poprawki do wprowadzenia

Faza 1 — tylko UI, dane już w bazie

  1. Panel Security: kontroler domeny już wyszukuje target (MongoStore.find_by_url("targets", url) w _index_item.html.erb). Przekazać znaleziony dokument do collections/_next_security — partial jest generyczny (czyta doc["dns"], doc["tls"]), więc działa bez zmian.
  2. Panel Błędy: zapytanie do kolekcji errors po url/hostname (ostatnie N wpisów: reason, status, redirect_chain, created_at) + last_error/attempts z targetu; link do /errors?url=....
  3. Panel Carbon: liczyć z zapisanego content_length tym samym wzorem co UrlInspector#carbon_estimate — wydzielić do wspólnego helpera. Zaktualizować współczynniki do Sustainable Web Design v4 (0.81 kWh/GB to przestarzały model; v4 rozdziela datacenter / sieć / urządzenie i daje ~0.36 kWh/GB części sieciowej). Podawać zawsze basis, żeby liczby były porównywalne w czasie.
  4. Rekomendacje Tekst/SEO — czysta funkcja doc → [rekomendacje] na polach już zapisanych:
RegułaWarunekKomunikat
titlebrak / <15 / >65 znakówuzupełnij / wydłuż / skróć title
meta_descriptionbrak / <50 / >160kontrola snippetu w SERP
h1brakdodaj nagłówek H1
thin contenttext_len < 300 przy http_status = 200wzbogać treść albo noindex
canonicalbrak canonical_urlwskaż kanon (warianty www/apex)
redirects> 1spłaszcz łańcuch przekierowań
httpsfalsewymuś HTTPS
langbrakustaw <html lang> (baza pod hreflang)

Sekcja zastępuje statyczny akapit "Research analysis" (auto-generowany duplicate content — zgłoszony już w dokumencie SEO).

  1. Complexity score v1 z istniejących pól: stosunek text_len / content_length (narzut markupu), redirects, protocol (HTTP/1.1 vs h2/h3), latency_ms, cf_block.
  2. Report card: pasek 5 badge'ów A–E na górze strony (Errors / Security / SEO / Complexity / Carbon), każdy linkuje kotwicą do swojego panelu.
  3. Pola publiczne: dodać do PUBLIC_INDEX_FIELDS (application_helper.rb): quality_score, lang, canonical_url, indexed_at, protocol.

Faza 2 — crawler zapisuje nowe sygnały (wymaga re-crawla)

  1. Security headers: w crawler/parsing.py → build_item sub-dokument security z nagłówków odpowiedzi: hsts, csp, x_content_type_options, x_frame_options, referrer_policy, permissions_policy (bool/str, proste typy).
  2. SEO/complexity przy crawlu: h2_count, links_int/links_ext, images_missing_alt, json_ld_count, liczba i ciężar <script>/<style>. Przenieść definicje metryk z live-only UrlInspector#seo_data tak, aby crawl i live inspection liczyły to samo.
  3. Carbon per crawl: pole carbon_g na dokumencie + suma w crawls — punkt "mierzyć koszt crawla per root domain" z roadmapy. Optymalizacja

Faza 3 — obserwatorium 2026

  1. Dashboard agregaty: adopcja HTTPS / HSTS / h2+h3 / IPv6 per region i suffix, suma CO2e korpusu, mediana wagi strony — publiczne metryki "stanu internetu".
  2. AI-readiness: /llms.txt, polityka robots dla botów AI (punkt 1 roadmapy).
  3. Trendy: historia ocen domeny w czasie (po wdrożeniu statystyk okresowych).

Implementacja techniczna

Architektura (DDD)

# MongoDB update via Mongoid / Ruby driver
RootDomain.where(id: domain_id).to_adapter.update_attributes(
  '$push' => { 
    trends: { 
      '$each' => [{ date: '2026-07', scores: 'AABCE' }], 
      '$slice' => -12 # Keeps only the last 12 snapshots
    } 
  }
)

Czy progi ocen A–E dla wskaźnika Carbon powinny uwzględniać podział na strony mobilne i desktopowe, czy zachowujemy jeden globalny standard Sustainable Web Design v4?

Design widoku /hosts/:hostname

[ URL + linki targets/WWW ]
[ A  Security ][ B  SEO ][ C  Errors ][ B  Complexity ][ A  Carbon ]   <- report card, badge A–E
[ Content ]                       [ Rekomendacje (lista "co poprawić") ]
[ Technical ]                     [ Quality ]
[ Security: DNS | TLS ]           [ Errors: ostatnie wpisy + last_error ]
[ Complexity: ratio, protokół ]   [ Carbon: bytes, kWh, gCO2e, basis ]
[ Admin / Live URL inspection ]   <- bez zmian, tylko admin

Ocena A–E (progi startowe)

SekcjaAE
Errorsbrak wpisów, attempts = 0powtarzalne błędy DNS/TLS/HTTP
SecurityTLS 1.3 + poprawny DNS (+ w F2: HSTS i CSP)błąd TLS albo martwy DNS
SEO0 rekomendacji≥4 rekomendacje albo brak title
Complexityratio > 0.25, h2/h3, 0 redirectówratio < 0.05 albo >2 redirecty
Carbon< 0.2 g CO2e / widok> 1.0 g CO2e / widok

Progi trzymane w jednym miejscu (DomainReportCard), do kalibracji po pierwszych agregatach.

Kolejność wdrożenia

  1. Faza 1 w całości (punkty 1–7) — sam UI, efekt natychmiastowy dla całego korpusu.
  2. Punkty 8–10 + re-crawl próbki, kalibracja progów.
  3. Faza 3 po zebraniu danych z fazy 2.

Powiązane: Co jeszcze możemy wdrożyć · SEO na podstawie crawlingu