#!/usr/bin/env python3
"""StudioSoft: artikel pendukung #4 (fase 1 klaster agensi) — 6 tanda agensi bekerja dengan benar."""
import base64, json, re, sys, time, urllib.error, urllib.request

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
DOM = "studiosoft.id"
AUTH = base64.b64encode(b"bambangbot:q26r RePo BVy6 pwU2 F3z7 ouyl").decode()

JUDUL = "Tanda Digital Agency Anda Bekerja dengan Benar: 6 Indikator yang Bisa Dicek"
SLUG = "tanda-digital-agency-bekerja-dengan-benar"
FOKUS = "tanda digital agency bekerja dengan benar"
META_JUDUL = "6 Tanda Digital Agency Bekerja dengan Benar"
META_DESC = ("Enam tanda yang bisa Anda cek sendiri untuk menilai apakah digital agency bekerja dengan "
             "benar, lengkap dengan cara memeriksanya dan jadwal tiga bulan pertama.")

WA = "https://wa.me/6281935000624?text=Halo%20StudioSoft%2C%20saya%20ingin%20konsultasi%20digital%20marketing"
TOMBOL = ('<p style="text-align:center;margin:32px 0 8px"><a href="' + WA +
          '" target="_blank" rel="noopener" style="display:inline-block;background-color:#0f2557;'
          'color:#ffffff;padding:15px 34px;font-size:18px;font-weight:bold;text-decoration:none;'
          'border-radius:6px;">Konsultasi Gratis</a></p>')

