# 25 Sep 2026 — catatan kerja Atun

> File ini dipakai bersama beberapa cron. Tulis dengan **APPEND** (read dulu, baru tambah), jangan menimpa.

## 02:00 WIB — StudioSoft Healthcare harian (cron `studiosoft-healthcare-carousel-harian`) → run **hc46**

Hasil: **SEMUA TERJADWAL & TERVERIFIKASI** (scripts `studiosoft_healthcare_cron_run_hc46.py`, `verify_hc46.py`).

- 📱 **Threads SS** — carousel 5 slide (album `6ab574fd0723d7da88c3f9f2`), **26 Sep 2026 09:00 WIB**
  (`2026-09-26T02:00:00.000Z`) + 2 reply anak (`02:01Z` link artikel + CTA, `02:02Z` hashtag).
  Topik: **RE-AIR "Cara Klinik Kecantikan di Surabaya Bisa Ditemukan Lebih Cepat di Google"**
  (`/cara-klinik-kecantikan-di-surabaya-bisa-ditemukan-lebih-cepat-di-google/`, WP id 3767) —
  terakhir tayang di Threads SS **8 Sep 2026** (album 22:00) = **PALING TUA di antara artikel HC
  yang MASIH hidup**. Slide BARU `ss_hc46_klinikcan_01..05` (engine `ss_carousel_lib.py`,
  bg #122B63, rata kiri, blok tengah, tanpa separator, dot; JPEG q85 103–121 KB).
  Caption 466 char (hook netral: "dari lima langkah itu mana yang paling sering dilewatkan klinik?").
- 💼 **LinkedIn SS** — TEXT-only, **10 Okt 2026 23:00 WIB** (`2026-10-10T16:00:00.000Z`), 1.614 char,
  0 media, 0 replies (hook opini). Artikel: `rs-klinik-digital-marketing-2026`
  (terakhir tayang di LI SS 7 Sep 2026 = paling tua di LI & tidak pending).
- 🔵 **Facebook SS** — TEXT-only **tanpa media**, `replies=[]`, **25 Sep 2026 19:30 WIB**
  (`2026-09-25T12:30:00.000Z`), 1.041 char (hook netral). Artikel:
  `strategi-seo-terbaik-untuk-klinik-kecantikan-di-surabaya-tingkatkan-pasien-lewat-google`
  (di FB SS sebelumnya hanya 2× **error** 2 Agu & 2 Sep → belum pernah tayang).
- ✅ Verifikasi ulang per-ID: status `pending`, urutan media 1–5 benar, LI/FB 0 media & 0 replies,
  2 reply anak menempel ke album, 5/5 media **200 di KEDUA ingress** (153 & 217).

Catatan/penemuan:
- **Stok artikel healthcare baru MASIH HABIS.** WP REST 24 Sep: artikel terbaru
  `ai-dan-pekerjaan-digital-marketer-apa-yang-berubah` (24 Sep) = kategori AI, **non-healthcare**;
  kategori `healthcare-digital` (1042) tetap 4 post, semuanya sudah dipakai.
- ⚠️ **7 artikel HC seri hc masih 404** (dihapus dari studiosoft.id, temuan 24 Sep):
  strategi-digital-marketing-rumah-sakit · website-rumah-sakit-gagal-pasien ·
  iklan-facebook-rumah-sakit · klinik-kecil-butuh-digital-marketing ·
  konten-edukasi-kesehatan-kepercayaan-pasien · social-media-rumah-sakit-efektif ·
  data-analytics-rumah-sakit-kebutuhan-pasien. Sisa artikel HC hidup: 11 (lihat `hc46_audit.py`).
- Run ini verifikasi HTTP 200 tiap link artikel + media sebelum create (kandidat mati dilewati).
- `BAN_RE` di run ini **tidak** melarang kata "kecantikan" (topik memang klinik kecantikan) —
  beda dari run rumah_sakit sebelumnya; kalau tidak, caption engine-fallback selalu ditolak.
- State: `studiosoft_healthcare_state.json` index → **42**; log baris ditambahkan ke
  `studiosoft_healthcare_log.txt`.

## Analisis keyword StudioSoft (permintaan besar + pesaing sepinya) — 25 Sep

Bos minta keyword dengan peminat banyak, pesaing sepi, nilai terbaik untuk studiosoft.id.

Sumber: GSC 90 hari (25 Jun–23 Sep), 490 query, 84 dengan impresi ≥15. Skor 0–100 (permintaan 35, posisi
halaman terbaik 25, sinyal pecah 15, niat komersial 15, lokalitas 10).

**Temuan utama: 3 keyword uang sudah di halaman 1 lewat BERANDA, tapi cuplikannya gagal.**
- `digital marketing agency surabaya` — 357 imp, pos 5,8, 3 klik, CTR 0,84%
- `digital agency surabaya` — 350 imp, pos 9,9, 1 klik, CTR 0,29% (paling parah)
- `digital marketing surabaya` — 302 imp, pos 10,6, 3 klik, CTR 0,99%
- Total 1.009 imp → 7 klik. Potensi ~23 klik/90 hari hanya dari perbaikan judul+meta beranda
  (`drafts/studiosoft_homepage_judul_meta.md`, menunggu input manual Bos).

**Permintaan terbesar tapi halaman sendiri saling makan:** `jasa seo surabaya` 1.286 imp / 1 klik / CTR 0,08%
— **14 halaman** StudioSoft bertarung untuk keyword itu, halaman terbesar di posisi 29,5. Sejenis:
`seo agency surabaya` (13 halaman), `seo surabaya` (12), `digital marketing surabaya` (10).

**Paling sepi pesaing (posisi halaman 1 sudah tercapai, klik nol):** `jasa seo lokal` (pos 6,4),
`pakar seo surabaya` (pos terbaik 6), `jasa strategi branding campaign surabaya` (pos terbaik 5, 113 imp),
`marketing agency surabaya` (pos 10,3), `konsultan seo surabaya` (pos 6), `jasa seo di surabaya` (pos 5),
`jasa seo sidoarjo` (pos terbaik 13). Semua dilayani artikel daftar lama, bukan halaman layanan.

**Keterbatasan (jujur, penting):** persaingan SERP **tidak** terukur langsung — Google diblokir 403 dari
server ini (jina juga 403), Startpage kosong, Brave 429, Ecosia 403, Mojeek/DDG ngawur; **Bing bisa dibaca
tapi hasilnya tidak relevan untuk query Indonesia** (untuk `jasa seo sidoarjo` Bing menampilkan zhihu.com,
chiebukuro.yahoo, situs judi). Jadi "sepi pesaing" disimpulkan dari posisi nyata + kanibalisasi internal +
impresi GSC. Angka volume pencarian pasar butuh Google Ads API (Keyword Planner) yang belum ada aksesnya.

Laporan: `drafts/laporan_keyword_studiosoft_20260925.md`. Data: `drafts/ss_keyword_skor.json`,
`ss_keyword_final.json`, `ss_keyword_serp.json`. Script: `ss_keyword_nilai.py`, `ss_keyword_skor.py`,
`ss_keyword_peta_halaman.py`, `ss_serp_pesaing.py` (parser Bing bongkar base64 `u=a1...`).

## Celah keyword StudioSoft (yang belum ada halamannya) — 25 Sep

Lanjutan pertanyaan Bos: keyword terbaik yang BELUM ada di StudioSoft.

**AKAR MASALAH (temuan baru, penting):** 4 halaman pilar StudioSoft ternyata **teks tempelan identik 452–466
karakter** — `/seo/` (452), `/social-media/` (461), `/web-development/` (464), `/digital-marketing/` (466).
Isinya bahkan bercerita soal website, bukan SEO/sosmed. Halaman hidup hanya `/layanan/` + `/jasa-seo-professional/`.
Ini sebabnya keyword uang selalu mendarat di beranda atau artikel daftar lama. (13 page + 302 post = 315 terbit.)

**Celah berbukti (impresi GSC 90 hari, tanpa halaman yang menaungi, semua mendarat di beranda/artikel nyasar):**
1. **Google Ads / iklan** — 69 imp, 0 klik (`agensi iklan terbaik` 23/68,8 · `jasa google ads surabaya` 20/76 ·
   `jasa iklan google surabaya` 19/51,4 · `jasa iklan instagram surabaya` 5/77,2). Dijual di /layanan/.
2. **Maintenance WordPress** — 121 imp, 0 klik (`jasa maintenance wordpress` 91/59,5 · `...website wordpress` 23/61,6).
   Hanya artikel, tidak ada halaman layanan.
3. **Software house / aplikasi** — 66 imp (`perusahaan software di surabaya` 16/89,3 · `software house surabaya` 15/84,6 ·
   `software design` 6/**pos 7,3** · `software custom` 4/**pos 2,2**). Dijual: Aplikasi Mobile + Web App.
4. **Training/pelatihan** — 81 imp (`belajar digital marketing` 22/44,5 · `training digital marketing surabaya` 17/68,1).
5. **Konsultan SEO** — 106 imp (`konsultan seo terbaik` 59/57,4 · `konsultan google seo` 13/**12,9** · `konsultan
   internet marketing` 15/92,1). /jasa-seo-professional/ tak muncul karena tak pakai kata "konsultan".
6. **E-commerce/toko online** — 29 imp, pos 80–92 (tunda). 7. **Landing page** — 14 imp, pos 58–87 (tunda).
8. **Social media management** — 64 imp tapi **/social-media/ sudah ada** (461 char stub) → tinggal diisi;
   `social media agency surabaya` kini tersebar di 4 halaman (pos 19,2 · 34,5 · 44,1 · 48,7).

**GA4 tidak bisa dipakai memprioritaskan:** 90 hari hanya 1 form_submit, 1 form_start, 1 manual_event_CONTACT
(total kejadian: page_view 1.534, session_start 963, Cek_Event 636/uji coba, click 26). Sampel terlalu kecil.

Laporan: `drafts/laporan_celah_keyword_studiosoft_20260925.md`. Data: `drafts/ss_celah_tema.json`.
Script: `ss_celah_keyword.py`, `ss_celah_keyword2.py`, `ss_celah_halaman.py`, `ss_ga4_konversi_halaman.py`
(GA4 prop StudioSoft = `properties/478760195`).

## 2 artikel baru StudioSoft: Maintenance WordPress + Google Ads — 25 Sep

Arahan Bos (out-of-band): buat 2 artikel dari 2 celah teratas, 1 hari 1 artikel, tayang hari ini & besok.

**Dibuat & terjadwal (verifikasi ulang lolos semua):**
- **#9120** `/jasa-maintenance-wordpress-surabaya/` — fokus `jasa maintenance wordpress` — **1.101 kata** —
  meta 145 char — 5 FAQ + schema valid — tayang **25 Sep 19:00 WIB** — kategori 330 SEO + 23 Website —
  gambar media #9119 — 5 link internal.
- **#9122** `/jasa-google-ads-surabaya/` — fokus `jasa google ads surabaya` — **1.119 kata** — meta 154 char —
  5 FAQ + schema valid — tayang **26 Sep 19:00 WIB** — kategori 26 Digital Marketing — gambar media #9121 —
  3 link internal.

Slot 19:00 dipakai karena 15:00 (slot harian StudioSoft) sudah terisi: hari ini #7529, besok #7530.
Keduanya sudah pakai tombol WA standar (`ss-cta-wa`), FAQ + schema FAQPage, dan gambar bermerek 1200×630
(bg #1E40AF, dibuat dengan pola `gen_artikel_thumbnail.py`).

**Jebakan baru yang tercatat:** unggah media via REST **wajib** header `Content-Disposition: attachment;
filename="..."` — tanpa itu WP balas `400 rest_upload_no_content_disposition` (dua gambar pertama gagal).
Meta Yoast (`_yoast_wpseo_focuskw/_title/_metadesc`) **tersimpan** lewat REST di studiosoft.
Sudah ditambahkan ke skill `wordpress-seo-content-ops`.

**Risiko yang perlu Bos tahu:** artikel maintenance ini bersinggungan dengan artikel lama
#3525 `/jasa-pembuatan-maintenance-website-wordpress-surabaya/` (91 impresi, pos 59,5). Dua artikel satu topik
bisa saling makan. Opsi: konsolidasi (gabung isi #3525 ke #9120, lalu #3525 dipensiunkan) atau biarkan dulu
dan ukur 2-4 pekan.

Script: `ss_artikel_baru_20260925.py` (dry-run default; `--apply` untuk unggah + jadwalkan),
`ss_verif_artikel_baru.py` (audit pasca-tayang), `ss_cek_jadwal_struktur.py` (cek antrean + contoh struktur).

### Koreksi thumbnail (arahan Bos: "stop generate text gitu")

Bos minta thumbnail pakai **foto Pexels asli**, bukan gambar bertulisan yang gw buat sendiri:
- #9120 (maintenance) → **Pexels 1181449** (laptop menampilkan website) → media **#9127**
- #9122 (Google Ads) → **Pexels 6476578** (monitor menampilkan dashboard "Breakdown of Ad Spend") → media **#9128**
- Gambar bertulisan lama (media 9119, 9121, 9123, 9125) sudah dihapus dari pustaka.

**Jalur Pexels yang berhasil (penting, karena API mati):** 5 kunci API Pexels di `pexels_image.py`
semuanya balas **401** (mati/diblokir dari IP VPS ini). Cara yang jalan:
1. ambil ID foto lewat proxy: `curl -4 "https://r.jina.ai/https://www.pexels.com/search/<query>/"` →
   regex `pexels-photo-<id>`;
2. unduh langsung: `https://images.pexels.com/photos/<id>/pexels-photo-<id>.jpeg?auto=compress&cs=tinysrgb&w=1200`;
3. potong tengah ke 1000×567 + simpan WebP q90 (konsisten dengan gambar artikel StudioSoft lain).

Script: `ss_pexels_monitor.py` (uji kunci API), `ss_ganti_thumbnail_pexels.py`, `ss_final_thumbnail.py`.

## 11:07 WIB — ⛔ STOP TOTAL Nucleasoft (perintah Bos)

Bos: "tolong semua aktifitas untuk nucleasoft di hentikan".

Yang dicek & hasilnya:

- **Hermes cron** semua profile (atun 18 job, suwarno 2, mili/ujang/wati tidak punya jobs.json) → **0 job Nucleasoft**.
  Tidak ada yang perlu dipause.
- **crontab sistem** (0 baris aktif), **systemd** (tidak ada), **openclaw cron** (`cron_jobs.db` kosong),
  **proses jalan** (cuma hermes gateway + media server :8123) → bersih.
- **Repliz**: tarik **2.341 jadwal** (semua halaman, limit=100) → **0 jadwal Nucleasoft**.
  Akun `Nucleasoft Digital Indonesia` (LinkedIn `6a3a60cfc5ff4ce3a32525bc`, username `nucleasoft`)
  masih connected tapi tanpa jadwal. Tidak ada akun Nucleasoft lain.
- **Domain WP `otomasibisnispintar.com` = SERVFAIL** (NS Rumahweb menolak query, zona hilang).
  Domain aktif s/d 7 Mei 2027; masalahnya di DNS/hosting, bukan mesin ini.
  Cron default profile sudah menandai domain ini rusak sejak 23 Sep.
- Pipeline artikel web terakhir jalan 12 Agu 2026 (post Nucleasoft id 4309) — cron-nya sudah tidak ada.

Aksi: `cfg_nucleasoft.py` → **`STOPPED_nucleasoft_config.py`** (rename) supaya `run_artikel_harian.sh`
(loop `cfg_*.py`) dan `publish_harian_web.py` (glob `cfg_*.py`) tidak bisa publish ke Nucleasoft lagi —
dites: `get_creds_for_client('Nucleasoft')` → `None` → pipeline SKIP; EveryBe & DAS tetap normal.
Blok STOP ditulis di `MEMORY.md` + `memory/2026-09-25.md`. Revert: `mv STOPPED_nucleasoft_config.py cfg_nucleasoft.py`.

Masih nunggu keputusan Bos: (1) apakah `otomasibisnispintar.com` dicabut dari daftar domain cron default
`WP Rocket Cache Rebuild Semua Klien` (`d0b98dc7afbc`, tiap jam); (2) akun LinkedIn Nucleasoft di Repliz
mau diputus atau dibiarkan.

### 11:4x WIB — keputusan Bos: "1. cabut . 2. putus"

- ✅ **Domain dicabut dari cron default profile.** `HERMES_HOME=/home/mantapman/.hermes hermes cron edit d0b98dc7afbc --prompt ...`
  (profil default ditembak lewat env `HERMES_HOME`; `HERMES_PROFILE` tidak berpengaruh di CLI ini).
  Verifikasi baca ulang `~/.hermes/cron/jobs.json`: prompt sekarang **10 domain**, string `otomasibisnispintar` sudah
  tidak ada di daftar (cuma catatan "situs klien Nucleasoft sudah dikeluarkan 25 Sep 2026"). Schedule tetap `0 * * * *`, enabled.
- ✅ **Akun Repliz diputus.** `DELETE /public/account/6a3a60cfc5ff4ce3a32525bc` → `{"success": true}`.
  Verifikasi: `GET /public/account/{id}` → HTTP 404 `account not found`; daftar akun Repliz **41 → 40**,
  tidak ada Nucleasoft lagi. LinkedIn tersisa: LEIT, TSLaw, TSC, DMark, Uky, StudioSoft.
  Kalau nanti mau nyambung lagi: Bos harus authorize ulang dari dashboard Repliz.
- Job default tersebut terakhir jalan 04:32 UTC.

### 11:5x WIB — jadwal WP Rocket Rebuild diubah (perintah Bos)

Bos: "untuk cron default profile WP Rocket Cache Rebuild jangan tiap jam, tapi tiap 3 hari sekali jam 00.00".

- `HERMES_HOME=/home/mantapman/.hermes hermes cron edit d0b98dc7afbc --schedule "0 17 */3 * *"`
- Verifikasi `~/.hermes/cron/jobs.json`: expr `0 17 */3 * *`, `state=scheduled`, `next_run_at=2026-09-25T17:00:00Z`.
- Cron di Hermes pakai **UTC**: `0 17` UTC = **00:00 WIB**. Jadwal berikutnya (dicek croniter):
  26 Sep, 29 Sep, 2 Okt, 5 Okt, 8 Okt, 11 Okt — semuanya 00:00 WIB.
- Efeknya run 13:00 WIB hari ini dibatalkan (dulu tiap jam). Isi prompt tetap 10 domain tanpa Nucleasoft.

## Responsivitas studiosoft.id — halaman melebar (24/25 Sep, temuan dari Bos)

Bos kirim tangkapan layar ponsel: halaman studio]soft.id tampil mengecil dan bisa di-zoom out.

**Diagnosa (Playwright headless, python3.12):**
- Meta viewport **benar** (`width=device-width, initial-scale=1`) — jadi bukan itu penyebabnya.
- Halaman melebar **2130px** pada layar 390px (kelebihan 570px); di desktop 1280px malah **2392px** (kelebihan 1112px).
  Jadi masalahnya bukan cuma di ponsel.
- Biang kerok: **widget "Rekomendasi" = Google Reviews / Trustindex** (plugin *Widget untuk Google Reviews* v14.2)
  di Footer Widget 4 (`section#block-17`). Isinya berlebar tetap **±2100-2132px**.
- Kolom grid footer Astra ikut melebar karena bawaan `min-width: auto` pada grid/flex
  (`.site-footer-primary-section-4` → 2100px).
- Widget-nya sendiri tampil normal (10 ulasan, skor Google 5.0 dari 11 ulasan) — tidak rusak.

**Perbaikan yang sudah diuji (bukan dugaan):** `min-width:0` + `max-width:100%` pada kolom footer dan
pembungkus widget. Hasil uji: 390px → 390 (0 kelebihan), 768px → 768, 1280px → 1280. Ulasan tetap tampil.
Berkas siap tempel: `drafts/studiosoft_fix_responsive_trustindex.css` (Astra → CSS Tambahan, atau WPCode CSS Snippet).

**Catatan:** tidak bisa gw pasang sendiri — post type `wpcode` tidak dibuka ke REST (`/wp-json/wp/v2/types`
tidak memuat `wpcode`), jadi snippet CSS harus ditempel manual oleh Bos. Sesudah pasang: clear WP Rocket +
purge Cloudflare (HTML situs ini di-cache di edge).

Script: `ss_diagnosa_responsive.py`, `ss_overflower_cek.py`, `ss_overflower_telusuri.py`, `ss_overflower_sumber.py`,
`ss_uji_css_responsive.py`, `ss_uji_css_ringkas.py`, `ss_uji_fix_final.py`, `ss_cek_widget_ulasan.py`,
`ss_peta_node_widget.py`, `ss_uji_loader_trustindex.py`.

## Perbaikan TSLaw (tslaw.id) — 25 Sep

Bos: "cek TSLaw" lalu "ok bereskan, tapi pastikan untuk home biar aku sendiri".

**Angka awal:** GSC 28d 14 klik/525 imp (CTR 2,67%); 90d 37 klik/1.371 imp. GA4 90d 161 sesi
(Organic Search 53, Direct 89, Social 17). Beranda = 47% impresi & 78% klik seluruh situs.
Properti: GSC `https://www.tslaw.id/`; GA4 `properties/537990618`.

**Dikerjakan (semua terverifikasi live):**
1. ✅ `/sample-page/` (halaman bawaan WP) → Trash; URL kini **404**.
2. ✅ Zona waktu WP `''` (UTC) → **Asia/Jakarta** lewat `POST /wp/v2/settings` (tidak ada artikel terjadwal, jadi aman).
3. ✅ 4 halaman tadinya **tanpa judul SEO & meta sama sekali** kini lengkap: `/tentang/` (pos 6,7 · 85 imp ·
   0 klik) "Tentang Tito Suprianto Law Firm, Advokat Surabaya" · `/practice-areas/` "Layanan Hukum Tito
   Suprianto Law Firm Surabaya" · `/hubungi/` "Hubungi Kami | Konsultasi Hukum Surabaya" · `/artikel/`
   "Artikel Hukum dan Panduan Praktis". **Beranda TIDAK disentuh** (tetap "Beranda - Tito Suprianto Law Firm").

**⚠️ Jebakan besar (sudah masuk skill):** meta Yoast TSLaw **tidak terdaftar di REST** — `POST /wp/v2/pages/<id>`
dengan `{"meta":{...}}` balas **200 tanpa menyimpan** (walau user administrator). Jalur yang jalan:
**XML-RPC** `wp.editPost` + `custom_fields` (app password sama) → balas `<boolean>1</boolean>`, verifikasi
`/wp-json/yoast/v1/get_head?url=...`. Beda dari studiosoft yang REST-nya jalan.

**Masih menunggu Bos:** (a) judul+meta beranda; (b) kecepatan 6,4–9,6s — WP Rocket: nyalakan lazy load
(33/33 gambar tanpa `loading=lazy`), gabung CSS/JS (13 CSS, 36 script), HTML 862 KB; (c) cache HTML Cloudflare
masih `DYNAMIC` (butuh token CF); (d) pelacakan konversi **0 kejadian** — nyalakan GA4 Enhanced measurement
"Form interactions" + "Outbound clicks" (tidak diekspos API GA4); (e) Spectra v3.0.0-**beta** di produksi;
(f) belum ada plugin keamanan; (g) redirect 2 lompatan (http→apex→www).

Laporan: `drafts/laporan_cek_tslaw_20260925.md`, `drafts/laporan_perbaikan_tslaw_20260925.md`.
Script: `tslaw_cek_menyeluruh.py`, `tslaw_gsc_ga4.py`, `tslaw_lanjutan.py`, `tslaw_sebelum_beres.py`,
`tslaw_bereskan.py`, `tslaw_diag_meta.py`, `tslaw_uji_xmlrpc.py`, `tslaw_xmlrpc_meta.py`,
`tslaw_meta_lanjut.py`, `tslaw_verif_live.py`.

## Dojo Ksatria IG — video Timotius Arjuna (sudut biru), kejuaraan taekwondo Surabaya

- **Perintah Bos (25 Sep 2026, 20:28 WIB):** "Tun pasang ini di IG Ksatria Dojo. Penampilan dari
  Timotius Arjuna (Sudut Biru)" + kirim video Telegram `video_7390ac368c22.mp4`
  (9,08 MB, 848×464 landscape, 43,2 s, 30 fps, H.264, **tanpa audio**).
- **Isi video diperiksa sendiri (ffmpeg frame + vision):** ini **kyorugi taekwondo**, bukan karate —
  atlet pakai dobok + pelindung dada (hogu) + pelindung kepala berpelindung wajah, sarung tangan
  biru vs merah, papan skor elektronik. Banner di meja juri terbaca samar "…PIALA … SURABAYA"
  (tidak cukup jelas untuk dikutip di caption, jadi nama kejuaraan tidak ditulis).
- **Antrean akun saat tugas:** 0 pending (jadwal terakhir yang tayang 22 Sep 09:00 WIB =
  video Muhammad Bintang). Slot jadi = **26 Sep 2026 09:00 WIB** (`2026-09-26T02:00:00.000Z`).
- **Media:** salinan asli `openclaw-img/dojo_timotius_arjuna_01.mp4` + versi 9:16 blur-pad
  `dojo_timotius_arjuna_01_9x16.mp4` (1080×1920, 14,5 MB, 2,8 Mbps, H.264) + thumbnail 1080×1920
  (frame detik 8,6). URL diverifikasi 200 lewat KEDUA ingress funnel (.153 & .217).
- **Caption:** 571 char, 10 hashtag huruf kecil, 0 mention, `replies=[]`, topic "Taekwondo".
- **Hasil:** jadwal `6ab6784e74292ea3cb6f9f8d`, status `pending`, 26 Sep 2026 09:00 WIB —
  diverifikasi lewat fetch ULANG dari API (persis 1 jadwal dengan media itu).
- Script: `schedule_dojo_timotius_arjuna.py` (idempoten, hitung slot otomatis dari antrean,
  dry-run default, `--schedule` untuk create). Log: `dojo_ksatria_log.txt`.
- ⚠️ **Belum dieksekusi:** video **Saladien Keane Handoko** (perintah 15 Sep) tidak pernah sampai —
  kiriman Telegram 25,4 MB ditolak (limit 20 MB), file tidak ada di cache → nol jadwal. Sudah
  ditawarkan ke Bos: mau disusulkan di slot 27 Sep 09:00 WIB?

## ⚠️ INSIDEN & PEMULIHAN TSLaw — beranda kosong (25 Sep)

**Kesalahan gw:** menulis `post_content` lewat **XML-RPC** dengan helper yang **tidak meng-escape XML**.
Teks pengganti H1 memuat `&` ("Law Firm & Konsultan Hukum Surabaya") → muatan XML rusak → WordPress
menyimpan konten KOSONG. Dampak: **beranda #833** (125.151 char blok Spectra → 0) dan **/hubungi/ #10**
(22.503 → 21 char). Bos melihat sendiri ("Nah kan"), lalu memerintahkan "Pulihkan kembali".

**Pemulihan:**
- `/hubungi/` **utuh kembali** dari revisi WordPress **#3413** (22.503 char), lalu lorem ipsum + nomor palsu
  `+1 1184 4457 44` diganti nomor asli `+62 819 0922 2026` (lewat REST).
- **Beranda dibangun ulang** dari bahan situs sendiri: hero (blok asli dari `/tentang/`, judul diganti),
  tentang, 9 layanan (teks asli `/practice-areas/`), 4 langkah kerja, 10 FAQ + schema FAQPage, penutup
  "Kami Bantu Selesaikan Masalah Hukum Anda" (blok asli dari `/artikel/`, disalin apa adanya). Ditulis lewat
  **REST** (bukan XML-RPC). Hasil: 843 kata, H1 "Law Firm & Konsultan Hukum Surabaya", tidak meluber di
  ponsel, 0 error JS.
- **Yang tidak kembali:** bagian **Penghargaan** dan **Testimoni Klien** — isinya tidak pernah terbaca
  sebelum insiden, dan gw TIDAK mengarang. Menunggu isi dari Bos, atau restore backup hosting (ID 833).

**Jalan pemulihan yang sudah dicoba & gagal:** revisi WP (#833 hanya punya 1 revisi = versi kosong),
autosave 0, cache WP Rocket 404, Cloudflare DYNAMIC (HTML tak pernah di-cache), Wayback 0 snapshot,
cache Bing tidak ada.

**Aturan baru (masuk skill `wordpress-seo-content-ops`):** (1) JANGAN tulis `post_content` lewat XML-RPC —
pakai REST JSON; (2) kalau terpaksa XML-RPC, escape `& < >`; (3) **SIMPAN salinan konten asli ke berkas
sebelum menulis apa pun** — konten 125 KB itu gw baca 3x tapi tak sekali pun disimpan.

**Sisa untuk Bos:** meta description beranda diatur di Yoast Search Appearance → Homepage (bukan di halaman),
teks usulan sudah disiapkan; dan restore backup ID 833 kalau mau persis seperti semula.

Laporan: `drafts/insiden_tslaw_beranda_kosong.md`. Salinan pengaman: `tslaw_pemulihan/salinan/`,
`tslaw_pemulihan/beranda_baru.txt`. Script: `tslaw_perbaikan_beranda.py`, `tslaw_pulihkan_hubungi.py`,
`tslaw_bangun_beranda.py`, `tslaw_rapikan_akhir.py`, `tslaw_verif_pulih.py`, `tslaw_verif_semua.py`.

## TSLaw — keyphrase disamakan dengan data GA4/GSC (25 Sep)

Bos: "cek itu keyword / keyphrase, sesuaikan dengan yang ada di GA4".

**Yang diubah:** keyphrase beranda `firma hukum surabaya profesional` → **`law firm surabaya`**
(diverifikasi baca-ulang lewat XML-RPC). Dasar: GSC 90 hari — `law firm surabaya` **36 impresi** (pos 27,3)
vs keluarga `firma hukum surabaya` cuma **6 impresi** (pos 25,5); `konsultan hukum surabaya` 11 impresi (pos 32,1).

**Batas GA4 yang perlu diingat:** GA4 **tidak menyimpan query organik**. Yang bisa dibaca: halaman pendaratan,
kanal, kota, perangkat. GA4 TSLaw 90 hari: 53 sesi organik, **21 di antaranya mendarat di beranda** (26 detik),
kota teratas **Jakarta 13 · Surabaya 6 · Medan 4**, perangkat desktop 121 vs mobile 40. Fungsi Keyword Hero di
dua klien lain justru ada karena keterbatasan ini.

**⚠️ Temuan penting:** ada **5 baris `_yoast_wpseo_focuskw` kembar** di beranda (dan baris kembar juga pada
`_yoast_wpseo_title` + `_metadesc`). Penyebabnya `wp.editPost` + `custom_fields` **menambah baris baru**, tidak
memperbarui; WordPress membaca baris pertama (`meta_id` terkecil) sehingga penulisan "berhasil" tapi nilai tak
berubah. Perbaikannya: kirim `{"id": <meta_id>, "key": ..., "value": ...}` untuk SEMUA baris kembar. Baris
kembar tak bisa dihapus lewat API — perlu phpMyAdmin/WP-CLI. Dampak ke tampilan: tidak ada.

**Rekomendasi yang belum dikerjakan (menunggu arahan):**
- Query merek dapat **posisi halaman 1 tapi NOL klik**: `pengacara ts` 48 impresi pos 5,8 · `ts law firm`
  36 impresi pos 6,5 (90 hari). Opsi: taruh nama merek di depan judul beranda
  (`Tito Suprianto Law Firm | Law Firm Surabaya`) — keputusan Bos karena beranda.
- GA4 menunjukkan artikel yang benar-benar mendatangkan kunjungan organik: `/panduan-cerai-gugat/`
  (8 sesi, 42s) dan `/panduan-membuat-surat-wasiat/` (6 sesi, 49s) → topik ini yang layak dilanjutkan.

Script: `tslaw_cocok_keyphrase.py`, `tslaw_keluarga_keyword.py`, `tslaw_baca_keyphrase2.py`,
`tslaw_set_keyphrase.py`, `tslaw_perbaiki_keyphrase.py`. Skill dirapikan: `Pitfalls learned` (15,5k char)
dipindah ke `references/pitfalls.md` supaya SKILL.md kembali di bawah batas ukuran.

## ⚠️ Ratakan skill `wordpress-seo-content-ops` (25 Sep)

SKILL.md sudah 99.917 char (batas 100.000) → bagian **Pitfalls learned (15.559 char)** dipindah ke
`references/pitfalls.md`, SKILL.md jadi **84.730 char**. Pelajaran baru ditambahkan di berkas itu:
(1) `wp.editPost`+`custom_fields` menambah baris meta kembar (kasus TSLaw 5 baris keyphrase);
(2) GA4 tidak menyimpan query organik → pakai GA4 untuk halaman/kanal/kota, GSC untuk query;
(3) query merek bisa posisi halaman 1 dengan nol klik. Script: `rapikan_skill.py`.

## TSLaw — 2 artikel listikel baru tayang (25 Sep)

Perintah Bos: "kasih artikel tentang 10 pengacara/konsultan hukum terbaik untuk gugat cerai dan (angka)
pengacara untuk surat wasiat. pastikan no 1 Tito Suprianto Law Firm dan ada link yang mengarah ke home.
pastikan artikel sesuai aturan. kita perbanyak artikel listikel".

**Tayang & terverifikasi:**
- **#3454** `/pengacara-gugat-cerai-surabaya/` — "10 Pengacara Gugat Cerai di Surabaya | Panduan 2026" —
  1.168 kata (1.385 kata di halaman live) · meta 153 char · fokus `pengacara gugat cerai surabaya`
- **#3456** `/pengacara-surat-wasiat/` — "7 Pengacara & Konsultan Hukum Surat Wasiat | Panduan" —
  1.032 kata (1.245 live) · meta 150 char · fokus `pengacara surat wasiat`

Keduanya: **no.1 = Tito Suprianto Law Firm dengan link ke beranda** ✅ · tombol WA (`wa.me/6281909222026`) ✅ ·
FAQ 5 + schema FAQPage ✅ · kategori Hukum Bisnis (14) + 4 tag ✅ · foto Pexels (7876037 penandatanganan
dokumen cerai, 18854010 penandatanganan dokumen) ✅ · kategori/tag/featured/meta diverifikasi baca-ulang ·
tidak meluber di ponsel (395 vs 395) · 0 error JS.

**Keputusan editorial yang gw ambil:** entri 2-10 diisi **lembaga/peran yang benar-benar ada** (LBH Surabaya,
Posbakum Pengadilan Agama, organisasi advokat seperti Peradi, notaris/PPAT, mediator, konsultan warisan) —
BUKAN nama firma pesaing dengan klaim karangan. Pencarian lewat Bing tidak bisa dipercaya untuk query Indonesia
(hasilnya Zhihu/Wikipedia), jadi mengarang nama firma berisiko. Angka untuk artikel kedua gw pilih **7**.

**Catatan:** foto artikel cerai memuat tulisan "DIVORCE DECREE" berbahasa Inggris — bisa diganti kalau Bos mau.

Script: `tslaw_listikel_1.py`, `tslaw_listikel_2.py`, `tslaw_publish_listikel.py`,
`tslaw_terbitkan_listikel.py`, `tslaw_potret_listikel.py`, `tslaw_cari_foto2.py`.

## TSLaw — robots.txt, slug /layanan/, dan jadwal 2 hari (27 Sep)

- **robots.txt kustom tayang.** Sempat balas **403 dari nginx** (bukan Cloudflare) karena izin berkas —
  Bos memperbaiki, sekarang **HTTP 200, 1.562 char, 14 aturan** (wp-admin, wp-login, /?s=, /search/,
  /author/, /feed/, replytocom, xmlrpc) + Sitemap. Isi live sudah dibandingkan baris per baris dengan
  berkas `drafts/tslaw_robots.txt`: SESUAI.
- **Arsip penulis dimatikan Bos** → `author-sitemap.xml` hilang dari sitemap (5 → 4 entri). `/author/` masih
  200 tanpa noindex, jadi diblokir lewat robots.
- **Slug halaman Layanan berubah** `/practice-areas/` → `/layanan/` (Bos, 11:22). Akibatnya tautan di 2
  artikel baru jadi 404 → **diperbaiki**: 4 tautan per artikel dialihkan ke `/layanan/`, dan pindai ulang
  seluruh situs (isi, menu, widget, sitemap) → **0 sisa** `practice-areas`. Bos tidak mau redirect 301.
- **Cron artikel listikel diubah ke 2 hari sekali** (arahan Bos): job `7da22170f392` → nama
  `tslaw-listikel-2hari`, jadwal `every 2880m`, run berikutnya 29 Sep. Tetap **draft + lapor**.
- **Dokumen baru:** `drafts/tslaw_target_keyword.md` (peta kata kunci 4 lapis + cara ukur kemajuan),
  `drafts/tslaw_robots.txt`, `drafts/tslaw_redirect_practice_areas.txt` (tidak dipakai).
- Verifikasi pasca-purge Cloudflare: robots 200 (14 aturan) · 5 halaman 200 dengan judul benar · 2 listikel
  200 (1.385 & 1.245 kata, meta 153/150, tombol WA, schema FAQ, 0 tautan lama) · sitemap 4/56/5 entri dan
  kedua artikel baru sudah masuk · `/practice-areas/` & `/sample-page/` 404.

Script: `tslaw_cek_robots.py`, `tslaw_verif_robots.py`, `tslaw_pindai_practice.py`, `tslaw_fix_link_layanan.py`,
`tslaw_cek_robots3.py`, `tslaw_cek_403_body.py`, `tslaw_verif_purge.py`.

## TSLaw — judul & meta beranda diganti (27 Sep, arahan "ok lakukan")

- Judul SEO beranda: `Law Firm Surabaya | Tito Suprianto Law Firm` →
  **`Tito Suprianto Law Firm | Law Firm Surabaya`** (43 char). Alasan: 84 impresi query merek
  (`pengacara ts` 48, `ts law firm` 36) sudah di posisi 5-6 tapi **nol klik**; nama merek di depan
  supaya pencari merek langsung mengenali. Kata kunci lokal tetap ada di judul.
- Meta description: → **"Law firm Surabaya untuk sengketa tanah, kontrak bisnis, merek dagang, dan legalitas
  usaha. Konsultasi gratis bersama advokat Tito Suprianto Law Firm."** (149 char).
- Diverifikasi live: judul, meta desc, **og:title & og:description ikut berubah**, canonical benar.
  Isi halaman tidak tersentuh (H1 "Law Firm & Konsultan Hukum Surabaya", 856 kata, tombol WA ada).
- Salinan nilai lama: `tslaw_pemulihan/yoast_beranda_lama.json` (3 baris judul + 4 baris meta).
- Catatan: setelan Yoast (`wpseo_titles`) **tidak bisa dibaca lewat `wp.getOptions`** (respons cuma 187 char),
  jadi jalur yang dipakai adalah meta halaman — dan jalur itu memang mengendalikan judul/meta beranda.
- Perlu diukur 1-2 pekan: apakah CTR query merek naik dari 0.

Script: `tslaw_baca_setelan_yoast.py`, `tslaw_ubah_judul_meta_beranda.py`, `tslaw_verif_beranda_meta.py`.

## The Skin Code Clinic — audit artikel + pelacakan konversi (27 Sep)

Kredensial: `cfg_tsc.py` (user `watibot`, administrator, id 21). GSC `https://www.theskincodeclinic.com/`,
GA4 `properties/490140645`.

**⚠️ Koreksi yang gw lakukan:** laporan pertama gw salah ambil properti GA4 (skrip mencocokkan kata "skin" dan
properti terakhir yang cocok = surabaya-skincentre.com). Angka "2.140 sesi / 105 form_submit / lima halaman 404"
itu milik SSC, bukan TSC. Angka TSC yang benar: GA4 90 hari **262 sesi / 173 pengguna**; GSC 90 hari
**96 klik / 7.382 impresi**. Karena itu `drafts/laporan_cek_theskincode_20260927.md` ditulis ulang.
Pelajaran: **selalu pisahkan data GA4 dengan dimensi `hostName`** sebelum melapor.

**Audit 167 artikel:** 89 punya impresi GSC · 52 dapat sesi GA4 · **142 tanpa tautan keluar** · 149 yatim ·
106 di bawah 800 kata · 0 tanpa gambar utama.

**Pass tautan internal: SELESAI — 165 dari 167 artikel** dapat blok "Baca juga" (3 tautan terkait per artikel).
Salinan sebelum perubahan: `tsc_pemulihan/salinan_link/post_<id>.txt`.

**Meta 4 artikel prioritas diselaraskan** (berimpresi tapi nol klik; judul lama 61-66 char → 45-60 char,
nama merek masuk judul): #9266 `The Skin Code Clinic: Kenapa Pasien Memilih dr. Avril` · #1709
`DNI Clinic Krian Kini The Skin Code Clinic: Apa yang Berubah` · #8464 `The Skin Code Clinic Krian | Klinik
Kulit & Kelamin` · #9268 `FAQ Dokter Kulit Krian | The Skin Code Clinic`. Semua diverifikasi live.
Salinan meta lama: `tsc_pemulihan/meta_lama/meta_artikel_lama.json`.

**Pelacakan konversi (nomor 2 yang diminta Bos):** GA4 TSC punya **izin tulis**, jadi gw tandai kejadian
`click` sebagai **key event** (`properties/490140645/keyEvents/15853719379`). Dasar: kejadian `click` ternyata
klik keluar, dan **16 dari 22 adalah klik WhatsApp** (api.whatsapp.com 13x · wa.me 6285117444417 2x ·
wa.me 6281335114324 1x), sisanya Instagram 3x + Google Maps 3x. Catatan: situs TSC **tidak punya formulir
sama sekali** (0 elemen `<form>`), jadi konversinya memang WhatsApp, bukan form. Untuk presisi (memisahkan
WA dari Instagram/Maps) perlu kejadian khusus (`klik_wa`) via snippet/GTM — sisi Bos.

**Temuan mengganggu:** beranda tidak stabil — 3,1s sampai **timeout >45s** (5 percobaan), sementara
`/faq-dokter-kulit-krian/` 1,7s. Apex `theskincodeclinic.com` juga kadang timeout (dan sempat 404).
Tiga nomor WhatsApp berbeda muncul di data klik: 6285194936363, 6285117444417, 6281335114324.

**Penghalang beranda:** penulis halaman beranda (#409) menunjuk **user ID 2 yang sudah tidak ada** →
semua penulisan lewat XML-RPC ke halaman itu ditolak *"Invalid author ID"*. REST juga tidak mengekspos kunci
meta Yoast. Jadi judul/meta beranda harus dipasang manual oleh Bos (teks sudah disiapkan di
`tsc_pemulihan/judul_meta_beranda_untuk_dipasang.txt`, sidik jari isi halaman `7f1cb74ec2e37c71`).

Script: `tsc_audit_artikel.py`, `tsc_link_internal.py`, `tsc_meta_prioritas.py`, `tsc_selaras_meta.py`,
`tsc_selaras_lanjut.py`, `tsc_cek_klik.py`, `tsc_buat_key_event.py`, `tsc_cek_beranda_link.py`.

### TSC — perluasan artikel tipis (batch 1 & 2, 27 Sep)

Aturan yang dipakai: sisipkan bagian BARU sebelum heading `FAQ` (atau `Kesimpulan`), isi lama tidak diubah,
tanpa mengarang fakta klinik (tanpa harga/jam/klaim), salinan tiap artikel disimpan ke
`tsc_pemulihan/salinan_tipis/post_<id>.txt` sebelum ditulis.

| # | artikel | sebelum | sesudah |
|---|---|---|---|
| 9266 | kenapa-dr-avril-the-skin-code-clinic | 563 | **858** |
| 1675 | dokter-kulit-kelamin-sidoarjo | 665 | **950** |
| 1697 | 5-makanan-dan-kebiasaan-...kutil-kulit | 464 | **819** |
| 1713 | mengenal-4-grade-jerawat-... | 741 | **995** |
| 1672 | klinik-dni-sidoarjo-spesialis-kulit-... | 434 | **777** |
| 1662 | dokter-avril-novianto-sp-dve-... | 545 | **749** |

Sisa antrean: 50 artikel tipis yang masih berimpresi, lalu 50 artikel tipis nol impresi
(daftar di `drafts/tsc_tipis_urutan.json`). Script: `tsc_urut_tipis.py`, `tsc_baca_tipis.py`,
`tsc_panjangkan_1.py`, `tsc_panjangkan_2.py`.
