
Emma Foster
Machine Learning Engineer

Halaman hasil mesin pencari (SERPs) terus berubah — snippet unggulan berputar, kotak People Also Ask diperbarui, dan Tinjauan AI muncul atau menghilang tanpa pemberitahuan. Agen pencari AI yang memantau fitur ini untuk tim SEO membutuhkan akses terus-menerus ke data SERP langsung. Namun, Google dan mesin pencari lainnya menerapkan perlindungan bot yang agresif termasuk reCAPTCHA dan pembatasan kecepatan yang memblokir pemantauan SERP otomatis. Panduan ini menunjukkan cara membangun pipa pemantauan fitur SERP untuk agen AI menggunakan CapSolver untuk menjaga pengumpulan data yang tidak terputus.
Tim SEO dan GEO (Generative Engine Optimization) bergantung pada data SERP yang akurat dan tepat waktu untuk membuat keputusan. Ketika agen AI memantau hasil pencarian untuk perubahan peringkat, peluang snippet unggulan, atau pergerakan pesaing, ia perlu menjalankan ratusan hingga ribuan permintaan pencarian harian. Sistem deteksi bot Google mengidentifikasi pola ini dan memicu tantangan verifikasi.
Dinding verifikasi muncul dalam beberapa bentuk: tantangan reCAPTCHA halaman penuh setelah permintaan berulang, halaman interstisial "lalu lintas tidak biasa", atau blokir IP lengkap. Menurut dokumentasi crawler Google, akses otomatis ke hasil pencarian tunduk pada pembatasan kecepatan dan persyaratan verifikasi.
Untuk agen pencari AI, ini menciptakan celah kritis. Agen dapat menganalisis data SERP dengan hebat — mengidentifikasi pola, mendeteksi perubahan, dan merekomendasikan tindakan — tetapi tidak dapat mengumpulkan data yang dibutuhkannya untuk berfungsi. CapSolver mengatasi celah ini dengan menyelesaikan tantangan verifikasi secara inline, memungkinkan pipa pemantauan terus berjalan tanpa gangguan.
Instal paket yang diperlukan:
pip install git+https://github.com/capsolver-ai/capsolver-core.git
pip install aiohttp beautifulsoup4 pandas schedule
Atur kunci API Anda:
export CAPSOLVER_API_KEY="your-capsolver-api-key"
Persyaratan tambahan:
Tentukan fitur SERP apa yang perlu dilacak oleh agen AI dan bagaimana mendeteksinya:
from dataclasses import dataclass
from typing import List, Optional
from enum import Enum
class SERPFeature(Enum):
FEATURED_SNIPPET = "featured_snippet"
PEOPLE_ALSO_ASK = "people_also_ask"
AI_OVERVIEW = "ai_overview"
LOCAL_PACK = "local_pack"
KNOWLEDGE_PANEL = "knowledge_panel"
VIDEO_CAROUSEL = "video_carousel"
IMAGE_PACK = "image_pack"
TOP_STORIES = "top_stories"
SHOPPING_RESULTS = "shopping_results"
@dataclass
class SERPResult:
keyword: str
features_detected: List[SERPFeature]
featured_snippet_url: Optional[str]
featured_snippet_text: Optional[str]
paa_questions: List[str]
ai_overview_present: bool
ai_overview_sources: List[str]
organic_positions: List[dict] # [{url, title, position}]
timestamp: float
class SERPFeatureDetector:
"""Deteksi fitur SERP dari halaman hasil pencarian yang telah diproses."""
def detect_features(self, html_content: str, keyword: str) -> SERPResult:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_content, 'html.parser')
features = []
# Deteksi snippet unggulan
snippet_div = soup.select_one('[data-attrid="wa:/description"], .xpdopen')
featured_url = None
featured_text = None
if snippet_div:
features.append(SERPFeature.FEATURED_SNIPPET)
featured_text = snippet_div.get_text(strip=True)[:500]
link = snippet_div.find('a')
featured_url = link['href'] if link else None
# Deteksi kotak People Also Ask
paa_questions = []
paa_section = soup.select('[data-q]')
if paa_section:
features.append(SERPFeature.PEOPLE_ALSO_ASK)
paa_questions = [q.get('data-q', '') for q in paa_section[:8]]
# Deteksi Tinjauan AI
ai_overview = soup.select_one('[data-attrid*="ai"], .ai-overview-container')
ai_sources = []
if ai_overview:
features.append(SERPFeature.AI_OVERVIEW)
source_links = ai_overview.select('a[href]')
ai_sources = [a['href'] for a in source_links[:5]]
# Deteksi paket lokal
if soup.select_one('.VkpGBb, [data-attrid*="local"]'):
features.append(SERPFeature.LOCAL_PACK)
return SERPResult(
keyword=keyword,
features_detected=features,
featured_snippet_url=featured_url,
featured_snippet_text=featured_text,
paa_questions=paa_questions,
ai_overview_present=SERPFeature.AI_OVERVIEW in features,
ai_overview_sources=ai_sources,
organic_positions=self._extract_organic(soup),
timestamp=time.time()
)
def _extract_organic(self, soup) -> list:
results = []
for i, item in enumerate(soup.select('.g, [data-sokoban-container]')[:10], 1):
link = item.select_one('a[href^="http"]')
title = item.select_one('h3')
if link and title:
results.append({
"position": i,
"url": link['href'],
"title": title.get_text(strip=True)
})
return results
Bangun lapisan pengumpulan data yang menangani tantangan verifikasi Google:
import asyncio
import aiohttp
import time
import random
from capsolver_core import create_capsolver, CaptchaType, CaptchaInfo
class SERPCollector:
"""Kumpulkan data SERP dengan penyelesaian CAPTCHA otomatis."""
def __init__(self, api_key: str, proxies: list):
self.cap = create_capsolver(api_key=api_key)
self.proxies = proxies
self.proxy_index = 0
self.stats = {"queries": 0, "captchas_solved": 0, "failures": 0}
def _get_proxy(self) -> str:
proxy = self.proxies[self.proxy_index % len(self.proxies)]
self.proxy_index += 1
return proxy
async def search(self, keyword: str, location: str = "us") -> str:
"""Lakukan pencarian Google dengan penanganan CAPTCHA."""
proxy = self._get_proxy()
url = f"https://www.google.com/search?q={keyword}&gl={location}&hl=en"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9",
"Accept": "text/html,application/xhtml+xml"
}
async with aiohttp.ClientSession() as session:
async with session.get(url, headers=headers, proxy=proxy, timeout=30) as resp:
html = await resp.text()
# Periksa apakah halaman ini CAPTCHA
if self._is_captcha_page(html):
html = await self._solve_and_retry(keyword, location, proxy, session)
self.stats["queries"] += 1
return html
def _is_captcha_page(self, html: str) -> bool:
"""Deteksi apakah respons adalah halaman tantangan CAPTCHA."""
captcha_indicators = [
"lalu lintas tidak biasa dari komputer Anda",
"g-recaptcha",
"recaptcha/api",
"sorry/index",
"captcha"
]
return any(indicator in html.lower() for indicator in captcha_indicators)
async def _solve_and_retry(self, keyword: str, location: str, proxy: str, session) -> str:
"""Selesaikan CAPTCHA dan coba ulang pencarian."""
# Google menggunakan reCAPTCHA v2 pada halaman tantangannya
info = CaptchaInfo(
type=CaptchaType.RECAPTCHA_V2,
website_url="https://www.google.com/sorry/index",
website_key="6LfwuyUTAAAAAOAmoS0fdqijC2PbbdH4kjq62Y1b"
)
solution = await self.cap.solve(info)
self.stats["captchas_solved"] += 1
# Coba ulang pencarian dengan token yang telah diselesaikan
retry_url = f"https://www.google.com/search?q={keyword}&gl={location}&hl=en"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"}
# Sertakan token CAPTCHA dalam permintaan ulang
async with session.get(retry_url, headers=headers, proxy=proxy) as resp:
return await resp.text()
async def close(self):
await self.cap.aclose()
Garis panduan penyelesaian reCAPTCHA CapSolver memberikan detail tambahan tentang menangani implementasi reCAPTCHA Google yang spesifik.
Gabungkan pengumpulan dan deteksi menjadi pipa pemantauan yang dijadwalkan:
class SERPMonitoringPipeline:
"""Pipa pemantauan fitur SERP lengkap."""
def __init__(self, api_key: str, proxies: list):
self.collector = SERPCollector(api_key, proxies)
self.detector = SERPFeatureDetector()
self.results_history = []
async def monitor_keywords(self, keywords: list, location: str = "us") -> list:
"""Pantau sejumlah kata kunci untuk perubahan fitur SERP."""
results = []
for keyword in keywords:
try:
# Kumpulkan data SERP
html = await self.collector.search(keyword, location)
# Deteksi fitur
serp_result = self.detector.detect_features(html, keyword)
results.append(serp_result)
# Pembatasan kecepatan — jeda acak 5-10 detik
await asyncio.sleep(random.uniform(5, 10))
except Exception as e:
results.append(SERPResult(
keyword=keyword, features_detected=[],
featured_snippet_url=None, featured_snippet_text=None,
paa_questions=[], ai_overview_present=False,
ai_overview_sources=[], organic_positions=[],
timestamp=time.time()
))
self.results_history.extend(results)
return results
def detect_changes(self, current: list, previous: list) -> list:
"""Bandingkan hasil saat ini dan sebelumnya untuk mendeteksi perubahan."""
changes = []
prev_map = {r.keyword: r for r in previous}
for result in current:
prev = prev_map.get(result.keyword)
if not prev:
continue
# Snippet unggulan diperoleh/hilang
had_snippet = SERPFeature.FEATURED_SNIPPET in prev.features_detected
has_snippet = SERPFeature.FEATURED_SNIPPET in result.features_detected
if has_snippet and not had_snippet:
changes.append(f"[DIPEROLEH] Snippet unggulan untuk '{result.keyword}': {result.featured_snippet_url}")
elif had_snippet and not has_snippet:
changes.append(f"[HILANG] Snippet unggulan untuk '{result.keyword}'")
# Tinjauan AI muncul/hilang
if result.ai_overview_present and not prev.ai_overview_present:
changes.append(f"[BARU] Tinjauan AI muncul untuk '{result.keyword}'")
elif prev.ai_overview_present and not result.ai_overview_present:
changes.append(f"[DIHAPUS] Tinjauan AI dihapus untuk '{result.keyword}'")
return changes
Untuk memantau ratusan kata kunci, optimalkan biaya dan kinerja:
| Kata Kunci yang Dimonitor | Pemeriksaan Harian | CAPTCHA Bulanan (est.) | Biaya Bulanan |
|---|---|---|---|
| 50 kata kunci | 4x/hari | ~600 | $1,2-1,8 |
| 200 kata kunci | 2x/hari | ~1.200 | $2,4-3,6 |
| 500 kata kunci | 2x/hari | ~3.000 | $6-9 |
| 1.000 kata kunci | 1x/hari | ~3.000 | $6-9 |
Strategi optimasi:
Dapatkan Kode Bonus Anda: Gunakan kode WEBS di Dashboard CapSolver untuk mendapatkan bonus tambahan 5% pada setiap recharge. Sempurna untuk tim SEO yang menjalankan pemantauan SERP skala besar.
Dokumentasi penggalian web CapSolver menutupi pola infrastruktur tambahan untuk pengumpulan data volume tinggi. Untuk menangani alat pencarian yang dilindungi Cloudflare, guru penyelesaian Turnstile memberikan detail implementasi yang relevan.
Membangun pemantauan fitur SERP untuk agen pencari AI membutuhkan lapisan pengumpulan data yang memahami CAPTCHA, parser deteksi fitur, dan sistem deteksi perubahan. CapSolver menyediakan infrastruktur penyelesaian verifikasi yang menjaga pipa pemantauan Anda berjalan terus-menerus, menyelesaikan tantangan reCAPTCHA Google dalam 3-8 detik sehingga agen AI Anda selalu memiliki data SERP terbaru untuk dianalisis.
Mulailah dengan kata kunci prioritas tertinggi Anda, validasi akurasi deteksi, lalu skala ke cakupan kata kunci penuh. Kombinasi proxy residensial, pembatasan kecepatan cerdas, dan penyelesaian CAPTCHA otomatis memberikan keandalan pengumpulan data 98%+ dengan biaya yang dapat dikelola.
Dengan rotasi proxy yang tepat dan penyelesaian CAPTCHA, Anda dapat memantau 500-1.000 kata kunci per hari dari satu instance pipeline. Faktor pembatas biasanya adalah ukuran pool proxy daripada kapasitas penyelesaian CAPTCHA. CapSolver menangani ribuan tugas konkuren tanpa pembatasan kecepatan.
Ya. Detektor fitur SERP mengidentifikasi bagian AI Overview dalam hasil pencarian. Karena AI Overviews muncul di halaman hasil pencarian Google standar, pendekatan pengumpulan dan penyelesaian CAPTCHA yang sama menangkapnya. Lacak kata kunci mana yang memicu AI Overviews dan sumber mana yang dikutip.
Dengan proxy residensial dan penundaan 5-10 detik antar query, tingkat penemuan CAPTCHA biasanya 5-15%. Tanpa proxy atau dengan waktu yang agresif, bisa mencapai 30-50%. Kombinasi proxy yang baik dan penyelesaian CAPTCHA memastikan keberhasilan pengumpulan data hampir 100%.
Ya. Ekstraksi posisi organik menangkap 10 hasil teratas untuk setiap kata kunci. Lacak URL kompetitor di seluruh kumpulan kata kunci Anda untuk mendeteksi kenaikan, penurunan, dan masuknya entri baru. Gabungkan dengan pelacakan potongan fitur untuk mengidentifikasi peluang konten.
Atur parameter gl (geolokasi) dalam URL pencarian Anda untuk menargetkan negara tertentu. Google menyajikan hasil lokal berdasarkan parameter ini. Pendekatan penyelesaian CAPTCHA bekerja sama persis di semua domain Google — sistem reCAPTCHA yang sama melindungi versi regional.
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.