ISI = """
<p>Setelah menandatangani kontrak, banyak pemilik bisnis masuk ke Mode Percaya: bayar bulanan, terima
laporan, dan berharap semuanya berjalan. Masalahnya, laporan yang rapi bisa dibuat tanpa hasil yang
nyata, dan Anda baru sadar setelah enam bulan uangnya habis.</p>

<p>Kabar baiknya, ada cara menilai pekerjaan agensi tanpa perlu jadi ahli pemasaran. Enam tanda di bawah
ini bisa Anda periksa sendiri, sebagian hanya butuh beberapa menit di depan laptop. Kalau semua tanda ini
ada, agensi Anda kemungkinan besar bekerja dengan benar. Kalau setengahnya tidak ada, ada yang perlu
ditanyakan.</p>

<h2>1. Akses data ada di tangan Anda, bukan di tangan agensi</h2>
<p>Anda seharusnya bisa membuka Google Analytics, Search Console, dan akun iklan kapan pun tanpa harus
meminta. Ini pemeriksaan paling cepat: coba login sendiri hari ini, tanpa dibantu siapa pun.</p>

<p>Kalau akunnya atas nama agensi dan Anda hanya menerima tangkapan layar, itu tanda bahaya. Bukan
karena agensi pasti berniat buruk, tapi karena data yang tidak Anda kuasai tidak bisa Anda pakai untuk
mengambil keputusan, dan sulit dibawa kalau kerja sama berakhir.</p>

<h2>2. Ada ukuran yang disepakati di awal, dan angkanya bergerak</h2>
<p>Ukuran yang sehat biasanya sederhana: jumlah pengunjung dari Google, jumlah orang yang menghubungi
lewat WhatsApp atau formulir, dan berapa biaya untuk mendapat satu calon pembeli. Angka-angka itu
seharusnya sudah dibicarakan sebelum pekerjaan dimulai, bukan disusun setelah hasilnya keluar.</p>

<p>Cara memeriksanya: buka laporan tiga bulan terakhir, lalu bandingkan angkanya. Kalau nilainya sama
terus, atau perbedaannya selalu dijelaskan dengan alasan di luar kendali, itu perlu ditanyakan lebih rinci.</p>

<h2>3. Laporan menjelaskan keputusan, bukan hanya menyebut angka</h2>
<p>Laporan yang berguna menjawab tiga hal: apa yang dikerjakan bulan lalu, hasilnya bagaimana, dan apa
yang akan dikerjakan bulan depan. Termasuk bagian yang tidak berhasil, karena hampir setiap bulan ada
satu atau dua percobaan yang gagal.</p>

<p>Kalau laporannya penuh istilah teknis tanpa rekomendasi yang bisa Anda putuskan, mintalah satu
halaman ringkas berisi tiga hal tersebut. Agensi yang bekerja dengan baik akan senang menyiapkannya,
karena itu memaksa mereka berpikir jelas.</p>

<h2>4. Pekerjaan teknis meninggalkan jejak yang bisa dilihat</h2>
<p>Perbaikan SEO dan kecepatan situs seharusnya terlihat pada situsnya sendiri: halaman baru yang muncul,
judul dan deskripsi yang dirapikan, struktur tautan yang lebih rapi, atau halaman yang dulu lambat jadi
lebih cepat dibuka.</p>

<p>Untuk mengeceknya, buka situs Anda di ponsel pada koneksi biasa. Kalau waktu muatnya masih sama
seperti enam bulan lalu, tanyakan apa yang sudah dikerjakan di sisi teknis. Pengunjung yang membatalkan
kunjungan karena situsnya lambat tidak akan pernah muncul di laporan mana pun.</p>

<h2>5. Ada satu orang yang jelas bisa dihubungi, dan waktu responsnya masuk akal</h2>
<p>Kontak harian perlu punya nama. Bukan nomor umum kantor, bukan ruang obrolan yang tidak ada yang
menjawab. Tanyakan sejak awal siapa yang bertanggung jawab, dan berapa lama biasanya balasan diberikan
untuk pertanyaan rutin.</p>

<p>Perhatikan juga siapa yang menjawab pertanyaan sulit. Agensi yang sehat tidak menghilang ketika ada
masalah; mereka menjelaskan penyebabnya dan menyebut langkah yang akan diambil.</p>

<h2>6. Ada rencana ke depan, bukan mengulang bulan lalu</h2>
<p>Pekerjaan pemasaran bergerak berdasarkan apa yang dipelajari. Kalau setiap bulan urutannya sama persis
tanpa alasan baru, agensi mungkin berhenti berpikir dan hanya menjalankan rutinitas.</p>

<p>Dalam pertemuan berkala, dengarkan apakah ada hal baru yang mereka pelajari tentang pelanggan Anda, dan
bagaimana temuan itu mengubah rencana bulan berikutnya. Dua kalimat seperti itu lebih berguna daripada
satu halaman angka.</p>

<h2>Jadwal tiga bulan pertama yang masuk akal</h2>
<ul>
<li><strong>Bulan pertama:</strong> perbaikan teknis, riset kata kunci, pemasangan pelacakan, dan
kesepakatan ukuran. Hasil penjualan biasanya belum terlihat di bulan ini.</li>
<li><strong>Bulan kedua:</strong> produksi konten dan pengelolaan iklan mulai berjalan. Pengunjung
biasanya baru bergerak di akhir bulan, dan masuknya kontak mulai terlihat sedikit-sedikit.</li>
<li><strong>Bulan ketiga:</strong> evaluasi. Lihat halaman mana yang mendatangkan pengunjung, kueri mana
yang tumbuh, dan kanal mana yang menghabiskan biaya tanpa hasil. Di sinilah anggaran bulan keempat
sebaiknya diputuskan, bukan sebelumnya.</li>
</ul>

<h2>Tanda yang perlu diwaspadai</h2>
<ul>
<li>Laporan hanya berupa tangkapan layar tanpa data mentah yang bisa Anda buka sendiri.</li>
<li>Tidak ada satu pun perubahan yang terlihat di situs setelah tiga bulan.</li>
<li>Pekerjaan konten menumpuk di akhir bulan, tandanya dikerjakan tergesa-gesa.</li>
<li>Permintaan tambahan biaya muncul tanpa perubahan ruang lingkup yang jelas.</li>
<li>Pertanyaan Anda dibalas dengan istilah teknis yang tidak pernah dijelaskan.</li>
</ul>

<h2>Apa yang perlu Anda siapkan dari sisi bisnis</h2>
<p>Penilaian ini bekerja dua arah. Agensi butuh tiga hal dari Anda untuk bisa diukur: akses ke akun
digital sejak hari pertama, informasi nyata tentang pelanggan (apa yang paling sering ditanyakan, keluhan
yang berulang), dan waktu sebentar setiap pekan untuk memeriksa perkembangan dan mengambil keputusan.</p>

<p>Tanpa salah satunya, pekerjaan pemasaran berjalan lambat bukan karena agensinya kurang mampu, tapi
karena tidak ada yang bisa menjadi rujukan dalam mengambil keputusan.</p>

<h2>Kalau hasilnya kurang, apa yang sebaiknya dilakukan</h2>
<p>Sebelum memutuskan berhenti, ajukan tiga pertanyaan tertulis: apa yang sudah dicoba dan tidak berhasil,
apa penyebabnya menurut data, dan apa rencananya untuk dua bulan berikutnya. Jawaban atas tiga pertanyaan
itu biasanya cukup untuk menilai apakah masalahnya ada di strategi, di eksekusi, atau di ekspektasi yang
sejak awal tidak realistis.</p>

<p>Kalau Anda memang perlu membandingkan penyedia lain, pastikan proses serah terima aset ditulis jelas:
akun iklan, Analytics, materi konten, dan domain tetap berada di tangan bisnis Anda. Kami merangkum
pilihan agensi di Surabaya beserta pertimbangannya di
<a href="https://studiosoft.id/digital-agency-terbaik-di-surabaya/">daftar digital agency terbaik di Surabaya</a>,
termasuk apa yang biasanya jadi pembeda di antara mereka.</p>

<h2>Pertanyaan yang sering diajukan</h2>

<h3>Kalau peringkat belum naik setelah tiga bulan, apakah berarti gagal?</h3>
<p>Belum tentu. Peringkat biasanya bergerak setelah tayangan naik lebih dulu: halaman Anda mulai muncul
untuk lebih banyak kueri sebelum akhirnya naik ke posisi yang menghasilkan klik. Angka yang lebih berguna
untuk dilihat di awal adalah jumlah kueri yang sudah memunculkan situs Anda dan jumlah halaman yang
terindeks, bukan posisi satu kata kunci tertentu.</p>

<h3>Seberapa sering sebaiknya bertemu agensi?</h3>
<p>Sebulan sekali cukup untuk pekerjaan yang berjalan normal. Yang menentukan bukan frekuensinya, tapi
apakah ada keputusan yang diambil di setiap pertemuan: anggaran bulan depan, kanal yang dilanjutkan, atau
halaman yang perlu diperbaiki lebih dulu.</p>

<h3>Berapa lama kontrak yang wajar?</h3>
<p>Tiga bulan untuk tahap pertama, dengan evaluasi sebelum diperpanjang. Kontrak setahun masuk akal
setelah Anda melihat cara kerja mereka dan tahu apa yang diukur. Untuk gambaran apa saja yang biasanya
masuk paket dan berapa biayanya, lihat
<a href="https://studiosoft.id/biaya-digital-agency-surabaya/">rincian biaya digital agency</a>.</p>

""" + TOMBOL + """
<p><em>Catatan: enam tanda ini kami pakai juga untuk memeriksa pekerjaan kami sendiri. Kalau ada yang
belum terpenuhi di kerja sama Anda, sebutkan saja, itu lebih cepat ditangani daripada dibiarkan.</em></p>
"""


