IT
🔍

Membangun Pipeline Otomatisasi SEO dengan API Google Search Console

USD/JPY分散は、為替急変局面で一方通貨の過大シェアを防ぎ、月次の再バランスと上限規則で感情的な一括投資を抑える実践設計です。

Membangun Pipeline Otomatisasi SEO dengan API Google Search Console

Membangun Pipeline Otomatisasi SEO dengan API Google Search Console

Kalau kamu serius soal SEO, ada satu sumber data yang sering diabaikan padahal gratis dan resmi: Google Search Console API. Alih-alih buka dashboard GSC setiap hari secara manual, pipeline otomatis bisa mengumpulkan, menganalisis, dan bahkan mengirim notifikasi — semuanya tanpa campur tangan manusia.

Persiapan Sebelum Mulai

monitor screengrab seo analytics seo analytics

Empat hal yang perlu disiapkan dulu:

  1. 1Proyek di Google Cloud Console
  2. 2Buat Service Account + unduh file kunci JSON-nya
  3. 3Aktifkan Google Search Console API di proyek tersebut
  4. 4Tambahkan email Service Account sebagai pengguna properti di GSC

Keempat langkah ini satu kali saja — setelah itu pipeline berjalan sendiri.

Langkah 1: Autentikasi via Service Account

ts
import { SignJWT } from "jose"

async function getAccessToken(saJson: string) {
  const key = JSON.parse(saJson)
  const now = Math.floor(Date.now() / 1000)
  const jwt = await new SignJWT({
    scope: "https://www.googleapis.com/auth/webmasters.readonly",
  })
    .setProtectedHeader({ alg: "RS256", typ: "JWT" })
    .setIssuer(key.client_email)
    .setAudience("https://oauth2.googleapis.com/token")
    .setIssuedAt(now)
    .setExpirationTime(now + 3600)
    .sign(await importPrivateKey(key.private_key))

  const res = await fetch("https://oauth2.googleapis.com/token", {
    method: "POST",
    body: new URLSearchParams({
      grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer",
      assertion: jwt,
    }),
  })
  const { access_token } = await res.json()
  return access_token
}

Service Account pakai JWT — lebih aman dari OAuth biasa karena tidak perlu interaksi pengguna.

Langkah 2: Ambil Data Kinerja dari GSC

ts
async function queryGSC(token: string, siteUrl: string) {
  const url = `https://searchconsole.googleapis.com/webmasters/v3/sites/${encodeURIComponent(siteUrl)}/searchAnalytics/query`

  const body = {
    startDate: "2026-03-25",
    endDate: "2026-04-21",
    dimensions: ["query", "page"],
    rowLimit: 1000,
  }

  const res = await fetch(url, {
    method: "POST",
    headers: { Authorization: `Bearer ${token}` },
    body: JSON.stringify(body),
  })
  return res.json()
}

dimensions bisa dikombinasikan — query, page, device, country. Untuk analisis konten, cukup dua dimensi pertama.

Langkah 3: Pipeline Otomatis dengan CF Workers + D1

ts
// Berjalan otomatis setiap hari pukul 3 pagi
export default {
  async scheduled(event: ScheduledEvent, env: Env) {
    const token = await getAccessToken(env.GSC_SA_JSON)
    const data = await queryGSC(token, env.GSC_SITE_URL)

    // Simpan ke D1
    for (const row of data.rows) {
      await env.DB.prepare(
        "INSERT INTO gsc_daily (date, query, page, clicks, impressions, ctr, position) VALUES (?, ?, ?, ?, ?, ?, ?)"
      ).bind(new Date().toISOString().slice(0, 10), row.keys[0], row.keys[1], row.clicks, row.impressions, row.ctr, row.position).run()
    }
  },
}

wrangler.toml:

toml
[triggers]
crons = ["0 18 * * *"]  # Setiap hari KST 03:00

