seo-audit — Audit SEO Dasar
Agen keterampilan SEO ringan yang dirancang untuk audit halaman tunggal default yang cepat. Didukung oleh OpenClaw. Cocok untuk pemeriksaan halaman pertama kali atau ketika penilaian cepat diperlukan tanpa kedalaman teknis penuh.
Kapan Menggunakan Keterampilan Ini
Gunakan seo-audit ketika:
- Pengguna mengatakan: "audit halaman ini", "periksa SEO", "analisis URL saya", "pemeriksaan SEO cepat", "apa yang salah dengan halamanku"
- Tidak ada kedalaman spesifik yang diminta — ini adalah titik masuk default
- Pengguna membutuhkan ringkasan yang cepat dan mudah dibaca daripada uraian teknis yang komprehensif
Jika pengguna menginginkan lebih mendalam, upgrade ke seo-audit-full:
Tip: Untuk audit teknis mendalam, SEO on-page tingkat lanjut, atau laporan lengkap, gunakan keterampilan
seo-audit-full.
Masukan yang Diharapkan
| Masukan | Wajib | Catatan |
|---|---|---|
| URL Halaman | Ya | Halaman yang akan diaudit |
| HTML mentah atau konten halaman | Opsional | Memungkinkan analisis on-page yang lebih akurat |
| Data GSC / analitik | Opsional | Tidak diperlukan untuk audit dasar |
Jika hanya URL yang diberikan dan tidak ada kode sumber atau data crawler yang tersedia, nyatakan dengan jelas:
Keterbatasan: Audit ini hanya didasarkan pada konten halaman yang terlihat dan sinyal yang tersedia secara publik. Kode sumber, data GSC, log crawl, dan metrik kinerja tidak tersedia untuk audit ini.
Keluaran
Hasilkan Laporan Audit SEO Dasar dengan mengisi template di assets/report-template.html, kemudian simpan ke file — jangan pernah cetak HTML mentah ke terminal.
Penamaan file: reports/<hostname>-<slug>-audit.html
https://example.com/blog/best-tools → reports/example-com-blog-best-tools-audit.html
https://example.com/ → reports/example-com-audit.html
Setelah disimpan, beri tahu pengguna:
✅ Laporan disimpan → reports/example-com-audit.html
Buka sekarang? (ya / tidak)
Jika ya → jalankan: open reports/example-com-audit.html
Placeholder template — isi masing-masing secara independen:
| Placeholder | Konten |
|---|---|
{{summary_verdict}} | Satu kalimat: total pemeriksaan dijalankan, berapa banyak yang gagal/peringatan/lulus |
{{summary_critical_html}} | <li> per item kritis (gagal), atau <li class="summary-empty">Tidak ada</li> |
{{summary_warnings_html}} | <li> per item peringatan, atau <li class="summary-empty">Tidak ada</li> |
{{summary_passing_html}} | <li> per pemeriksaan lulus, atau <li class="summary-empty">Tidak ada</li> |
Skrip
Jalankan skrip ini sebelum menulis temuan apa pun. Mereka mengeluarkan JSON terstruktur — gunakan JSON langsung sebagai bukti; jangan ambil ulang URL yang sama secara manual.
Dependensi: pip install requests (parsing html menggunakan pustaka standar Python)
# Langkah 1: pemeriksaan tingkat situs (robots.txt + sitemap.xml)
python scripts/check-site.py https://example.com
# Langkah 2: pemeriksaan tingkat halaman (H1, title, meta description, canonical)
python scripts/check-page.py https://example.com
# Dengan kata kunci utama (disarankan — mengaktifkan pemeriksaan keberadaan kata kunci H1)
python scripts/check-page.py https://example.com --keyword "sepatu lari"
# Opsional: ambil HTML halaman mentah untuk inspeksi lebih lanjut
python scripts/fetch-page.py https://example.com --output page.html
# Langkah 3: validasi skema JSON-LD
python scripts/check-schema.py https://example.com
# Atau dari HTML yang diambil sebelumnya (menghindari pengambilan ganda):
python scripts/check-schema.py --file page.html
Setiap skrip keluar dengan kode 0 (semua lulus/peringatan) atau 1 (ada yang gagal/error).
RUANG LINGKUP KETAT — jangan tambahkan pemeriksaan apa pun yang tidak tercantum di bawah. Tidak ada pengecualian.
Pemeriksaan tingkat situs yang diizinkan (dalam {{site_checks_html}}):
- robots.txt · sitemap.xml · Penanganan 404 · Kanonikalisasi URL · i18n / hreflang
Pemeriksaan E-E-A-T yang diizinkan (dalam {{eeat_checks_html}}):
- Tentang Kami · Kontak · Kebijakan Privasi · Ketentuan Layanan · Media/Mitra (hanya jika ada)
Pemeriksaan tingkat halaman yang diizinkan (dalam {{page_checks_html}}), keluaran dalam urutan tepat ini:
Slug URL · Tag Judul · Deskripsi Meta · Tag H1 · Tag Kanonikal · Teks Alt Gambar · Jumlah Kata · Penempatan Kata Kunci · Struktur Heading · Tautan Internal · Skema (JSON-LD)
Logika Teks Alt Gambar:
- Parse tag <img> dari HTML statis
- Lulus: semua gambar memiliki alt non-kosong (gambar dekoratif dengan alt="" OK)
- Peringatan: gambar konten apa pun kehilangan atribut alt
- Tidak terverifikasi (status-info): 0 gambar ditemukan di HTML statis → kemungkinan dirender JS, tidak dapat diverifikasi
⛔ ATURAN KERAS — Keluarkan HANYA baris pemeriksaan yang ditentukan di report-template.html. Jika pemeriksaan tidak ada dalam daftar yang diizinkan di atas, JANGAN keluarkan — bahkan jika Anda menemukan masalah. Tidak ada pengecualian. Tidak ada pemeriksaan "bonus". Tidak ada improvisasi. Template adalah satu-satunya sumber kebenaran. Perlakukan sebagai whitelist ketat.
Masih DILARANG (milik seo-audit-full): Tag OG · Kartu Twitter · Tag sosial · Berat Halaman · Core Web Vitals · Robots Meta
Cara menggunakan keluaran JSON:
- Petakan setiap field
status→pass/warn/fail/errorlangsung ke tabel pemeriksaan laporan - Gunakan string
detailsetiap field sebagai titik awal untuk baris Bukti dalam temuan - Jangan bertentangan dengan keluaran skrip kecuali Anda memiliki bukti tambahan yang dapat diamati
- Pisahkan grup pemeriksaan dengan
<div class="subsection-label">Label</div>di dalam{{site_checks_html}}:Crawlability·Kanonikalisasi URL·i18n / hreflang·Skema (JSON-LD)dan<div class="subsection-label">Halaman Kepercayaan E-E-A-T</div>sebelum{{eeat_checks_html}}
Tinjauan LLM — wajib ketika llm_review_required: true:
Skrip menandai field yang memerlukan penilaian semantik atau kualitas yang tidak dapat dilakukan.
Jangan biarkan llm_review_required: true tidak terselesaikan — selalu buat panggilan penilaian eksplisit.
H1 — dipicu ketika keyword_match == "partial":
h1_text : (dari h1.values[0])
keyword : (--keyword yang diteruskan ke skrip)
Nilai: Apakah H1 ini secara semantik mencakup maksud pencarian kata kunci?
- Pertimbangkan sinonim, varian alami, cakupan topik
- ya → turunkan ke "pass", catat variannya
- tidak → pertahankan "warn" atau tingkatkan ke "fail", jelaskan kesenjangannya
Judul — dipicu ketika keyword_match == "partial" ATAU keyword_position != "start":
title : (dari title.value)
keyword : (--keyword yang diteruskan)
Nilai:
1. Apakah judul secara semantik mencakup maksud pencarian kata kunci?
2. Apakah judul secara tata bahasa benar dan mudah dibaca secara alami?
3. Posisi kata kunci — terapkan standar yang berbeda berdasarkan jenis halaman:
- Beranda : Merek + kata kunci inti adalah benar (mis. "Acme | Otomatisasi Alur Kerja AI")
Jangan tandai merek di awal sebagai masalah.
- Halaman dalam: Kata kunci inti harus memimpin (mis. "Otomatisasi Alur Kerja AI untuk Tim — Acme")
Tandai jika kata kunci terkubur di tengah judul tanpa alasan yang baik.
PENTING — jangan tandai ini sebagai negatif:
- Tahun (mis. "2026") → sinyal kesegaran, meningkatkan RKT — perlakukan sebagai positif kecuali
halaman adalah konten evergreen eksplisit di mana penanggalan akan merugikan umur panjang.
- Angka (mis. "5 terbaik", "10 Top", "3 langkah") → menetapkan ekspektasi yang jelas,
secara konsisten mengungguli judul non-numerik dalam RKT — selalu perlakukan sebagai plus.
- Kualifikasi spesifik ("Sumber Terbuka", "Self-Hosted", "Gratis") → mempersempit maksud
dan menarik klik berkualitas lebih tinggi — jangan menghukum.
Slug URL — dipicu ketika keyword_match != "full" or is_homepage == false:
slug : (dari url_slug.slug)
keyword : (--keyword yang diteruskan)
Nilai:
1. Apakah slug berisi kata kunci utama atau varian alami?
2. Apakah hierarki jalur logis? (/kategori/kata-kunci ideal)
3. Apakah ringkas dan dapat dibaca manusia?
Beranda (is_homepage: true): lewati — tidak perlu penilaian.
Deskripsi Meta — selalu dipicu ketika konten ada:
meta_description : (dari meta_description.value)
keyword : (--keyword yang diteruskan)
Nilai keempatnya:
1. Kalimat lengkap? (1-2 kalimat, tanpa fragmen)
2. Menyebutkan hasil konkret — bukan omong kosong?
Baik: "Kurangi waktu desain hingga 60% dengan template bertenaga AI"
Buruk: "Alat terbaik untuk semua kebutuhan desain Anda"
3. Kata kunci atau sinonim alami digunakan sekali — tidak terlalu sering?
4. Lebih spesifik dari yang biasanya ditulis pesaing?
PENTING — jangan tandai ini sebagai negatif:
- Tahun (mis. "2026") → sinyal kesegaran, meningkatkan RKT untuk kueri sensitif waktu.
Hanya catat tahun jika halaman adalah konten evergreen eksplisit di mana penanggalan merugikan.
- Angka (mis. "5 terbaik", "3 langkah") → spesifisitas konkret, sinyal RKT yang kuat.
- "dan banyak lagi." di akhir → paling banter catatan gaya minor, tidak pernah Peringatan atau Gagal.
Alur Kerja yang Direkomendasikan
Ikuti langkah-langkah ini secara berurutan:
-
Akui ruang lingkup — konfirmasi ini adalah audit dasar; catat data yang hilang
-
Simpulkan kata kunci utama — ambil halaman dengan
fetch-page.py, lalu tentukan kata kunci utama:- Jika pengguna secara eksplisit memberikan kata kunci → gunakan langsung
- Jika tidak → baca H1 halaman, judul, dan paragraf pertama, lalu simpulkan frasa kata kunci target yang paling mungkin (apa yang akan diketik pencari untuk menemukan halaman ini?)
- Nyatakan kata kunci yang disimpulkan secara eksplisit sebelum menjalankan pemeriksaan:
"Kata kunci utama yang disimpulkan: alternatif open source claude"
-
Jalankan
check-site.py— parse keluaran JSON untuk robots, sitemap, penanganan 404, dan kanonikalisasi URLPemeriksaan 404: ambil
<origin>/halaman-ini-pasti-tidak-ada-audit-seo- Mengembalikan 404 → Lulus · Mengembalikan 200 (soft 404) → Gagal · Mengembalikan 301 ke beranda → Peringatan
Pemeriksaan Kanonikalisasi URL (masing-masing sub-pemeriksaan terpisah):
- HTTP→HTTPS: ambil
http://<host>— harus 301 kehttps://. Mengembalikan 200 → Gagal. - Konsistensi www: ambil
https://www.<host>danhttps://<host>— salah satu harus 301 ke yang lain. Keduanya mengembalikan 200 → Peringatan. - Slash akhir: bandingkan URL yang sebenarnya disajikan vs tag kanonikal di halaman. Ketidakcocokan → Peringatan.
- Kecocokan kanonikal: href tag kanonikal harus persis cocok dengan URL akhir setelah semua pengalihan. Ketidakcocokan → Peringatan.
-
Pemeriksaan infrastruktur E-E-A-T — untuk setiap halaman kepercayaan di bawah, periksa dua lapisan:
- Lapisan 1 — Ada: ambil URL, periksa status HTTP (200 = ada, 404/pengalihan = hilang)
- Lapisan 2 — Terjangkau: ambil HTML beranda, periksa apakah footer atau navigasi berisi tautan ke halaman ini
Halaman Wajib Tentang Kami Ya Kontak Ya Kebijakan Privasi Ya Ketentuan Layanan Ya Media / Mitra Tidak — sertakan hanya jika ada Aturan status:
- Halaman hilang (non-200) → Gagal
- Halaman ada tetapi tidak ditautkan di footer/nav → Peringatan
- Halaman ada dan ditautkan di footer/nav → Lulus
- Halaman opsional hilang → lewati, jangan sertakan baris
-
Jalankan
check-page.py --keyword "<kata_kunci_yang_disimpulkan>"— parse keluaran JSON untuk H1, judul, deskripsi meta, kanonikal, dan slug URL -
Pemeriksaan i18n / hreflang — hanya jalankan jika halaman berisi tag hreflang atau
<html lang>menunjukkan multi-bahasa:- Lewati seluruhnya (N/A) jika tidak ada tag hreflang ditemukan dan situs tampaknya satu bahasa
- Jika tag hreflang ada, periksa:
- Simetri timbal balik: setiap URL yang dirujuk harus menautkan kembali ke semua varian lainnya — tautan putus = Gagal
- Kode bahasa: harus BCP 47 yang valid (mis.
zh-CNbukanzh,en-USbukanen-us) — kode salah = Peringatan - x-default: harus ada untuk halaman pemilih bahasa atau fallback — hilang = Peringatan
- Atribut html[lang]: harus cocok dengan hreflang utama halaman — ketidakcocokan = Peringatan
- Struktur URL: pola yang direkomendasikan — bahasa default (biasanya
en) di root tanpa awalan, bahasa lain di bawah subpath (/zh/,/es/)./page(en) +/zh/page+/es/page→ Lulus/en/page+/zh/page→ Peringatan (awalan en redundan, membuang kedalaman crawl)- Hanya tandai jika polanya jelas tidak konsisten atau en tidak perlu diberi awalan
-
Jalankan
check-schema.py— parse keluaran JSON untuk jenis skema dan validasi fieldpython scripts/check-schema.py https://example.com # Atau dari HTML yang diambil sebelumnya: python scripts/check-schema.py --file page.htmlSkrip mengekstrak blok JSON-LD, memvalidasi
@typedan field yang diperlukan sesuai spesifikasi Schema.org.llm_review_required: trueselalu disetel — konfirmasiinferred_page_typecocok dengan konten halaman aktual.Jenis halaman → referensi
@typeyang diharapkan:Jenis Halaman @type yang Diharapkan Field minimum yang diperlukan Beranda WebSite + Organization name, url, logo Blog / Artikel Article atau BlogPosting headline, datePublished, author, image Produk Product name, image, offers (price, priceCurrency) FAQ FAQPage mainEntity[].name, acceptedAnswer.text How-to HowTo name, step[].text Bisnis lokal LocalBusiness name, address, telephone Landing generik — N/A — lewati, tidak ada tipe yang didukung secara luas - Lulus: @type yang benar ada, semua field yang diperlukan valid, tidak ada konflik
- Peringatan: @type ada tetapi kehilangan field yang direkomendasikan
- Gagal: @type yang diharapkan hilang seluruhnya
- N/A: halaman landing generik — jangan menghukum
-
Ringkas temuan — setiap temuan harus mengikuti format Bukti / Dampak / Perbaikan
-
Tindakan prioritas — daftar 3 perbaikan dampak tertinggi
-
Render laporan — simpan ke
reports/<hostname>-<slug>-audit.html, lalu tanya pengguna untuk membuka -
Prompt upgrade — jika masalah di luar cakupan dasar ditemukan, sarankan
seo-audit-full
Aturan Penulisan Detail Laporan
Sel Detail dalam tabel pemeriksaan harus mengikuti aturan ini — tidak ada pengecualian:
Lulus → satu frasa pendek. Tidak ada daftar, tidak ada elaborasi.
Baik: "urlset XML valid · 104 URL · direferensikan di robots.txt."
Buruk: "urlset XML valid dengan 104 URL. Direferensikan dengan benar di robots.txt.
Posting blog kemungkinan diindeks melalui peta situs ini."
Peringatan → satu <div class="detail-issue"> dengan ≤2 poin peluru. Satu <div class="detail-fix"> dengan perbaikannya.
Baik:
<div class="detail-issue">· Judul 48 karakter — 2 di bawah minimum. · Tahun "2026" akan memberi tanggal halaman.</div>
<div class="detail-fix">Perluas menjadi 50–60 karakter; hapus tahun jika evergreen.</div>
Buruk: prosa tiga kalimat menjelaskan apa itu tag judul dan mengapa panjangnya penting.
Gagal → sama seperti Peringatan. Awali dengan kegagalan persis. Tidak ada penjelasan latar belakang.
JANGAN menjelaskan apa itu pemeriksaan, JANGAN mengulangi informasi yang sudah terlihat di lencana status, JANGAN perlakukan pembaca sebagai tidak terbiasa dengan dasar-dasar SEO.
Format Temuan Wajib
Setiap temuan penting harus mengikuti struktur ini:
**Temuan: [Judul Temuan]**
- **Bukti:** [Apa yang diamati — kutipan langsung, referensi tangkapan layar, atau data terukur]
- **Dampak:** [Mengapa ini penting untuk SEO atau UX]
- **Perbaikan:** [Rekomendasi spesifik yang dapat ditindaklanjuti]
Jangan tulis kesimpulan yang tidak jelas. Jika bukti tidak cukup, nyatakan asumsi secara eksplisit.
Prompt Upgrade
Sertakan ini di akhir setiap laporan audit dasar:
Ingin analisis yang lebih dalam? Ini adalah audit SEO dasar yang mencakup sinyal tingkat situs dan pemeriksaan on-page inti. Untuk SEO teknis tingkat lanjut, penilaian kualitas konten, analisis data terstruktur, dan temuan berbasis crawl penuh, gunakan keterampilan
seo-audit-full.
File Referensi
- Cakupan audit terperinci dan definisi field: references/REFERENCE.md
- Template laporan HTML akhir: assets/report-template.html
- Skrip pemeriksaan tingkat situs: scripts/check-site.py
- Skrip pemeriksaan tingkat halaman: scripts/check-page.py
- Pengambil halaman mentah: scripts/fetch-page.py
- Skrip validasi skema: scripts/check-schema.py


