#!/usr/bin/env python3
"""Laporan nilai keyword DAS (Alphard, Lexus + pembanding) + temuan trafik."""
import json, os

WS = os.path.dirname(os.path.abspath(__file__))
d = json.load(open(os.path.join(WS, "das_keyword_score.json")))
kw, klaster, hal = d["kw"], d["klaster"], d["hal"]
nama = {"alphard": "Alphard", "lexus": "Lexus", "nissan": "Nissan", "bmw": "BMW", "toyota": "Toyota",
        "honda": "Honda", "mercy": "Mercy", "benz": "Mercy/Benz", "mitsubishi": "Mitsubishi",
        "pajero": "Pajero", "innova": "Innova", "fortuner": "Fortuner", "avanza": "Avanza",
        "xenia": "Xenia", "mazda": "Mazda", "wuling": "Wuling", "chery": "Chery", "hyundai": "Hyundai"}

L = []
L.append("# Nilai keyword DAS Bengkel Indonesia (per 17 Sep 2026)\n")
L.append("Sumber: Search Console 90 hari (19 Jun – 16 Sep 2026) + inventaris 192 artikel WP.\n")
L.append("**Cara baca 'nilai' (skala 0–100):** 40% bobot permintaan (jumlah impresi = berapa banyak orang nyari), "
         "40% bobot klik yang hilang (potensi klik pada posisi sekarang dikurangi klik nyata), 20% bobot kesiapan "
         "(makin dekat posisinya, makin cepat dipanen). Jadi nilai tinggi = peminat banyak DAN kita sudah dekat, "
         "cuma belum diklik.\n")

L.append("\n## 1. Alphard — 5 query, 41 impresi, 2 klik, CTR 4,9%, posisi 6,9 · NILAI KLASTER 30\n")
L.append("| nilai | impresi 90d | klik | CTR | posisi | potensi klik hilang | keyword |")
L.append("|---|---|---|---|---|---|---|")
for x in sorted([x for x in kw if "alphard" in x["kw"].lower()], key=lambda x: -x["nilai"]):
    L.append(f"| {x['nilai']} | {x['imp']} | {x['klik']} | {x['ctr']:.1f}% | {x['pos']:.1f} | {x['hilang']} | {x['kw']} |")
L.append("\nHalaman yang saling berebut: `/bengkel-spesialis-alphard/` (23 impresi, pos 7,7), "
         "`/bengkel-spesialis-alphard-surabaya/` (9 impresi, pos 6,1), `/bengkel-mobil-alphard/` (6 impresi, pos 5,0). "
         "Tiga halaman untuk satu maksud, jadi sinyalnya terpecah. Total ada **10 artikel** menyentuh Alphard.\n")

L.append("\n## 2. Lexus — 30 query, 240 impresi, 6 klik, CTR 2,5%, posisi 12,4 · NILAI KLASTER 31\n")
L.append("| nilai | impresi 90d | klik | CTR | posisi | potensi klik hilang | keyword |")
L.append("|---|---|---|---|---|---|---|")
for x in sorted([x for x in kw if "lexus" in x["kw"].lower()], key=lambda x: -x["nilai"])[:12]:
    L.append(f"| {x['nilai']} | {x['imp']} | {x['klik']} | {x['ctr']:.1f}% | {x['pos']:.1f} | {x['hilang']} | {x['kw']} |")
L.append("\nPemegang trafik: `/bengkel-spesialis-lexus-di-surabaya/` (179 impresi, pos 9,0) dan "
         "`/rekomendasi-bengkel-lexus-surabaya/` (62 impresi, pos 10,9). Masih ada dua halaman lagi dengan maksud "
         "sama, dan **#6774 adalah salinan #6772** (judul & slug identik, beda akhiran `-2`). Enam artikel Lexus total.\n")

L.append("\n## 3. Pembanding: keyword yang nilainya LEBIH BESAR dari Alphard/Lexus\n")
L.append("| nilai | brand | query | impresi 90d | klik | CTR | posisi | potensi klik hilang |")
L.append("|---|---|---|---|---|---|---|---|")
for k in klaster[:8]:
    L.append(f"| {k['nilai']} | {nama.get(k['brand'], k['brand'])} | {k['n']} | {k['imp']} | {k['klik']} | {k['ctr']}% | {k['pos']} | {k['pot_klik']} |")
L.append("\nTop keyword tunggal (semua topik) menurut nilai:\n")
for x in sorted(kw, key=lambda x: -x["nilai"])[:12]:
    L.append(f"- **{x['nilai']}** · `{x['kw']}` — {x['imp']} impresi, {x['klik']} klik, posisi {x['pos']:.1f}, potensi {x['hilang']} klik hilang")
L.append("")