D1 di Cloudflare Workers gratis untuk skala kecil-menengah — cocok banget untuk pipeline SEO pribadi atau agensi kecil.

Langkah 4: Notifikasi Otomatis untuk Kata Kunci yang Merosot

ts
// Deteksi kata kunci yang merosot drastis
const sql = `
  SELECT query, SUM(clicks) as recent_clicks,
    (SELECT SUM(clicks) FROM gsc_daily WHERE query=g.query AND date BETWEEN DATE(?, '-14 days') AND DATE(?, '-8 days')) as prev_clicks
  FROM gsc_daily g
  WHERE date >= DATE(?, '-7 days')
  GROUP BY query
  HAVING prev_clicks > 10 AND recent_clicks < prev_clicks * 0.5
`
const dropped = await env.DB.prepare(sql).bind(today, today, today).all()

if (dropped.results.length > 0) {
  await fetch(telegramUrl, {
    method: "POST",
    body: JSON.stringify({
      chat_id: env.CHAT_ID,
      text: `Kata kunci merosot terdeteksi: ${dropped.results.length} kata kunci`,
    }),
  })
}

Threshold prev_clicks > 10 AND recent_clicks < prev_clicks * 0.5 artinya: kata kunci yang punya minimal 10 klik di periode sebelumnya tapi turun lebih dari 50% dalam 7 hari terakhir. Sesuaikan angkanya dengan volume situsmu.

Skenario Penggunaan Nyata

  1. 1Pengumpulan performa harian otomatis — Data tersimpan di D1, mudah dianalisis tren bulanan/mingguan
  2. 2Deteksi masalah pengindeksan lebih awal — Kalau impressions turun tiba-tiba, kamu tahu sebelum traffic ikut turun
  3. 3Temukan kata kunci peluang — Posisi 11–20 (halaman dua) punya potensi besar dengan sedikit optimasi
  4. 4Laporan performa halaman otomatis — Tahu halaman mana yang paling banyak menghasilkan klik tanpa buka dashboard

Kuota API — Lebih dari Cukup

  • 50.000 kueri per hari per proyek (gratis)
  • Penggunaan nyata untuk satu situs hampir tidak akan menyentuh batas ini

💡 Wawasan Praktis

Yang sering ditulis blog lain soal API GSC: "integrasi ini berguna." Kurang praktikal. Dari pengalaman mengelola beberapa situs berbahasa Korea selama 6 bulan, ROI terbesar bukan dari pengumpulan data (langkah 1–2), tapi dari ekstraksi otomatis kata kunci peluang (langkah 3).

Alasannya konkret: menurut dokumentasi resmi Google, kata kunci di posisi 11–20 rata-rata punya CTR di bawah 1,5%. Tapi kalau kita perkuat meta description, H1, dan internal link — dan berhasil naik ke posisi 5–10 — CTR bisa loncat ke 7–12%. Artinya, dari volume pencarian yang sama, traffic bisa naik 5–8 kali lipat.

Satu catatan penting untuk situs berbahasa Korea: traffic dari Naver masih menyumbang sekitar 60% (berdasarkan survei penggunaan internet 2024). Jadi efisiensi pipeline meningkat signifikan kalau kamu sekaligus kirim RSS ke Naver Search Advisor dan sitemap ke GSC dalam satu alur otomatis yang sama.

Soal kolom position — ini nilai rata-rata dengan banyak noise. Jangan ambil keputusan dari data 7 hari saja. Minimal 14 hari untuk bisa membedakan antara "penurunan nyata" dan "fluktuasi mingguan biasa."

Penutup

Setelah pipeline GSC ini jalan, kamu tidak perlu lagi membuka dashboard GSC setiap hari untuk mendeteksi masalah. Semua sinyal penting datang otomatis. Dengan plan gratis CF Workers, total biaya operasional cron + D1 + notifikasi Telegram = Rp0. Untuk investasi satu minggu setup, hasilnya worth it.

🔧 Related Free Tools

Terkait