Files
novalon-website/scripts/seo-check.js
T
2026-03-06 10:04:06 +08:00

62 lines
2.1 KiB
JavaScript

const { SEOValidator } = require('./utils/seo-validator');
const fs = require('fs');
const PAGES = [
{ name: '首页', url: 'http://localhost:3000' },
{ name: '关于我们', url: 'http://localhost:3000/about' },
{ name: '联系我们', url: 'http://localhost:3000/contact' },
{ name: '服务', url: 'http://localhost:3000/services' },
{ name: '产品', url: 'http://localhost:3000/products' },
{ name: '案例', url: 'http://localhost:3000/cases' },
{ name: '新闻', url: 'http://localhost:3000/news' }
];
async function checkAllPages() {
console.log('🔍 开始SEO检查...\n');
const validator = new SEOValidator();
for (const page of PAGES) {
console.log(`📄 检查页面: ${page.name}`);
const result = await validator.validatePage(page.url, page.name);
if (result.issues.length === 0) {
console.log(` ✅ 无SEO问题\n`);
} else {
console.log(` ⚠️ 发现 ${result.issues.length} 个问题:`);
result.issues.forEach(issue => {
console.log(` - ${issue.check}: ${issue.issue} (${issue.severity})`);
});
console.log();
}
}
return validator.getSummary();
}
function generateSummary(summary) {
console.log('\n📊 SEO检查摘要\n');
console.log('─'.repeat(80));
console.log(`总页面数: ${summary.totalPages}`);
console.log(`有问题页面: ${summary.pagesWithIssues}`);
console.log(`总问题数: ${summary.totalIssues}`);
console.log(`\n问题严重程度:`);
console.log(` 🔴 高: ${summary.severity.high}`);
console.log(` 🟡 中: ${summary.severity.medium}`);
console.log(` 🟢 低: ${summary.severity.low}`);
console.log('─'.repeat(80));
const passRate = ((summary.totalPages - summary.pagesWithIssues) / summary.totalPages * 100).toFixed(1);
console.log(`\n✅ SEO通过率: ${passRate}%`);
}
async function main() {
const summary = await checkAllPages();
generateSummary(summary);
const outputPath = 'test-results/seo-summary.json';
fs.writeFileSync(outputPath, JSON.stringify(summary, null, 2));
console.log(`\n💾 详细结果已保存到: ${outputPath}`);
}
main().catch(console.error);