# Laporan Fase 1 — Klaster «digital agency surabaya» (StudioSoft)

Dikerjakan 6 Oktober 2026, 10:15–11:05 WIB. Lima item fase 1 dari
`drafts/rencana_90hari_studiosoft_20261007.md`, semuanya tuntas dan sudah diperiksa di halaman live.

## Ringkasan

| # | Pekerjaan | Ukuran selesai | Hasil |
|---|---|---|---|
| 1 | 4 artikel pendukung bertema agensi, 1.000–1.300 kata, menautkan ke halaman daftar | 4 artikel terbit | ✅ 4 terbit (#9260, #9288, #9290, #9292) |
| 2 | Tombol WhatsApp "Konsultasi Gratis" di setiap artikel baru | 4/4 | ✅ 4/4 tampil di halaman live |
| 3 | 15 artikel lama paling relevan ditautkan ke halaman daftar agensi | 15 tautan | ✅ 15/15 tersimpan dan tampil |
| 4 | Perbaikan judul + meta 10 artikel bertayangan tapi nol klik | 10 artikel | ✅ 10/10 judul & deskripsi terpasang |
| 5 | Pemantauan posisi mingguan lewat Serper | catatan mingguan | ✅ titik awal tercatat (posisi #8) |

## Item 1 dan 2 — empat artikel pendukung

Semua artikel memakai tombol WhatsApp `wa.me/6281935000624` dan menautkan ke
`/digital-agency-terbaik-di-surabaya/` serta satu halaman layanan terkait.

- **#9260** · `cara-memilih-digital-agency-surabaya` · 1.129 kata · terbit 06 Okt 10:07 WIB
  Tujuh pertanyaan yang wajib ditanyakan saat menilai calon agensi.
- **#9288** · `biaya-digital-agency-surabaya` · 1.064 kata · terbit 06 Okt 10:35 WIB
  Model pembayaran, apa saja yang termasuk, dan pos biaya yang sering tidak dicantumkan.
- **#9290** · `digital-agency-vs-freelancer-vs-in-house` · 1.064 kata · terbit 06 Okt 10:40 WIB
  Perbandingan empat sisi plus cara menguji penyedia sebelum kontrak setahun.
- **#9292** · `tanda-digital-agency-bekerja-dengan-benar` · 1.041 kata · terbit 06 Okt 10:44 WIB
  Enam tanda yang bisa dicek sendiri, jadwal tiga bulan pertama, dan tanda bahaya.

Pemeriksaan `ss_fase1_verif_artikel.py`: keempatnya HTTP 200, kata dalam baku 1.000–1.300,
tombol WA ada, tautan ke halaman daftar ada, judul dan deskripsi Yoast cocok dengan yang direncanakan.

**Perbaikan tambahan:** artikel #9260 yang sudah tayang ternyata memuat 8 em dash, melanggar aturan
humanizer. Sudah diganti (jadi 0) dan isinya diperbarui lewat REST; halaman live bersih.

## Item 3 — 15 tautan internal ke halaman daftar agensi

Disisipkan sebagai satu paragraf penutup dengan jangkar «daftar digital agency terbaik di Surabaya»,
empat variasi kalimat supaya tidak seragam. Empat artikel daftar (agensi) memakai kalimat khusus
Surabaya agar tidak bersaing dengan halaman tujuan.

- #7855 Digital Marketing Agency Surabaya: Cara Memilih Partner
- #3124 Jasa Digital Marketing Surabaya
- #3474 Top 7 Jasa Digital Marketing Surabaya
- #2775 10 Tips Memilih Digital Agency yang Tepat
- #2917 Jasa SEO Surabaya: 7 Pilihan
- #2997 Solusi Bisnis Modern: Jasa Digital Marketing StudioSoft
- #3579 Jasa Digital Marketing Sidoarjo
- #3604 5 Keunggulan Jasa SEO Sidoarjo
- #3654 5 Paket Jasa SEO Malang
- #8079 Jasa Strategi Branding Campaign Surabaya
- #2923 9 Agensi Digital Surabaya Paling Kreatif
- #2913 10 Digital Agency Terbaik
- #2992 Butuh Hasil Nyata? Jasa Digital Marketing Terbaik
- #3007 10 Marketing Agency Surabaya Terbaik 2026
- #3004 Branding Agency Surabaya untuk Skincare

Salinan isi sebelum perubahan tersimpan di `ss_fase1_backup/`. Verifikasi: 15/15 tersimpan di WP
dan jangkarnya muncul di halaman live.

## Item 4 — 10 artikel nol klik: judul dan meta diperbaiki

Sepuluh artikel dengan tayangan terbanyak yang tidak menghasilkan satu klik pun (GSC 90 hari,
rentang 28 Jun–4 Okt 2026). Tujuh di antaranya belum punya judul Yoast sama sekali, dan empat
deskripsinya terpotong di tengah kalimat.

| # | Tayangan | Judul baru | Deskripsi (panjang) |
|---|---|---|---|
| 2913 | 1.173 | 10 Digital Agency Terbaik di Indonesia 2026 | 143 char |
| 3677 | 430 | 5 Jasa SEO Surabaya Terbaik untuk Bisnis Kecil | 149 char |
| 3001 | 392 | 5 Tips Memilih Branding Agency Surabaya | 140 char |
| 3483 | 320 | Jasa Pembuatan Website WordPress Surabaya | 145 char |
| 7330 | 297 | Berapa Biaya Jasa Pembuatan Website? Rincian 2026 | 142 char |
| 3881 | 238 | Tools Analisis Kompetitor Media Sosial: 10 Cara | 147 char |
| 3138 | 197 | Jasa SEO Surabaya: Proses, Laporan, dan Hasil | 137 char |
| 3645 | 154 | 8 Ciri Jasa SEO Malang yang Profesional dan Aman | 143 char |
| 3770 | 154 | Jasa Pembuatan Website Surabaya untuk Usaha Jasa | 146 char |
| 3561 | 106 | 10 Strategi Digital Marketing Surabaya yang Terukur | 154 char |

Judul artikel (H1) ikut dirapikan pada lima artikel yang judulnya promosional, termasuk #3138 yang
sebelumnya berbunyi "#1 Jasa SEO Surabaya — Bawa Website Anda ke Puncak Google". Slug tidak diubah.
Verifikasi: 10/10 judul dan deskripsi cocok di halaman live.

Catatan jujur: sebagian artikel ini berada di posisi 40–90, jadi perbaikan judul hanya berpengaruh
kecil. Yang lebih menentukan untuk mereka adalah menaikkan peringkat, bukan mengganti kalimat.

## Item 5 — titik awal posisi (minggu 2026-W41)

Diukur 6 Okt 2026 10:49 WIB lewat Serper (Google, gl=id, hl=id):

- «digital agency surabaya» → **#8**, halaman yang muncul: beranda `studiosoft.id/`
- «digital marketing agency surabaya» → di luar 20 besar
- «jasa digital marketing surabaya» → di luar 20 besar
- «branding agency surabaya» → di luar 20 besar
- «jasa seo surabaya» → di luar 20 besar

Tiga teratas untuk kueri utama masih diisi akun Instagram, priorads.com, dan publish.co.id, sama
seperti temuan saat rencana disusun. Riwayat tersimpan di `drafts/ss_posisi_mingguan.json`, catatan
manusiawi di `drafts/ss_posisi_mingguan.md`.

## Temuan yang perlu keputusan Anda

**1. Empat cron SEO lama berisi data palsu.** `rank-tracker-mingguan`, `keyword-monitor-harian`,
`seo-report-mingguan`, dan `competitor-analysis-bulanan` menjalankan skrip warisan dari
`~/.openclaw/cron/`. Isinya angka simulasi yang ditulis tetap di dalam skrip: "Total Visits: 28.450",
rata-rata posisi 9,1, dan daftar peringkat yang tidak pernah berubah. Tidak ada panggilan API sama
sekali. Skrip pengganti yang nyata sudah siap (`ss_posisi_mingguan.py`), tinggal mengarahkan ulang
job `rank-tracker-mingguan` ke skrip itu, atau mematikan keempat job tersebut.

**2. Kanibalisasi di klaster agensi.** Artikel #2913 "10 Digital Agency Terbaik" bertayangan 1.173
tanpa satu klik, sementara halaman daftar resmi #2771 menargetkan kueri yang sama. Dua halaman
berebut kueri yang sama membuat keduanya lemah. Pilihan yang masuk akal: jadikan #2913 sebagai
halaman bertema nasional (sudah saya arahkan begitu lewat judul barunya) dan biarkan #2771 memegang
kueri Surabaya.

**3. Halaman daftar belum menautkan ke empat artikel baru.** Tautan baru berjalan satu arah.
Menambahkan empat tautan dari #2771 ke artikel pendukung akan memperkuat klaster dan mudah
dikerjakan dalam satu langkah. Belum saya kerjakan karena menyentuh halaman yang jadi target utama.

## Berkas kerja

- `ss_fase1_data.py` — tarik artikel, GSC 90 hari, dan posisi Serper (titik awal)
- `ss_fase1_rencana.py` — pemilihan 10 artikel nol klik dan 15 artikel untuk tautan
- `ss_fase1_meta_pasang.py` — pasang judul + meta (dry run atau `--go`)
- `ss_fase1_link.py` — pasang 15 tautan (dry run atau `--go`)
- `ss_artikel_agensi_2.py`, `_3.py`, `_4.py` — generator artikel pendukung
- `ss_perbarui_artikel.py` — perbarui isi artikel tayang dari skrip generatornya
- `ss_fase1_verif_artikel.py` — pemeriksaan akhir empat artikel
- `ss_posisi_mingguan.py` — pemantau posisi mingguan
- `cek_pola_ai.py` — pemeriksa pola tulisan AI (dipakai sebelum terbit)
- Salinan isi sebelum perubahan: `ss_fase1_backup/`

---

# Susulan 6 Okt 2026 — perintah Bos: 1 artikel/hari, tanpa kanibalisasi, tanpa data palsu

## Jadwal terbit: tepat 1 artikel per hari

Sebelum dirapikan, 6 Okt sempat terbit 5 artikel dalam sehari (1 dari antrean pagi ditambah 4 artikel
klaster agensi). Empat artikel klaster agensi dipindah dari "sudah terbit" menjadi terjadwal:

| Post | Judul | Tayang |
|---|---|---|
| #9260 | Cara Memilih Digital Agency Surabaya | 15 Okt 08:00 WIB |
| #9288 | Berapa Biaya Digital Agency di Surabaya | 16 Okt 08:00 WIB |
| #9290 | Digital Agency vs Freelancer vs In-house | 17 Okt 08:00 WIB |
| #9292 | Tanda Digital Agency Bekerja dengan Benar | 18 Okt 08:00 WIB |

Hasil sesudahnya: 12 hari berturut-turut (7 sampai 18 Okt) berisi tepat satu artikel per hari, tidak ada
hari kosong dan tidak ada hari berisi dua artikel. Hari ini kembali berisi satu artikel, yaitu #9193
yang tayang 08:00.

Isi keempat artikel tidak berubah, hanya tanggal tayangnya. Salinan sebelum perubahan disimpan di
`ss_jadwal_backup/`.

## Kanibalisasi

`ss_kanibalisasi.py` membandingkan artikel yang menunggu tayang dengan 321 artikel terbit dan
menemukan dua benturan nyata:

- **#9227 "Digital Agency Surabaya vs Freelancer: Pilih Mana?"** (16 Okt). Kemiripan 0,57 dengan #9290
  yang topiknya sama, dan kata kunci fokusnya "digital agency surabaya" bertabrakan sekaligus dengan
  beranda dan halaman daftar #2771. Dipindah ke draf.
- **#9229 "Jasa Maintenance WordPress: Kerja Bulanan"** (15 Okt). Kata kunci fokusnya sama persis
  dengan #9120 (1.967 kata, terbit 25 Sep, sudah punya 12 sub-judul). Dipindah ke draf.

Keduanya bukan artikel buruk (1.520 dan 1.476 kata, keduanya sudah bertombol WA), hanya bertabrakan.
Masih tersimpan sebagai draf dan bisa dipakai untuk 19 dan 20 Okt setelah sudutnya diganti.
Delapan artikel antrean lainnya bersih, tidak ada yang bertabrakan.

## Penjaga harian supaya tidak pernah kosong

Job baru **`studiosoft-artikel-harian`** (`754ecdec3503`), jalan tiap hari 07:00 WIB:

1. Cek kesehatan jadwal (`ss_jadwal_cek.py`). Kalau persediaan masih 10 hari ke atas, cukup lapor satu baris.
2. Kalau menipis atau ada hari kosong: ambil topik dari `ss_topik_bank.json`, jalankan pemeriksa
   kanibalisasi, tulis artikel 1.000-1.300 kata bertombol WA dan minimal dua tautan internal.
3. Simpan sebagai **draf dulu**, pasang meta Yoast, baca balik untuk memastikan tersimpan.
4. Baru dijadwalkan ke hari kosong pertama jam 08:00 WIB, lalu lapor ke Telegram.

Bank topik berisi 13 topik yang sudah disaring terhadap 352 artikel, semuanya aman. Aturan job ini
juga melarang menyentuh WP Page dan melarang menulis angka yang tidak berasal dari API.

## Cron yang isinya data palsu

| Job | Tindakan |
|---|---|
| `rank-tracker-mingguan` | Diarahkan ke `ss_posisi_mingguan.py`: Serper nyata, 3 kali pengukuran per kata kunci, diambil nilai tengah. Uji jalan: berhasil. |
| `keyword-monitor-harian` | Diarahkan ke `ss_monitor_harian.py`: GSC nyata (klik, tayangan, posisi 7 hari vs 7 hari sebelumnya) plus cek jadwal terbit. Uji jalan: berhasil. |
| `seo-report-mingguan` | Dijeda. Isinya angka simulasi; laporan mingguan sudah dikerjakan job KPI nyata (`kpi-semua-klien-mingguan`). |
| `competitor-analysis-bulanan` | Dijeda. Isinya angka simulasi; tiga teratas per kata kunci sudah terekam di pemantau posisi mingguan. |

Cadangan konfigurasi sebelum perubahan: `cron/jobs.json.bak-20261006-jadwal` dan
`cron/jobs.json.bak-20261006-noFake-0359`.

## Catatan reliabilitas pengukuran

Posisi di SERP bisa bergeser antar pemanggilan pada hari yang sama. Contoh nyata hari ini:
«digital marketing agency surabaya» terbaca #4 pada pengukuran sekali jalan, lalu #3 dan #4 pada
pengukuran berikutnya, sementara «digital agency surabaya» stabil di #8 pada tiga pengukuran. Karena
itu pemantauan mingguan sekarang mengambil tiga sampel per kata kunci dan mencatat sebarannya,
supaya angka yang dilaporkan bukan hasil satu kali kebetulan.

## Satu hal yang masih butuh Anda: purge Cloudflare untuk satu URL

Saat keempat artikel dipindah kembali ke status terjadwal, tiga URL langsung bersih di halaman depan
(mengembalikan 404, `cf-cache-status: BYPASS`). Satu URL masih menyajikan salinan lama:

```
/cara-memilih-digital-agency-surabaya/  → HTTP 200, cf-cache-status: HIT
  cache-control: max-age=2592000 (30 hari), umur cache sekitar 1 jam saat diperiksa
```

Artinya halaman itu masih bisa dibaca pengunjung dari cache tepi Cloudflare walaupun di WordPress
statusnya sudah terjadwal untuk 15 Okt. Saya tidak punya token Cloudflare, jadi purge perlu dilakukan
dari akun Anda (Purge Everything, atau custom purge untuk URL tersebut). Setelah itu halaman akan
kembali 404 sampai waktunya tayang.

Catatan stok untuk ke depan: WP Rocket memasang `max-age` 30 hari, jadi setiap kali artikel yang sudah
tayang ditarik kembali atau diubah isinya, purge Cloudflare tetap diperlukan supaya perubahan langsung
terlihat.
