#!/usr/bin/env python3
"""Bikin laporan markdown audit Yoast LEIT dari JSON hasil audit."""
import json, os, re

WS = os.path.dirname(os.path.abspath(__file__))
rows = json.load(open(os.path.join(WS, "leit_yoast_audit_20260917.json")))
norm = lambda s: re.sub(r"\s+", " ", s.lower()).strip()

have = [r for r in rows if r["meta_desc"]]
miss = [r for r in rows if not r["meta_desc"]]
start = [r for r in have if norm(r["meta_desc"]).startswith(norm(r["focuskw"]))]
cont = [r for r in have if norm(r["focuskw"]) in norm(r["meta_desc"])]

L = []
L.append("# Audit Yoast SEO — LEIT Surabaya (leitsurabaya.com)\n")
L.append("Tanggal cek: **17 Sep 2026, 07:45 WIB** · sumber: WP REST (context=edit) + endpoint Yoast `/v1/bulk_editor/posts`, `/v1/seo_scores`, `/v1/readability_scores` + render live.\n")
L.append(f"Total artikel publish: **{len(rows)}**\n")

L.append("## 1. Ringkasan skor Yoast\n")
L.append("| Metrik | good | ok | bad | belum dianalisis |")
L.append("|---|---|---|---|---|")
L.append("| SEO (focus keyphrase) | 6 | 20 | 0 | **16** |")
L.append("| Readability | 25 | 2 | 0 | 15 |")
L.append("")
L.append("`bad` nol — artinya bukan artikel jelek, tapi **16 artikel nggak bisa dinilai Yoast karena focus keyphrase-nya kosong**.\n")

L.append("## 2. Artikel TANPA meta description + focus keyphrase (16)\n")
L.append("Kalau begini, Google nyomot snippet sendiri dari isi artikel — kita kehilangan kendali kata kunci di SERP, dan preview share (WA/FB/LinkedIn) cuma nampilin judul.\n")
L.append("| ID | Tanggal | Judul | Link |")
L.append("|---|---|---|---|")
for r in miss:
    t = re.sub(r"&#?\w+;", "", r["title"])
    L.append(f"| {r['id']} | {r['date']} | {t} | {r['link']} |")
L.append("")

L.append("## 3. Kualitas 25 meta description yang ADA\n")
L.append(f"- Panjang: 24 artikel ada di rentang 124–156 char (aman), **1 kepanjangan: #{3727 if False else 3827} = {[r['meta_desc_len'] for r in have if r['id']==3827][0]} char** (ideal 120–158).")
L.append(f"- Focus keyphrase **exact di awal** meta desc: **{len(start)}** dari 25.")
L.append(f"- Focus keyphrase **exact di mana pun** di meta desc: **{len(cont)}** dari 25.")
L.append(f"- Sisa {25-len(cont)} artikel: kata-katanya ada tapi nggak nyambung sebagai frasa utuh → Yoast kasih kuning 'keyphrase tidak ditemukan'.")
L.append("- Meta description **duplikat: 0** ✅")
L.append("")
L.append("Contoh yang perlu dirapikan (keyphrase ≠ frasa di desc):")
for r in [r for r in have if r not in cont][:5]:
    L.append(f"- #{r['id']} · fk `{r['focuskw']}` → desc: “{r['meta_desc'][:70]}…”")
L.append("")

L.append("## 4. Homepage (halaman paling penting) — paling parah\n")
L.append("- `<title>`: **“Home | LEIT SURABAYA”** — nggak ada keyword sama sekali (idealnya “Kursus Bahasa Inggris Surabaya | LEIT”).")
L.append("- **Meta description: KOSONG** (0 tag `<meta name=\"description\">` di HTML live).")
L.append("- `og:image`: `pexels-farzin-19564484.webp` **1039×1300 (portrait)** → kepotong di preview WhatsApp/FB/LinkedIn. Idealnya 1200×630 landscape.")
L.append("")

L.append("## 5. Yang sudah sehat ✅\n")
L.append("- `robots.txt` 200, tanpa blokir, sitemap didaftarkan; `sitemap_index.xml` 200 (post/page/category).")
L.append("- Canonical benar (`https://www.leitsurabaya.com/...`), apex → www 301 rapi.")
L.append("- Schema jalan: Organization, WebSite + SearchAction, WebPage, BreadcrumbList, ImageObject.")
L.append("- Semua 41 artikel punya `og:image` (nggak ada yang kosong).")
L.append("- Nggak ada meta description duplikat antar artikel.")
L.append("")

L.append("## 6. Rekomendasi berurutan (pilih nomor, gw kerjakan satu-satu)\n")
L.append("1. **5 artikel baru (7–11 Sep)** — isi focus keyphrase + meta desc 120–158 char (keyphrase exact di awal) + social desc. Ini yang paling cepat kelihatan dampaknya karena masih fresh.")
L.append("2. **11 artikel lain yang kosong** (21 Jul–12 Agu: #3825, #3864, #3865, #3866, #3902, #3903, #3904, #3925, #3928, #4051, #4059) — pakai pola sama.")
L.append("3. **Homepage** — ganti title jadi keyword utama + isi meta desc; ini halaman yang paling sering muncul di pencarian brand+Lokasi.")
L.append("4. **Perbaiki meta desc #3827** (305 char → 150-an).")
L.append("5. **Ganti og:image homepage** ke landscape 1200×630 biar preview share rapi.")
L.append("")
L.append("Semua penulisan meta lewat WP REST (`_yoast_wpseo_focuskw` / `_yoast_wpseo_metadesc`) lalu **diverifikasi live** (tag `<meta name=\"description\">` di HTML).")
L.append("")

out = os.path.join(WS, "laporan_yoast_leit_20260917.md")
open(out, "w").write("\n".join(L))
print("ditulis:", out, os.path.getsize(out), "bytes")
