Pada halaman ini
Menjalankan audit SEO teknikal secara manual pada laman 500 halaman mengambil masa 6-8 jam. Menyemak teg meta, mengesahkan hierarki tajuk, mencari pautan rosak, menganalisis kualiti kandungan -- ia kerja yang membosankan dan terdedah kepada kesilapan yang kebanyakan pasukan lakukan paling kerap setiap suku tahun (alat audit Lighthouse milik Google sendiri membantu, tetapi tidak boleh diskalakan untuk rangkak seluruh laman). Pada masa anda selesai, separuh daripada isu telah pun menjejaskan kedudukan anda.
CrawlForge menukar audit SEO sepanjang hari menjadi aliran kerja automatik selama 15 minit. Panduan ini menunjukkan cara membina saluran paip audit SEO yang lengkap yang menyemak setiap halaman pada laman anda untuk 20+ faktor kedudukan dan menjana laporan tindakan yang diutamakan.
Jadual Kandungan
- Apa yang Diliputi oleh Audit SEO Ini
- Gambaran Keseluruhan Seni Bina
- Langkah 1: Rangkak dan Petakan Laman Anda
- Langkah 2: Ekstrak dan Sahkan Metadata
- Langkah 3: Analisis Kualiti Kandungan
- Langkah 4: Semak Pautan dan Struktur Laman
- Langkah 5: Jana Laporan Audit
- Analisis Kos Credit
- Hasil dan Manfaat
- Soalan Lazim
Apa yang Diliputi oleh Audit SEO Ini
Audit automatik ini menyemak faktor SEO teknikal yang paling berkesan:
| Kategori | Semakan | Kesan |
|---|---|---|
| Teg meta | Panjang tajuk, penerangan, Open Graph, kanonikal | Tinggi |
| Kandungan | Bilangan perkataan, hierarki tajuk, ketumpatan kata kunci | Tinggi |
| Pautan | Pautan rosak, halaman yatim, rantaian ubah hala | Sederhana |
| Struktur | Liputan peta laman, kedalaman rangkak, corak URL | Sederhana |
| Prestasi | Saiz halaman, masa respons, sumber yang menyekat pemaparan | Sederhana |
Apakah itu audit SEO teknikal? Ia ialah semakan sistematik faktor kesihatan teknikal laman web yang menjejaskan rangkak, pengindeksan, dan kedudukan enjin carian. Tidak seperti audit kandungan yang memberi tumpuan kepada apa yang anda tulis, audit teknikal memberi tumpuan kepada cara enjin carian menemui dan memproses halaman anda -- termasuk isyarat seperti Core Web Vitals dan konfigurasi robots.txt yang betul.
Gambaran Keseluruhan Seni Bina
Saluran paip audit menggunakan lima alat CrawlForge:
| Langkah | Alat | Credits | Tujuan |
|---|---|---|---|
| Penemuan laman | map_site | 3 | Jana inventori URL yang lengkap |
| Rangkak mendalam | crawl_deep | 5 | Lalui struktur laman dan cari isu |
| Semakan metadata | extract_metadata | 1 | Sahkan teg meta setiap halaman |
| Analisis kandungan | analyze_content | 3 | Skor kualiti kandungan dan kebolehbacaan |
| Audit pautan | extract_links | 1 | Cari pautan rosak dan yatim |
Langkah 1: Rangkak dan Petakan Laman Anda
Mulakan dengan inventori lengkap setiap halaman pada laman anda.
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
const client = new Client({
name: 'seo-auditor',
version: '1.0.0',
});
interface SiteAuditConfig {
url: string;
maxPages: number;
maxDepth: number;
}
async function crawlSite(config: SiteAuditConfig) {
// First, get the sitemap for a complete URL list
const siteMap = await client.callTool({
name: 'map_site',
arguments: {
url: config.url,
max_urls: config.maxPages,
include_sitemap: true,
include_metadata: true,
group_by_path: true,
},
});
const mapResult = JSON.parse(siteMap.content[0].text);
// Then crawl to discover pages not in the sitemap
const crawlResult = await client.callTool({
name: 'crawl_deep',
arguments: {
url: config.url,
max_pages: config.maxPages,
max_depth: config.maxDepth,
extract_content: true,
respect_robots: true,
},
});
const crawled = JSON.parse(crawlResult.content[0].text);
// Combine and deduplicate
const allUrls = new Set([
...mapResult.urls,
...crawled.pages.map((p: { url: string }) => p.url),
]);
// Flag pages in crawl but missing from sitemap
const missingFromSitemap = crawled.pages
.filter((p: { url: string }) => !mapResult.urls.includes(p.url))
.map((p: { url: string }) => p.url);
return {
totalPages: allUrls.size,
urls: Array.from(allUrls),
missingFromSitemap,
crawlDepthDistribution: crawled.depthDistribution,
};
}Langkah ini mengenal pasti halaman yatim (boleh dirangkak tetapi tiada dalam peta laman anda) dan memberi anda taburan kedalaman yang menunjukkan berapa banyak klik diperlukan untuk mencapai setiap halaman.
Langkah 2: Ekstrak dan Sahkan Metadata
Semak setiap halaman untuk isu teg meta yang menjejaskan kedudukan.
interface MetaIssue {
url: string;
type: 'error' | 'warning';
message: string;
}
async function auditMetadata(urls: string[]): Promise<MetaIssue[]> {
const issues: MetaIssue[] = [];
// Batch process metadata extraction
const batchResult = await client.callTool({
name: 'batch_scrape',
arguments: {
urls: urls.map(url => ({ url })),
includeMetadata: true,
maxConcurrency: 15,
},
});
const results = JSON.parse(batchResult.content[0].text);
for (const page of results.results) {
const meta = page.metadata;
const url = page.url;
// Title checks
if (!meta?.title) {
issues.push({ url, type: 'error', message: 'Missing title tag' });
} else if (meta.title.length > 60) {
issues.push({ url, type: 'warning', message: `Title too long (${meta.title.length} chars, max 60)` });
} else if (meta.title.length < 30) {
issues.push({ url, type: 'warning', message: `Title too short (${meta.title.length} chars, min 30)` });
}
// Description checks
if (!meta?.description) {
issues.push({ url, type: 'error', message: 'Missing meta description' });
} else if (meta.description.length > 155) {
issues.push({ url, type: 'warning', message: `Description too long (${meta.description.length} chars)` });
}
// Open Graph checks
if (!meta?.ogTitle) {
issues.push({ url, type: 'warning', message: 'Missing og:title' });
}
if (!meta?.ogImage) {
issues.push({ url, type: 'warning', message: 'Missing og:image' });
}
// Canonical check
if (!meta?.canonical) {
issues.push({ url, type: 'warning', message: 'Missing canonical URL' });
}
}
return issues;
}Langkah 3: Analisis Kualiti Kandungan
Gunakan analyze_content untuk menskor kebolehbacaan, kehadiran kata kunci, dan kedalaman kandungan bagi halaman paling penting anda.
interface ContentScore {
url: string;
wordCount: number;
readabilityScore: number;
topTopics: string[];
sentiment: string;
issues: string[];
}
async function analyzePageContent(url: string): Promise<ContentScore> {
// First extract clean content
const content = await client.callTool({
name: 'extract_content',
arguments: { url },
});
const extracted = JSON.parse(content.content[0].text);
// Then analyze it
const analysis = await client.callTool({
name: 'analyze_content',
arguments: {
text: extracted.content,
},
});
const result = JSON.parse(analysis.content[0].text);
const issues: string[] = [];
// Flag thin content (under 300 words)
if (result.wordCount < 300) {
issues.push(`Thin content: only ${result.wordCount} words (recommend 800+)`);
}
// Flag low readability
if (result.readabilityScore < 40) {
issues.push('Content may be too complex for general audience');
}
return {
url,
wordCount: result.wordCount,
readabilityScore: result.readabilityScore,
topTopics: result.topics || [],
sentiment: result.sentiment || 'neutral',
issues,
};
}Langkah 4: Semak Pautan dan Struktur Laman
Pautan rosak menjejaskan kedua-dua pengalaman pengguna dan SEO. Ekstrak semua pautan dan sahkan bahawa ia diselesaikan dengan betul.
interface LinkIssue {
sourceUrl: string;
targetUrl: string;
type: 'broken' | 'redirect' | 'external-nofollow';
statusCode?: number;
}
async function auditLinks(urls: string[]): Promise<LinkIssue[]> {
const issues: LinkIssue[] = [];
for (const url of urls) {
const linksResult = await client.callTool({
name: 'extract_links',
arguments: {
url,
base_url: urls[0], // Use site root as base
},
});
const links = JSON.parse(linksResult.content[0].text);
// Check each internal link
for (const link of links.internal || []) {
try {
const check = await client.callTool({
name: 'fetch_url',
arguments: { url: link.href, timeout: 5000 },
});
const response = JSON.parse(check.content[0].text);
if (response.statusCode >= 400) {
issues.push({
sourceUrl: url,
targetUrl: link.href,
type: 'broken',
statusCode: response.statusCode,
});
} else if (response.statusCode >= 300) {
issues.push({
sourceUrl: url,
targetUrl: link.href,
type: 'redirect',
statusCode: response.statusCode,
});
}
} catch {
issues.push({
sourceUrl: url,
targetUrl: link.href,
type: 'broken',
});
}
}
}
return issues;
}Langkah 5: Jana Laporan Audit
Gabungkan semua penemuan ke dalam laporan yang diutamakan.
interface SEOAuditReport {
siteUrl: string;
auditDate: string;
totalPages: number;
overallScore: number;
criticalIssues: number;
warnings: number;
sections: {
metadata: MetaIssue[];
content: ContentScore[];
links: LinkIssue[];
sitemapGaps: string[];
};
}
async function generateReport(siteUrl: string): Promise<SEOAuditReport> {
// Run all audit steps
const site = await crawlSite({
url: siteUrl,
maxPages: 200,
maxDepth: 4,
});
const metaIssues = await auditMetadata(site.urls);
const linkIssues = await auditLinks(site.urls.slice(0, 50)); // Top 50 pages
// Analyze top pages by importance
const topPages = site.urls.slice(0, 20);
const contentScores: ContentScore[] = [];
for (const url of topPages) {
contentScores.push(await analyzePageContent(url));
}
const criticalCount = metaIssues.filter(i => i.type === 'error').length
+ linkIssues.filter(i => i.type === 'broken').length;
const warningCount = metaIssues.filter(i => i.type === 'warning').length
+ contentScores.reduce((sum, s) => sum + s.issues.length, 0);
// Score: start at 100, deduct for issues
const score = Math.max(0, 100 - (criticalCount * 5) - (warningCount * 2));
return {
siteUrl,
auditDate: new Date().toISOString(),
totalPages: site.totalPages,
overallScore: score,
criticalIssues: criticalCount,
warnings: warningCount,
sections: {
metadata: metaIssues,
content: contentScores,
links: linkIssues,
sitemapGaps: site.missingFromSitemap,
},
};
}Analisis Kos Credit
Untuk audit laman 200 halaman:
| Operasi | Alat | Credits | Kuantiti | Subjumlah |
|---|---|---|---|---|
| Pemetaan laman | map_site | 3 | 1 | 3 |
| Rangkak mendalam | crawl_deep | 5 | 1 | 5 |
| Metadata (kelompok) | batch_scrape | 5 | 4 kelompok | 20 |
| Analisis kandungan | analyze_content | 3 | 20 halaman | 60 |
| Pengekstrakan kandungan | extract_content | 2 | 20 halaman | 40 |
| Pengekstrakan pautan | extract_links | 1 | 50 halaman | 50 |
| Pengesahan pautan | fetch_url | 1 | 200 semakan | 200 |
| Jumlah setiap audit | 378 credits |
Menjalankan audit bulanan menelan kos kira-kira 378 credits -- jauh dalam lingkungan 3,000 credits bulanan pelan Hobby. Peringkat Free (1,000 credits) meliputi 2-3 audit penuh.
Hasil dan Manfaat
Audit SEO automatik dengan CrawlForge menyampaikan:
- Kelajuan: Lengkapkan audit 200 halaman dalam 15 minit dan bukannya 8 jam
- Konsistensi: Semakan yang sama setiap kali, tiada jurang pengawasan manusia
- Kekerapan: Beralih daripada audit suku tahunan kepada mingguan tanpa kos tambahan
- Pengutamaan: Isu disusun mengikut keterukan supaya anda membaiki perkara yang penting dahulu
Pasukan yang menggunakan audit SEO automatik biasanya melihat peningkatan 15-25% dalam skor SEO teknikal dalam masa 3 bulan, menurut penyelidikan Ahrefs tentang kesan SEO teknikal.
Soalan Lazim
Bagaimanakah ini dibandingkan dengan alat audit SEO berbayar seperti Screaming Frog?
Saluran paip audit CrawlForge lebih fleksibel kerana anda mengawal dengan tepat apa yang disemak dan cara isu diskor. Alat seperti Screaming Frog menelan kos $259/tahun untuk lesen desktop, manakala model credit CrawlForge membenarkan anda menjalankan audit atas permintaan. CrawlForge paling sesuai untuk pasukan yang mahukan aliran kerja SEO yang boleh diprogramkan dan disepadukan dengan AI berbanding alat GUI.
Bolehkah saya menjadualkan audit untuk dijalankan secara automatik?
Ya. Balut fungsi generateReport dalam tugas cron atau fungsi tanpa pelayan (Vercel Cron, AWS Lambda) dan cetuskannya mengikut jadual pilihan anda. Audit mingguan ialah pilihan terbaik untuk kebanyakan laman.
Bagaimana pula dengan halaman yang dipaparkan dengan JavaScript?
CrawlForge mengendalikan pemaparan JavaScript secara automatik. Untuk halaman yang memerlukan interaksi (mengklik tab, mengembangkan bahagian), gunakan scrape_with_actions untuk memaparkan kandungan penuh sebelum analisis.
Mula audit laman anda hari ini. Dapatkan 1,000 credits percuma -- cukup untuk 2-3 audit laman yang lengkap. Tiada kad kredit diperlukan.
Sumber berkaitan:
Cuba sendiri — tiada pendaftaran diperlukan
Jalankan mana-mana daripada 27 alat scraping dan pengekstrakan CrawlForge dalam playground, kemudian mula secara percuma dengan 1,000 credits.
1,000 credits percuma • Isi semula setiap bulan • Tiada kad kredit diperlukan
Tag
Tentang Penulis
Kekal dikemas kini dengan pandangan terkini
Dapatkan tutorial, kemas kini produk dan petua web scraping terus ke peti masuk anda.
Tiada spam. Berhenti melanggan bila-bila masa.