Descrizione
Audit link su pagina HTML — classifica ogni link in internal (same-origin) / external (cross-domain) / anchor (#frag) / mailto: / tel: / javascript: / data: con dedup canonical URL. Opzionalmente esegue HEAD probe parallelo per identificare link rotti (status >= 400 / DNS fail / timeout / TLS error) con severity classification (404 critical / 5xx warning / 3xx info). Differenza con i sibling: action_link_audit = inventory + probe link su pagina (HTML in → links classified + broken list). Per scoring SEO complessivo che incorpora link health usa action_seo_audit (link ratio nei criteri). Per redirect chain audit del singolo link (multi-hop) usa action_redirect_chain. Per estrazione plain text dei link senza probe usa action_html_select. Probing intelligente: HEAD-first (zero bytes downloaded), fallback automatico a GET no-body se il server rifiuta lo HEAD. Concorrenza bounded (default 5, max 20) per non DoS-are il server target. Cap link probati 200 default (config fino a 1000): i primi N link unici in ordine di pagina (campionamento deterministico). Classification SEO-relevant: rel="nofollow" / "sponsored" / "ugc" rilevati per ogni link (Google li tratta diversamente per il link-juice). target="_blank" SENZA rel="noopener"/"noreferrer" → flag tabnabbingRisk (reverse tabnabbing, CWE-1022). Broken links classificati per severity (404/410 critical, 5xx/4xx warning, 3xx info). scope: internal / external / anchor / mailto / tel / data / unknown. Output: `{ summary: { total, internal, external, nofollow, sponsored, ugc, broken, tabnabbingRisks }, byScope, links: [{ href, text, rel, scope, nofollow, sponsored, ugc, targetBlank, noopener, tabnabbingRisk, status?, ok?, severity?, durationMs? }], broken: [...], tabnabbingRisks: [...], redirects: [...], totalLinks, uniqueLinks, checked, skipped }`. broken/tabnabbingRisks pronti per un email digest al content manager. Use case Cappella-Sistina-grade: (1) **audit settimanale broken links** su sito aziendale 100 pagine — cron loop fetch + link_audit con probe → aggregate broken list → email content team con responsabilita\` per fix; (2) **post-migrazione check** — confronto link inventory pre vs post migration, alert su link che hanno cambiato URL senza redirect; (3) **monitor affiliate/sponsored link** — il partner advertiser cambia URL senza notifica, detect 404 → revenue impact; (4) **rel="noopener" security audit** — target="_blank" senza noopener = XS-Leaks vulnerability, fix automatico in CMS via webhook. Safety budget: SSRF guard, concorrenza max 20, timeout 8s per probe, hard cap 200 link probati (config 1000), audit log con linksTotal + broken count per detect site degradation trends.
