
Emma Foster
Machine Learning Engineer

Google's AI Overviews sekarang muncul untuk persentase yang terus meningkat dari query pencarian, merujuk halaman web tertentu sebagai sumber. Untuk merek dan penerbit, dikutip dalam ringkasan yang dihasilkan AI menghasilkan lalu lintas dan otoritas yang signifikan. Memantau halaman mana yang dikutip — dan kapan perubahan kutipan terjadi — memerlukan pengumpulan data otomatis dari hasil pencarian Google. Panduan ini menunjukkan cara membangun sistem pemantauan kutipan Overviews AI menggunakan CapSolver untuk menangani tantangan verifikasi Google dan mempertahankan pemantauan terus-menerus.
Overviews AI Google mewakili perubahan mendasar dalam cara lalu lintas pencarian mengalir. Ketika Google menghasilkan jawaban yang didukung AI dan merujuk halaman Anda, Anda menerima tautan langsung dan otoritas yang tersirat. Ketika kutipan Anda hilang, lalu lintas dari query tersebut turun secara langsung. Penelitian Search Engine Land menunjukkan bahwa Overviews AI sekarang muncul pada 15-30% query informasional, dengan persentase yang terus meningkat setiap bulan.
Tantangan untuk pemantauan adalah bahwa kutipan Overviews AI bersifat dinamis — mereka berubah berdasarkan segar tidaknya konten, reformulasi query, dan pembaruan model Google yang terus berlangsung. Halaman yang dikutip hari ini mungkin kehilangan kutipannya besok tanpa pemberitahuan. Pemeriksaan manual tidak praktis dalam skala besar: merek yang memantau 200 kata kunci perlu memeriksa setiap satu secara manual, menggulir ke Overviews AI, dan mencatat sumber mana yang dikutip — beberapa kali per minggu.
Pemantauan otomatis menyelesaikan ini, tetapi perlindungan bot Google menghalangi akses pencarian sistematis. Setelah 50-100 query otomatis, Google menampilkan tantangan reCAPTCHA atau memblokir IP sepenuhnya. CapSolver menyediakan lapisan penghapusan verifikasi yang menjaga pipeline pemantauan Anda tetap berjalan terus-menerus.
Instal paket yang diperlukan:
pip install git+https://github.com/capsolver-ai/capsolver-core.git
pip install aiohttp beautifulsoup4 pandas
Atur kunci API Anda:
export CAPSOLVER_API_KEY="your-capsolver-api-key"
Persyaratan tambahan:
Tidak semua query menghasilkan Overviews AI. Fokuskan pemantauan Anda pada kata kunci di mana Overviews AI konsisten muncul:
from dataclasses import dataclass, field
from typing import List, Optional
import time
@dataclass
class AIOverviewCitation:
"""Satu kutipan dalam Overviews AI."""
position: int # posisi 1-based dalam daftar kutipan
url: str # URL halaman yang dikutip
domain: str # Domain dari halaman yang dikutip
anchor_text: str # Teks yang digunakan untuk menghubungkan ke sumber
snippet_context: str # Teks sekitar dalam Overviews AI
@dataclass
class AIOverviewResult:
"""Hasil pemantauan Overviews AI lengkap untuk satu kata kunci."""
keyword: str
has_ai_overview: bool
citations: List[AIOverviewCitation] = field(default_factory=list)
overview_text: str = ""
timestamp: float = 0.0
your_domain_cited: bool = False
your_citation_position: Optional[int] = None
# Kata kunci yang paling mungkin memicu Overviews AI
PRIORITY_KEYWORDS = [
# Query informasional (tingkat Overviews AI tertinggi)
"apa itu generative engine optimization",
"bagaimana mengoptimalkan untuk pencarian AI",
"praktik terbaik untuk kutipan AI",
# Query investigasi komersial
"API penyelesaian CAPTCHA terbaik",
"kerangka AI teratas 2025",
# Query perbandingan
"reCAPTCHA vs Cloudflare Turnstile",
]
Query informasional dan "bagaimana cara" memiliki tingkat pemicu Overviews AI tertinggi (40-60%), diikuti oleh query perbandingan (20-30%) dan query investigasi komersial (15-25%).
Pemantauan kata kunci yang tidak pernah memicu Overviews AI membuang kredit penyelesaian CAPTCHA. Fokus pada query di mana konten Anda memiliki potensi kutipan — query informasional di bidang keahlian Anda, query perbandingan di mana produk Anda relevan, dan query "terbaik dari" di kategori Anda.
Buat parser yang mengekstrak kutipan Overviews AI dari halaman hasil pencarian Google:
from bs4 import BeautifulSoup
import re
class AIOverviewExtractor:
"""Ekstrak kutipan Overviews AI dari HTML SERP Google."""
def extract(self, html: str, keyword: str, your_domain: str = "") -> AIOverviewResult:
"""Parsing HTML dan mengekstrak data kutipan Overviews AI."""
soup = BeautifulSoup(html, 'html.parser')
# Deteksi keberadaan Overviews AI
# Google menggunakan berbagai kelas kontainer untuk Overviews AI
ai_containers = soup.select(
'[data-attrid*="ai"], '
'.ai-overview, '
'[class*="aiOverview"], '
'.kp-wholepage [data-md-type]'
)
if not ai_containers:
return AIOverviewResult(
keyword=keyword,
has_ai_overview=False,
timestamp=time.time()
)
# Ekstrak teks Overviews AI
overview_container = ai_containers[0]
overview_text = overview_container.get_text(separator=" ", strip=True)[:2000]
# Ekstrak kutipan (tautan sumber dalam Overviews AI)
citations = []
source_links = overview_container.select('a[href^="http"]')
for i, link in enumerate(source_links, 1):
url = link.get('href', '')
if not url or 'google.com' in url:
continue
domain = self._extract_domain(url)
anchor = link.get_text(strip=True)
# Dapatkan konteks sekitar
parent = link.parent
context = parent.get_text(strip=True)[:200] if parent else ""
citations.append(AIOverviewCitation(
position=i,
url=url,
domain=domain,
anchor_text=anchor,
snippet_context=context
))
# Periksa apakah domain Anda dikutip
your_cited = any(your_domain in c.domain for c in citations) if your_domain else False
your_position = next(
(c.position for c in citations if your_domain in c.domain), None
) if your_domain else None
return AIOverviewResult(
keyword=keyword,
has_ai_overview=True,
citations=citations,
overview_text=overview_text[:500],
timestamp=time.time(),
your_domain_cited=your_cited,
your_citation_position=your_position
)
def _extract_domain(self, url: str) -> str:
"""Ekstrak domain dari URL."""
match = re.search(r'https?://([^/]+)', url)
return match.group(1) if match else url
Bangun lapisan pengumpulan data dengan penyelesaian CAPTCHA terintegrasi:
import asyncio
import aiohttp
import random
from capsolver_core import create_capsolver, CaptchaType, CaptchaInfo
class CitationMonitorCollector:
"""Kumpulkan data kutipan Overviews AI dengan penanganan CAPTCHA."""
def __init__(self, api_key: str, proxies: list):
self.cap = create_capsolver(api_key=api_key)
self.proxies = proxies
self.proxy_idx = 0
self.extractor = AIOverviewExtractor()
self.stats = {"searches": 0, "captchas": 0, "overviews_found": 0}
async def collect_citation_data(
self, keyword: str, your_domain: str = "", location: str = "us"
) -> AIOverviewResult:
"""Kumpulkan data kutipan Overviews AI untuk satu kata kunci."""
proxy = self.proxies[self.proxy_idx % len(self.proxies)]
self.proxy_idx += 1
url = f"https://www.google.com/search?q={keyword}&gl={location}&hl=en"
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
"Accept": "text/html,application/xhtml+xml",
"Accept-Language": "en-US,en;q=0.9"
}
async with aiohttp.ClientSession() as session:
async with session.get(url, headers=headers, proxy=proxy, timeout=30) as resp:
html = await resp.text()
# Atasi CAPTCHA jika diaktifkan
if "lalu lintas tidak biasa" in html.lower() or "g-recaptcha" in html:
self.stats["captchas"] += 1
html = await self._solve_and_retry(session, url, headers, proxy)
self.stats["searches"] += 1
# Ekstrak data kutipan
result = self.extractor.extract(html, keyword, your_domain)
if result.has_ai_overview:
self.stats["overviews_found"] += 1
return result
async def _solve_and_retry(self, session, url, headers, proxy) -> str:
"""Selesaikan reCAPTCHA Google dan coba lagi."""
info = CaptchaInfo(
type=CaptchaType.RECAPTCHA_V2,
website_url="https://www.google.com",
website_key="6LfwuyUTAAAAAOAmoS0fdqijC2PbbdH4kjq62Y1b"
)
solution = await self.cap.solve(info)
# Coba lagi dengan proxy baru setelah menyelesaikan
new_proxy = self.proxies[self.proxy_idx % len(self.proxies)]
self.proxy_idx += 1
async with session.get(url, headers=headers, proxy=new_proxy, timeout=30) as resp:
return await resp.text()
async def monitor_batch(
self, keywords: list, your_domain: str = "", delay: float = 7.0
) -> list:
"""Pantau sejumlah kata kunci dengan pembatasan kecepatan."""
results = []
for keyword in keywords:
result = await self.collect_citation_data(keyword, your_domain)
results.append(result)
await asyncio.sleep(delay + random.uniform(0, 3))
return results
async def close(self):
await self.cap.aclose()
Dokumentasi reCAPTCHA CapSolver menjelaskan implementasi reCAPTCHA Google secara detail.
Lacak perubahan kutipan seiring waktu dan beri tahu ketika halaman Anda mendapatkan atau kehilangan kutipan Overviews AI:
class CitationChangeDetector:
"""Deteksi perubahan kutipan Overviews AI seiring waktu."""
def __init__(self, your_domain: str):
self.your_domain = your_domain
self.history = {} # keyword -> list of AIOverviewResult
def record_and_detect(self, results: list) -> list:
"""Catat hasil baru dan deteksi perubahan dari pemeriksaan sebelumnya."""
changes = []
for result in results:
keyword = result.keyword
previous = self.history.get(keyword, [])
if previous:
last = previous[-1]
# Kutipan diperoleh
if result.your_domain_cited and not last.your_domain_cited:
changes.append({
"type": "CITATION_GAINED",
"keyword": keyword,
"position": result.your_citation_position,
"timestamp": result.timestamp
})
# Kutipan hilang
elif last.your_domain_cited and not result.your_domain_cited:
changes.append({
"type": "CITATION_LOST",
"keyword": keyword,
"previous_position": last.your_citation_position,
"timestamp": result.timestamp
})
# Posisi berubah
elif (result.your_domain_cited and last.your_domain_cited and
result.your_citation_position != last.your_citation_position):
changes.append({
"type": "POSITION_CHANGED",
"keyword": keyword,
"old_position": last.your_citation_position,
"new_position": result.your_citation_position,
"timestamp": result.timestamp
})
# Overviews AI muncul/hilang
if result.has_ai_overview and not last.has_ai_overview:
changes.append({
"type": "AI_OVERVIEW_APPEARED",
"keyword": keyword,
"timestamp": result.timestamp
})
# Perbarui riwayat
if keyword not in self.history:
self.history[keyword] = []
self.history[keyword].append(result)
# Simpan 30 hari terakhir riwayat
self.history[keyword] = self.history[keyword][-60:]
return changes
def generate_report(self) -> dict:
"""Hasil laporan ringkasan status kutipan."""
total_keywords = len(self.history)
cited_keywords = sum(
1 for k, h in self.history.items()
if h and h[-1].your_domain_cited
)
overview_keywords = sum(
1 for k, h in self.history.items()
if h and h[-1].has_ai_overview
)
return {
"total_keywords_monitored": total_keywords,
"keywords_with_ai_overview": overview_keywords,
"keywords_where_cited": cited_keywords,
"citation_rate": f"{cited_keywords/max(overview_keywords,1)*100:.1f}%",
"average_citation_position": self._avg_position()
}
def _avg_position(self) -> float:
positions = [
h[-1].your_citation_position
for h in self.history.values()
if h and h[-1].your_citation_position
]
return sum(positions) / len(positions) if positions else 0
Jalankan seluruh pipeline secara berkala:
async def run_daily_monitoring():
"""Jalankan pemantauan kutipan overview AI harian."""
collector = CitationMonitorCollector(
api_key="KUNCI_API_ANDA_CAPSOLVER",
proxies=DAFTAR_PROXY_RUMAH_TINGGAL
)
detector = CitationChangeDetector(your_domain="capsolver.com")
# Pemantauan semua kata kunci prioritas
results = await collector.monitor_batch(
keywords=PRIORITY_KEYWORDS,
your_domain="capsolver.com",
delay=8.0
)
# Deteksi perubahan
changes = detector.record_and_detect(results)
# Laporan
if changes:
print(f"\n{'='*50}")
print(f"PERUBAHAN KUTIPAN TERDETEKSI: {len(changes)}")
for change in changes:
print(f" [{change['type']}] {change['keyword']}")
print(f"{'='*50}\n")
report = detector.generate_report()
print(f"Ringkasan: {report}")
await collector.close()
# Jalankan harian
asyncio.run(run_daily_monitoring())
Dapatkan Kode Bonus Anda: Gunakan kode WEBS di Dasbor CapSolver untuk mendapatkan bonus tambahan 5% pada setiap recharge. Penting untuk tim GEO yang memantau kutipan overview AI secara skala.
Data pemantauan langsung memengaruhi strategi Optimisasi Mesin Generatif Anda:
Artikel blog CapSolver tentang AI dan otomasi menjelaskan pola tambahan untuk pengumpulan data berbasis AI. Untuk menangani berbagai jenis CAPTCHA di mesin pencari, halaman produk CapSolver mencantumkan semua sistem verifikasi yang didukung.
Mengotomasi pemantauan kutipan overview AI memerlukan lapisan pengumpulan pencarian yang sadar CAPTCHA, parser ekstraksi kutipan, dan sistem deteksi perubahan. CapSolver menyediakan infrastruktur penghapusan verifikasi yang memungkinkan pemantauan terus-menerus terhadap overview AI Google, menyelesaikan tantangan reCAPTCHA dalam 3-8 detik sehingga strategi GEO Anda selalu memiliki data kutipan terkini.
Mulai dengan 20-50 kata kunci prioritas di mana Anda mengharapkan overview AI, validasi akurasi ekstraksi Anda, lalu skala ke cakupan kata kunci penuh. Data perubahan kutipan langsung memengaruhi keputusan optimisasi konten — membantu Anda memahami apa yang dianggap AI Google sebagai kutipan yang layak untuk pertanyaan target Anda.
Untuk kata kunci prioritas tinggi (istilah merek, pertanyaan produk inti), periksa harian. Untuk pemantauan yang lebih luas (istilah industri, pertanyaan informasional), 2-3 kali seminggu sudah cukup. Kutipan overview AI bisa berubah dalam beberapa jam setelah konten diperbarui, jadi pemeriksaan yang lebih sering menangkap perubahan lebih cepat.
Saat ini 15-30% dari query informasional menampilkan overview AI, dengan persentase yang terus meningkat. Query "bagaimana cara" (how to), query definisi, dan query perbandingan memiliki tingkat pemicu tertinggi. Query komersial dan transaksional menampilkan overview AI lebih jarang.
Sebagian besar overview AI menulis 3-8 sumber, dengan posisi pertama hingga ketiga menerima sebagian besar lalu lintas klik. Posisi 1 dalam daftar kutipan menerima sekitar 3-5x lebih banyak klik daripada posisi 5+. Memantau posisi kutipan Anda sebanding pentingnya dengan memantau apakah Anda dikutip sama sekali.
Ya. Atur your_domain ke domain pesaing untuk melacak frekuensi kutipan dan posisinya. Bandingkan tingkat kutipan Anda dengan pesaing untuk mengidentifikasi celah konten dan peluang. Lacak pesaing mana yang konsisten muncul untuk kata kunci di mana Anda tidak muncul.
Dengan 200 kata kunci dan penundaan 8 detik serta sekitar 10% tingkat penangkapan CAPTCHA, Anda membutuhkan sekitar 20 penyelesaian CAPTCHA per hari. Dengan harga $2-3 per 1.000 penyelesaian reCAPTCHA v2, biaya harian sekitar $0,04-0,06 — kurang dari $2 per bulan untuk pemantauan kutipan overview AI secara komprehensif.
Pelajari arsitektur pengambilan data web Rust yang dapat diskalakan dengan reqwest, scraper, pengambilan data asinkron, pengambilan data browser tanpa tampilan, rotasi proxy, dan penanganan CAPTCHA yang sesuai aturan.

Mengotomasi penyelesaian CAPTCHA dengan Nanobot dan CapSolver. Gunakan Playwright untuk menyelesaikan reCAPTCHA dan Cloudflare secara otomatis.
