Files
portifolio-evandrodevbr/scripts/seo-compare.mjs
Evandro Fonseca JuniorandClaude Sonnet 5.5 7c03dece9b chore(seo): auditor repetivel de SEO/AEO/GEO (scripts/seo-audit.mjs e seo-compare.mjs)
Le o sitemap, baixa cada URL como um robo (HTML sem JS) e confere titulo, descricao, canonical, Open Graph, JSON-LD, titulos de secao, resposta direta cedo, acesso de robos de busca e de IA e links internos. Gera JSON para comparar antes e depois.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-05 00:02:35 -03:00

36 lines
1.6 KiB
JavaScript

#!/usr/bin/env node
/** Compara duas execuções de scripts/seo-audit.mjs: node scripts/seo-compare.mjs antes.json depois.json */
import { readFileSync } from "node:fs";
const [beforePath, afterPath] = process.argv.slice(2);
if (!beforePath || !afterPath) {
console.error("uso: node scripts/seo-compare.mjs antes.json depois.json");
process.exit(1);
}
const before = JSON.parse(readFileSync(beforePath, "utf8"));
const after = JSON.parse(readFileSync(afterPath, "utf8"));
const key = (c) => `${c.scope}::${c.id}`;
const prev = new Map(before.checks.map((c) => [key(c), c]));
const next = new Map(after.checks.map((c) => [key(c), c]));
console.log(`\nAntes: ${before.base} (${before.urls} URLs) Depois: ${after.base} (${after.urls} URLs)\n`);
console.log("grupo antes depois");
for (const g of new Set([...Object.keys(before.groups), ...Object.keys(after.groups)])) {
const a = before.groups[g] ?? { ok: 0, total: 0 };
const b = after.groups[g] ?? { ok: 0, total: 0 };
console.log(`${g.padEnd(20)} ${`${a.ok}/${a.total}`.padEnd(9)} ${b.ok}/${b.total}`);
}
const fixed = [];
const regressed = [];
for (const [k, c] of next) {
const p = prev.get(k);
if (p && !p.ok && c.ok) fixed.push(c);
if (p && p.ok && !c.ok) regressed.push(c);
if (!p && !c.ok) regressed.push({ ...c, detail: `novo e falhando: ${c.detail}` });
}
console.log(`\nCorrigidos (${fixed.length}):`);
for (const c of fixed) console.log(` + ${c.scope} ${c.id}`);
console.log(`\nPiorou (${regressed.length}):`);
for (const c of regressed) console.log(` - ${c.scope} ${c.id} ${c.detail ?? ""}`);
process.exit(regressed.length ? 2 : 0);