UA = {"User-Agent": "Mozilla/5.0"}


def rest(p, method="GET", data=None):
    h = {"Authorization": f"Basic {AUTH}", **UA}
    body = None
    if data is not None:
        body = json.dumps(data).encode()
        h["Content-Type"] = "application/json"
    r = urllib.request.Request(f"https://{DOM}{p}", data=body, headers=h, method=method)
    for _ in range(3):
        try:
            with urllib.request.urlopen(r, timeout=180) as x:
                return x.status, json.loads(x.read())
        except urllib.error.HTTPError as e:
            return e.code, e.read().decode()[:200]
        except Exception:
            time.sleep(4)
    return 0, "gagal"


kata = len(re.sub(r"<[^>]+>", " ", ISI).split())
print(f"=== artikel #4: {JUDUL}")
print(f"   panjang: {kata} kata (baku 1.000-1.300)")
print(f"   tombol WA: {'ada' if 'wa.me' in ISI else 'TIDAK ADA'}")
print(f"   tautan internal: {len(re.findall('studiosoft.id/', ISI))}")

if "--apply" not in sys.argv:
    print("\n(dry run — pakai --apply)")
    sys.exit(0)

st, d = rest("/wp-json/wp/v2/posts", "POST", {"title": JUDUL, "slug": SLUG, "content": ISI,
                                              "status": "publish", "comment_status": "closed"})
if not isinstance(d, dict) or "id" not in d:
    print("   ❌ gagal terbit:", st, str(d)[:200])
    sys.exit(1)
pid = d["id"]
print(f"\n   ✅ terbit #{pid} → {d.get('link')}")
st2, d2 = rest(f"/wp-json/wp/v2/posts/{pid}", "POST", {"meta": {
    "_yoast_wpseo_title": META_JUDUL, "_yoast_wpseo_metadesc": META_DESC, "_yoast_wpseo_focuskw": FOKUS}})
m = (d2 or {}).get("meta") if isinstance(d2, dict) else {}
print(f"   meta tersimpan: {json.dumps({k: v for k, v in (m or {}).items() if 'yoast' in k}, ensure_ascii=False)[:220]}")
