OpenAI Crawler Logs: Apa yang Perlu Dicatat Tim Infrastruktur
Log crawler yang bagus tidak menjawab:
“Kenapa brand kita tidak direkomendasikan ChatGPT?”
Ia menjawab pertanyaan yang lebih sempit dan lebih berguna:
“Apakah crawler yang seharusnya bisa mengakses website benar-benar masuk, ke URL apa, dan apa respons server kita?”
Itu boundary yang harus dijaga.
Server log adalah technical telemetry.
Bukan citation dashboard.
OpenAI saat ini mendokumentasikan beberapa user-agent dengan fungsi berbeda:
OAI-SearchBot untuk Search.
GPTBot untuk potential foundation-model training.
OAI-AdsBot untuk landing page ChatGPT Ads.
ChatGPT-User untuk certain user-triggered actions.
Tim infrastruktur sebaiknya mencatat mereka sebagai kategori terpisah.
Jangan group semua menjadi:
`AI_BOT`.
Kalau semua disatukan, diagnosis akan kacau.
Search traffic dan training crawl punya policy berbeda.
Ads validation punya urgency berbeda.
User-triggered action punya interpretation berbeda.
Field pertama: timestamp
Simpan timestamp dengan timezone jelas.
UTC ideal di raw log.
Dashboard bisa convert ke WIB.
Kenapa?
Marketing bilang:
“Ads di-submit 14.05 WIB.”
Infra perlu mencari OAI-AdsBot request sekitar waktu itu.
Kalau log server UTC tanpa label, orang salah enam atau tujuh jam.
Troubleshooting gagal karena clock mismatch.
Gunakan standardized timestamp.
Millisecond jika high-volume.
NTP sync.
Simple.
Critical.
Field kedua: user-agent
Simpan full UA.
OpenAI user-agent version bisa berubah.
Docs bahkan menyebut version number mungkin berubah.
Jangan hanya parse exact static string.
Raw value penting untuk forensic.
Then derived field:
bot_type = OAI-SearchBot.
GPTBot.
OAI-AdsBot.
ChatGPT-User.
Unknown.
This enables aggregation.
But never discard raw.
If parser breaks after version update, raw saves you.
Field ketiga: source IP
OpenAI publishes IP ranges for SearchBot, AdsBot, GPTBot, and ChatGPT-User.
Store remote IP as observed at correct layer.
If behind Cloudflare, origin remote IP may be Cloudflare IP.
Need trusted forwarding header.
At edge, source visible.
Security can validate:
UA claims OAI-SearchBot.
IP within published OpenAI SearchBot ranges?
This helps detect spoof.
Don't make UA-only bypass.
Crawler logs should support verification.
Field fourth: requested URL
Path + query.
Not just path.
Why query?
Maybe crawler accesses:
/page/
/page?amp=1
/page?utm=…
/page?print=true
Duplicate detection.
Canonical issues.
Infinite parameter crawl.
For privacy, be careful if query contains sensitive data.
Public URLs should not contain secrets anyway.
Redact known tokens.
Do not log passwords.
Security and observability must balance.
For crawler analytics, path usually enough but raw query useful in secure logs.
Field fifth: host
If website has:
www.
non-www.
subdomains.
staging accidentally public.
Log host.
OAI-SearchBot hitting staging is a major problem.
Maybe robots wrong.
Maybe DNS public.
Maybe links leaked.
Host dimension reveals.
Also multi-brand/company infrastructure can separate domains.
Field sixth: HTTP method
Usually GET.
Maybe HEAD.
User-triggered actions can vary.
Store.
If OpenAI crawler unexpectedly POSTs to endpoint, investigate.
Search crawlers shouldn't be executing transaction.
OAI-AdsBot validates landing page.
ChatGPT-User behavior user-triggered.
Method is security signal.
Don't assume.
Field seventh: status code
The star metric.
200.
301.
302.
403.
404.
429.
500.
503.
For crawler readiness:
200 good.
3xx inspect chain.
403 blocked.
429 rate-limited.
5xx server failure.
OpenAI advertiser guidance explicitly tells teams to inspect 429 and web protection logs when crawler access fails.
Build status distribution per bot.
OAI-SearchBot success rate.
OAI-AdsBot success rate.
GPTBot policy maybe intentionally blocked by robots.
Interpret according policy.
Do not report 403 GPTBot as incident if company intentionally blocks training.
Context.
Field eighth: response size
Tiny 200 response can be challenge page.
Expected content article maybe 150 KB.
Crawler gets 4 KB “Just a moment”.
Status 200.
Technically success.
Content failure.
Response bytes help detect.
Compare human vs crawler.
Don't rely alone.
Some pages genuinely tiny.
But anomaly flag useful.
Field ninth: content type
text/html.
application/pdf.
application/json.
image.
robots.txt text.
If SearchBot hits PDF, okay if public and intended.
If AdsBot landing destination returns application/octet-stream, maybe review issue.
OpenAI recommends directly reachable web landing pages for ads where possible.
Content type helps.
Field tenth: response time
Crawler timeout may result from slow origin.
Log upstream response time.
edge response time.
TTFB.
If 20-second pages, crawl reliability poor.
User experience too.
No need special OpenAI threshold unless documented.
Use normal web performance engineering.
Crawler log can identify templates consistently slow.
Field sebelas: redirect target
If 301, where?
Chain.
Store final URL in derived crawl QA.
A raw access log entry alone doesn't know next request is same session.
But analysis can reconstruct.
Use synthetic crawler test too.
Track:
initial.
hop count.
final.
status.
This is useful for canonical migrations.
Field dua belas: robots decision
Server access log cannot always say what crawler thought robots.
Maintain robots snapshot history.
At timestamp X, robots version hash Y.
Then if crawler stopped, know policy.
Store:
robots content.
deployment timestamp.
checksum.
If marketing changed robots today, audit can prove.
OpenAI says Search systems may take around 24 hours to adjust after robots update.
Change history matters.
Field tiga belas: WAF action
At Cloudflare/Akamai edge:
allow.
challenge.
block.
rate-limit.
managed rule ID.
bot category.
verified bot signal.
This may be more important than origin logs.
Blocked request never reaches origin.
Join edge and origin where possible.
OAI-AdsBot officially verified/allowlisted by Cloudflare according to OpenAI, but custom rules can still interfere.
Store edge event.
Field empat belas: cache status
HIT.
MISS.
BYPASS.
STALE.
Robots.txt cache stale can serve old Disallow.
Page cache stale can serve outdated price.
Crawler sees what edge serves.
Cache status helps investigate.
For commerce/ads, feed and landing price mismatch may be cache issue.
AI Optimization touches CDN ops.
Field lima belas: bot verification result
Derived field:
verified_openai = true/false/unknown.
Based on:
official IP range.
provider verified bot signal.
UA.
Don't make one indicator universal.
OpenAI says crawler infrastructure may evolve and advises combining identification mechanisms.
Keep update process for ranges.
Version your verification list.
Field enam belas: policy expectation
This is powerful.
For each bot:
OAI-SearchBot expected = allow.
GPTBot expected = block.
OAI-AdsBot expected = allow landing only.
Now anomaly engine can say:
SearchBot got 403 unexpectedly.
GPTBot got 403 expected.
Without policy context, alerts noisy.
Infrastructure observability should know intent.
Field tujuh belas: template/content class
Map URL to:
article.
service.
product.
landing page.
checkout.
admin.
API.
Now you can see SearchBot mostly crawling tag pages but not canonical service pages.
That's actionable crawl architecture.
Again, not source selection.
But technical coverage.
AdsBot should mostly hit submitted landing pages.
If it wanders elsewhere, inspect links or behavior.
OpenAI says AdsBot only visits pages submitted as ads.
If logs show unexpected pattern, verify bot identity first.
Maybe spoof.
Field delapan belas: canonical/noindex snapshot for sampled URLs
Not every request requires HTML parsing in log pipeline.
But periodic crawl QA can store:
canonical.
robots meta.
title.
final URL.
This helps diagnose:
SearchBot 200 but page noindex.
Duplicate canonicals.
Wrong host.
For ChatGPT Search, OpenAI explicitly documents noindex behavior in Atlas navigational surfacing contexts.
Canonical behavior is less specifically documented, so treat canonical as general web hygiene.
Do not label it OpenAI requirement.
What should dashboard show?
Not 50 charts.
Five panels.
1. Requests by OpenAI bot type.
2. Status distribution.
3. Blocked/rate-limited critical URLs.
4. Top crawled templates/URLs.
5. Change timeline.
Add bot verification failures.
For Ads periods, special panel:
submitted landing URL.
AdsBot request seen?
status.
WAF action.
final page.
This lets marketing and infra communicate.
What should trigger alert?
P0:
OAI-AdsBot 403 on active campaign landing pages.
OAI-SearchBot blocked on all public site after robots deployment.
Mass 5xx.
Security anomaly.
P1:
429 rate spikes.
Important section no crawl due accidental rule.
Robots change unexpected.
P2:
single 404 old URL.
normal bot exploration.
Don't alert every request.
Automation should reduce noise.
How long retain logs?
Depends security, privacy, infrastructure cost, regulation.
30-90 days may be operational starting point for many teams, but no universal rule.
Enterprise may retain longer under policy.
Do not store unnecessary personal data.
Crawler IP isn't user personal behavior in same way, but logs can still contain sensitive URL parameters.
Sanitize.
Access control.
Retention policy.
No raw logs in open Slack channel.
Security basics.
Can crawler frequency predict citation?
No.
This deserves explicit line.
100 SearchBot hits do not mean 100 citations.
One hit can support index refresh.
Frequent crawl can reflect change rate, site structure, crawl scheduling, or other factors.
OpenAI doesn't publish “crawl frequency = ranking” rule.
Do not turn infrastructure metric into marketing score.
Use logs for:
access,
health,
policy,
coverage.
Use Search observation for:
source presence.
Use analytics for:
referral.
Use CRM for:
outcome.
Four layers.
What about ChatGPT-User?
Keep separate.
It may be triggered by a user action.
Robots may not apply in same way.
A spike could reflect actual user requests.
Don't block simply because it's automated.
But application security still applies.
Auth.
rate.
permissions.
If ChatGPT-User hits public page, okay.
If sensitive endpoint, normal security.
Logs help distinguish from OAI-SearchBot.
What about GPTBot?
If policy blocks, you may see robots fetch but little content crawl.
That's expected.
OpenAI says GPTBot is potential training crawler.
Don't page on-call because crawl absent.
Policy desired.
This is why monitoring must be business-aware.
What should monthly infra report to marketing?
One page.
OAI-SearchBot:
accessible? yes/no.
success rate.
critical URLs.
blocks.
OAI-AdsBot:
landing readiness.
errors.
ChatGPT-User:
not a Search KPI, only operational notes if relevant.
GPTBot:
policy status.
Changes:
robots/WAF/CDN.
No citation claims.
No “AI authority score.”
Marketing will appreciate clarity.
In one organization, the most useful discovery wasn't that SearchBot traffic rose.
It was that 38% of OAI-SearchBot requests to `/research/` got 403 after a security rule change.
That is actionable.
Fix rule.
Then Search crawl works.
Whether ChatGPT eventually uses the research as source is a different question.
Infrastructure's job is not to guarantee citation.
Its job is to make intended public content reliably reachable by the right crawler while preserving security and policy.
A good log tells you whether that promise is being kept.
Bacaan terkait di GEO.or.id
- Cluster: ChatGPT & OpenAI Search
- Kerangka terkait: ChatGPT Analysis
- Kerangka terkait: AI Crawler Access and Referral Measurement Protocol
- Artikel terkait: Cara Audit Crawlability untuk OAI-SearchBot tanpa Membuka Semua Bot
- Artikel terkait: Kenapa Cloudflare Bisa Menghalangi Crawler OpenAI Meski Robots.txt Sudah Benar
- Artikel terkait: Dari SearchBot ke AdsBot: OpenAI Mulai Memisahkan Fungsi Crawler Lebih Jelas
- Artikel terkait: OAI-AdsBot untuk Pengiklan: Apa yang Harus Dicek di WAF dan CDN
