feat: Site audit and Crawls screens with their MCP tools

- golem15.seo.issues (Site audit): current issues errors first, labels,
  summary and fix columns, filters, P7 issue_details, Check this address
  again, Ignore, Stop ignoring, bulk Ignore, ignored rows badged
- golem15.seo.crawls (Crawls): newest first, P6 crawl_summary with one
  status callout, staging and rendered-comparison lines, stats strip and
  per-kind table; Cancel; a running crawl refuses delete
- Start crawl toolbar action on both, refusing already_running and
  no_site_url; navigation Site audit (gauge) and Crawls (globe)
- routes and MCP tools start/cancel/list/get/delete crawls, list_issues
  with filters (open by default), recheck_url, ignore and unignore
- AdminOperations maps both controllers; toolbar actions get their own
  operation kind
- TestCrawlAdmin, TestCrawlTools, TestIssueKindLabels
This commit is contained in:
Jakub Zych
2026-11-04 15:34:22 +01:00
parent edc03cae4b
commit c4f0b4f94c
32 changed files with 2778 additions and 20 deletions

View File

@@ -2,6 +2,8 @@ plugin:
name: SEO
description: Metadane dla wyszukiwarek we wszystkich typach treści, reguły adresów i globalne ustawienia SEO.
nav:
audit: "Audyt witryny"
crawls: "Skanowania"
pages: Strony
robots: robots.txt
notfound: Dziennik 404
@@ -536,10 +538,154 @@ schema:
currency_invalid: "Użyj trzyliterowego kodu waluty, np. PLN."
merged: "Zapisano. Twój JSON-LD zastępuje :props w wygenerowanym węźle :node."
crawls:
start: "Uruchom skanowanie"
list_title: "Skanowania"
name: "Skanowanie"
started_at: "Rozpoczęto"
finished_at: "Zakończono"
status: "Stan"
pages: "Strony"
issues: "Problemy"
trigger: "Uruchomienie"
duration: "Czas trwania"
site: "Adres witryny"
st_queued: "W kolejce"
st_running: "W toku"
st_finished: "Zakończone"
st_failed: "Nieudane"
st_cancelled: "Anulowane"
pages_limit: ":count (osiągnięto limit)"
by_admin: "Ręcznie: :name"
by_schedule: "Harmonogram"
by_mcp: "MCP: :client"
trigger_admin: "Ręcznie"
trigger_schedule: "Harmonogram"
trigger_mcp: "MCP"
preview_title: "Skanowanie"
preview: "Skanowanie :url"
running_title: "W toku"
running_text: "Dotąd pobrano stron: :done, najwyżej :limit. Odśwież stronę, aby zobaczyć postęp."
queued_text: "Czeka na wolny proces. Rozpocznie się w ciągu minuty."
failed_title: "Skanowanie nie powiodło się"
failed_text: ":error. Strony pobrane przed błędem i ich problemy zostają zachowane."
cancelled_text: "Anulowane przez: :name, :time."
limit_text: "Skanowanie zatrzymało się na limicie :limit stron. Zwiększ limit w Ustawieniach SEO › Audyt witryny, aby przeskanować całą witrynę."
staging_text: "W tym środowisku każda strona ma noindex z blokady nieprodukcyjnej; skanowanie tego nie zgłasza."
render_skipped: "Porównanie ze stronami wyrenderowanymi przez JavaScript pominięto: nie skonfigurowano ścieżki do Chrome (golem15.seo.crawl_chrome_path). Sprawdzenia surowego HTML zostały wykonane."
render_done:
one: "Porównano :count stronę z wersją wyrenderowaną przez JavaScript."
few: "Porównano :count strony z wersją wyrenderowaną przez JavaScript."
many: "Porównano :count stron z wersją wyrenderowaną przez JavaScript."
other: "Porównano :count strony z wersją wyrenderowaną przez JavaScript."
render_failed: "Porównanie ze stronami wyrenderowanymi przez JavaScript zostało przerwane: :error. Sprawdzenia surowego HTML zostały wykonane."
stat_pages: "Pobrane strony"
stat_errors: "Błędy"
stat_warnings: "Ostrzeżenia"
stat_notices: "Uwagi"
stat_duration: "Czas trwania"
kinds_problem: "Problem"
kinds_severity: "Waga"
kinds_count: "Adresy"
no_issues: "To skanowanie nie wykryło problemów."
cancel: "Anuluj skanowanie"
cancel_confirm: "Anulować to skanowanie? Pobrane dotąd strony i ich problemy zostaną zachowane."
cancelled: "Anulowano skanowanie."
delete_selected_confirm:
one: "Usunąć :count skanowanie? Jego strony i problemy zostaną usunięte."
few: "Usunąć :count skanowania? Ich strony i problemy zostaną usunięte."
many: "Usunąć :count skanowań? Ich strony i problemy zostaną usunięte."
other: "Usunąć :count skanowania? Ich strony i problemy zostaną usunięte."
delete_running: "Nie można usunąć trwającego skanowania. Najpierw je anuluj."
list_empty: "Nie było jeszcze skanowań. Skanowanie pobiera witrynę jak wyszukiwarka i wypisuje znalezione problemy w SEO › Audyt witryny."
started: Rozpoczęto skanowanie. Postęp znajdziesz w SEO › Skanowania; problemy pojawią się w Audycie witryny po jego zakończeniu.
already_running: Skanowanie już trwa (rozpoczęte :time). Poczekaj na nie lub anuluj je w SEO › Skanowania.
no_site_url: Adres witryny do skanowania nie jest skonfigurowany (golem15.seo.site_url). Poproś administratora o jego ustawienie.
issues:
list_title: "Audyt witryny"
name: "Problem"
severity: "Waga"
kind: "Problem"
kind_code: "Kod problemu"
url: "Adres"
summary: "Szczegóły"
source: "Wykryte przez"
fix: "Naprawa"
found: "Wykryto"
locale: "Język"
sev_error: "Błąd"
sev_warning: "Ostrzeżenie"
sev_notice: "Uwaga"
source_crawl: "Skanowanie"
source_cms: "Kontrola danych CMS"
fix_tool: "MCP: :tool"
fix_code: "Szablony witryny (kod)"
state_ignored: "Zignorowany"
filter_severity: "Waga"
filter_kind: "Problem"
filter_source: "Wykryte przez"
filter_fix: "Naprawa"
filter_status: "Stan"
filter_fix_tool: "Do naprawy przez MCP"
filter_fix_code: "Wymaga zmiany w kodzie"
status_open: "Otwarte"
status_ignored: "Zignorowane"
preview: "Szczegóły problemu"
found_heading: "Co znaleziono"
fix_heading: "Jak naprawić"
fix_tool_text: "Poproś klienta MCP o naprawę narzędziem „:tool” lub zmień to w panelu: :where."
fix_code_text: "To wynika z szablonów witryny, a nie z danych CMS. Poproś dewelopera witryny o zmianę: :what."
open_page: "Otwórz stronę"
rich_results: "Sprawdź w Teście wyników z elementami rozszerzonymi Google"
linked_from: "Linkowane z"
orphan_suggestions: "Strony, które mogą tu linkować"
orphan_suggestions_page: "Strona"
orphan_suggestions_phrase: "Wspólna fraza"
orphan_none: "Brak propozycji: żadna inna strona nie wspomina tytułu ani frazy kluczowej tej strony."
and_more: "i :count więcej"
recheck: "Sprawdź ten adres ponownie"
recheck_confirm: "Pobrać teraz ponownie „:url” i zaktualizować jego problemy?"
rechecked:
one: "Sprawdzono ponownie: dla tego adresu został :count problem."
few: "Sprawdzono ponownie: dla tego adresu zostały :count problemy."
many: "Sprawdzono ponownie: dla tego adresu zostało :count problemów."
other: "Sprawdzono ponownie: dla tego adresu zostało :count problemu."
recheck_fixed: "Sprawdzono ponownie: dla tego adresu nie ma już problemów."
ignore: "Ignoruj problem"
ignore_confirm: "Zignorować ten problem? Pozostanie ukryty w kolejnych skanowaniach, dopóki nie przestaniesz go ignorować."
ignore_selected: "Ignoruj problemy"
ignore_selected_confirm:
one: "Zignorować :count problem? Pozostanie ukryty w kolejnych skanowaniach."
few: "Zignorować :count problemy? Pozostaną ukryte w kolejnych skanowaniach."
many: "Zignorować :count problemów? Pozostaną ukryte w kolejnych skanowaniach."
other: "Zignorować :count problemu? Pozostaną ukryte w kolejnych skanowaniach."
ignored:
one: "Zignorowano :count problem."
few: "Zignorowano :count problemy."
many: "Zignorowano :count problemów."
other: "Zignorowano :count problemu."
unignore: "Przestań ignorować"
unignore_confirm: "Ponownie pokazywać ten problem w audycie?"
unignored:
one: "Ponownie pokazywany jest :count problem."
few: "Ponownie pokazywane są :count problemy."
many: "Ponownie pokazywanych jest :count problemów."
other: "Ponownie pokazywane jest :count problemu."
list_empty: "Brak problemów. Tutaj pojawiają się problemy z ostatniego skanowania i z kontroli danych CMS. Uruchom skanowanie, aby ponownie sprawdzić witrynę."
detail_h1: "Nagłówki H1"
detail_skips: "Pominięte poziomy"
detail_missing: "Brakujące właściwości"
detail_error: "Błąd"
detail_anchors: "Linki"
detail_alternates: "Wersje językowe"
detail_images: "Obrazy"
detail_target: "Cel"
detail_what: "Brakuje lub do zmiany"
where_record: "zakładka SEO strony"
where_robots: "SEO › robots.txt"
where_settings: "Ustawienia SEO"
where_redirects: "SEO › Przekierowania"
where_pages: "SEO › Strony"
where_rules: "SEO › Reguły adresów"
kind_orphan_page: "Strona osierocona (brak linków wewnętrznych)"
sum_orphan_page: "Propozycje: :count"
kind_h1_in_content: "H1 w treści"