L.append("\n## 4. ⚠️ TEMUAN KRITIS: trafik DAS ambruk 88%, dan ini DAS-spesifik\n")
L.append("| situs | 28 hari terakhir | 28 hari sebelumnya | perubahan |")
L.append("|---|---|---|---|")
L.append("| **dasindonesia.com** | 53 klik / 1.796 impresi | 285 klik / 15.135 impresi | **−88%** |")
L.append("| studiosoft.id | 32 / 3.009 | 34 / 3.206 | −6% |")
L.append("| theskincodeclinic.com | 41 / 1.924 | 23 / 2.035 | −6% |")
L.append("| rsia.kendangsari.com | 2.793 / 367.841 | 2.485 / 334.361 | +10% |")
L.append("| surabaya-skincentre.com | 669 / 48.462 | 724 / 51.162 | −5% |")
L.append("| tslaw.id | 13 / 353 | 3 / 186 | +90% |")
L.append("\nKalau Google mengubah algoritmanya, semua situs akan kena. Yang kena cuma DAS, jadi penyebabnya dari dalam situs.\n")
L.append("Impresi mingguan DAS: 23 Jul 4.183 → 13 Agu 3.539 → **20 Agu 692 → 27 Agu 408 → 3 Sep 397 → 10 Sep 299**. "
         "Jatuhnya di antara 19 dan 20 Agustus, turun sekitar 80% dalam satu minggu.\n")
L.append("Yang bikin bingung: **posisi rata-rata justru membaik** (contoh `/keluhan-yang-sering-terjadi-pada-mobil-mitsubishi-expander/` "
         "posisi 5,3 → 4,9 tapi impresi 1.232 → 107; `/hari-minggu-tetap-buka/` posisi 7,9 → **1,0** tapi impresi 732 → 2). "
         "Posisi bagus, impresi hilang, artinya halaman masih ada di indeks tapi dipangkas dari ruang tampil.\n")
L.append("Semua halaman kunci masih `Submitted and indexed` dengan crawl terbaru (9–16 Sep), jadi ini bukan deindex.\n")

L.append("\n## 5. ⚠️ Dua halaman uang terbaru berstatus 404 di mata Google\n")
L.append("| halaman | status di GSC | kenyataan live |")
L.append("|---|---|---|")
L.append("| `/bengkel-mercy-surabaya/` (#8296, 12 Sep) | **Not found (404)** | HTTP 200 |")
L.append("| `/bengkel-spesialis-toyota-surabaya/` (#8294, 12 Sep) | **Not found (404)** | HTTP 200 |")
L.append("| `/bengkel-buka-hari-minggu-surabaya/` (#8298, 12 Sep) | Submitted and indexed | HTTP 200 |")
L.append("\nDua halaman itu menyasar keyword bernilai tinggi (`bengkel mercy surabaya` = nilai 57, keyword non-brand "
         "tertinggi di situs ini). Google terakhir kali menengoknya saat masih 404, dan belum kembali. Perlu Request Indexing.\n")

L.append("\n## 6. Temuan pendukung\n")
L.append("- **45 dari 192 artikel (23%) nol impresi** selama 90 hari. Sebagian besar batch 2 Agu dan 19 Agu (Alphard, Honda, Fortuner, overhaul).")
L.append("- **11 slug berakhiran angka** = jejak duplikat; satu di antaranya kembar persis (#6772 vs #6774, Lexus).")
L.append("- Kanibalisasi jelas di dua klaster yang Bos tanyakan: Alphard 3 halaman, Lexus 4 halaman (2 di antaranya kembar).")

L.append("\n## 7. Urutan tindakan yang gw sarankan\n")
L.append("1. 👤 **Cek manual action di GSC** (Security & Manual actions) + cek apakah ada notifikasi spam/quality. Ini penentu: kalau ada tindakan manual, urusannya beda total.")
L.append("2. 👤 **Request Indexing** untuk `/bengkel-mercy-surabaya/` dan `/bengkel-spesialis-toyota-surabaya/` — dua keyword bernilai tertinggi, halamannya sudah siap.")
L.append("3. 🤖 **Rapikan kanibalisasi Alphard & Lexus**: pilih satu halaman utama per klaster, halaman kembar diarahkan ke situ, sisanya ditulis ulang jadi sudut berbeda.")
L.append("4. 🤖 **Perbaiki yang sudah dekat tapi nggak diklik**: `bengkel matic surabaya` (pos 3,4 · 164 impresi · 2 klik), `bengkel nissan surabaya` (pos 4,6 · 174 impresi · 4 klik), `bengkel spesialis bmw surabaya` (pos 3,9 · 56 impresi · 0 klik). Ini judul + meta, bukan artikel baru.")
L.append("5. 🤖 **Evaluasi 45 artikel nol impresi** sebelum dipangkas: yang punya sudut berbeda tapi tumpang tindih sebaiknya dilebur ke halaman utama; yang benar-benar tipis dibuang.")
L.append("6. 📊 **Pantau 7 hari ke depan** untuk memastikan penurunan berhenti sebelum kita tambah konten baru. Menulis lebih banyak artikel saat visibilitas sedang dipangkas cuma menambah beban.\n")
L.append("Catatan: analisis keyword di atas tetap berlaku, tapi angkanya dibaca sambil mengingat trafik situs sedang turun 88%. Setelah pemulihan, nilai tiap keyword akan naik karena impresinya kembali.\n")

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