ChatGPT·Perplexity·네이버가 내 글을 24시간 안에 읽게 만드는 법
AI 검색 최적화(GEO)에서 가장 많이 오해하는 지점: "콘텐츠만 잘 쓰면 AI가 알아서 인용한다" — 틀렸다. ChatGPT·Perplexity·Gemini는 답변할 때 그 순간 검색엔진 인덱스에 있는 페이지를 실시간으로 요약한다. 인덱스에 없는 페이지는 세상에서 가장 좋은 글이어도 절대 인용되지 않는다. 그래서 GEO의 첫 관문은 글쓰기가 아니라 **"얼마나 빨리 색인되느냐"**다.
이 글은 새로 발행한 글을 24~72시간 안에 주요 검색엔진에 색인시키는 방법을, 채널별로 그대로 따라 할 수 있게 정리한 것이다.
핵심부터 말하면:
- IndexNow 하나면 Bing + 네이버 + Yandex가 한 번에 핑된다. (가성비 1위)
- 구글은 IndexNow를 안 쓴다. 별도 트랙(Search Console + 내부링크)으로 가속한다.
- Sitemap ping(
google.com/ping?sitemap=)은 죽었다. 2023년 폐기됐다.
왜 "색인 속도"가 GEO의 전부인가
전통 SEO는 "콘텐츠 → 크롤링 → 인덱싱 → 랭킹 상승"에 몇 주가 걸린다. 그런데 AI 검색은 다르다.
ChatGPT(검색 모드)나 Perplexity는 질문을 받으면 내부적으로 검색 쿼리를 만들고, Bing/구글 인덱스 상위 결과를 즉석에서 긁어와 요약한다. 즉, 검색 결과창에 내 페이지가 올라가는 순간 AI 답변에도 등장할 수 있다. 모델을 재학습시킬 필요가 전혀 없다.
그래서 GEO의 승부처는 두 개로 쪼개진다:
- 색인 속도 — AI가 읽을 수 있는 상태로 만드는 것 (이 글의 주제)
- 인용 적합성 — 색인된 뒤 실제로 인용되도록 직답형·구조화하는 것 (별도 글)
이 글은 1번, 색인 속도를 다룬다.
0단계. 모든 채널 공통 준비
0-1. robots.txt에 사이트맵 선언
https://내도메인/robots.txt:
User-agent: *
Allow: /
Sitemap: https://내도메인/sitemap.xml
Next.js라면 app/robots.ts:
import type { MetadataRoute } from 'next'
export default function robots(): MetadataRoute.Robots {
return {
rules: { userAgent: '*', allow: '/' },
sitemap: 'https://내도메인/sitemap.xml',
}
}
0-2. sitemap.xml — <lastmod>을 정확하게
<lastmod>는 검색엔진이 "이 페이지를 다시 크롤링할까?"를 정하는 핵심 신호다. 글을 수정할 때마다 갱신해야 한다.
Next.js app/sitemap.ts:
import type { MetadataRoute } from 'next'
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const posts = await getPublishedPosts() // DB에서 발행글 조회
return posts.map((p) => ({
url: `https://내도메인/blog/${p.slug}`,
lastModified: p.updatedAt, // ← ISO 날짜. 글 수정 시 갱신
changeFrequency: 'weekly',
priority: 0.8,
}))
}
1단계. IndexNow — 가성비 1위 (Bing + 네이버 + Yandex 동시)
IndexNow는 Bing, 네이버, Yandex, Seznam, Yep이 함께 쓰는 즉시 색인 프로토콜이다. api.indexnow.org에 한 번 제출하면 모든 파트너에 전파된다. (구글은 파트너가 아니다 → 4단계에서 따로.)
1-1. 키 생성
8~128자, [a-zA-Z0-9-] 문자. 랜덤 hex면 충분하다:
openssl rand -hex 16
# 예: a1b2c3d4e5f6071829abcdef01234567
1-2. 키 파일 호스팅
https://내도메인/{키}.txt 에 키 문자열만 담아 올린다 (content-type: text/plain).
Next.js라면 public/a1b2c3d4e5f6071829abcdef01234567.txt 파일을 만들고 안에 키만 적으면 /a1b2…txt로 자동 서빙된다.
⚠️ 이 키 파일은 반드시 글을 제출할 그 도메인에 있어야 한다. 다른 도메인에 올려두고 남의 도메인 URL을 제출하는 건 불가능하다. (그래서 IndexNow는 "내가 통제하는 도메인"에서만 쓸 수 있다.)
1-3. URL 제출
단건(GET) — 테스트용:
curl "https://api.indexnow.org/indexnow?url=https://내도메인/blog/post-1&key=a1b2c3d4e5f6071829abcdef01234567"
배치(POST) — 운영용, 한 번에 최대 10,000개:
curl -X POST "https://api.indexnow.org/indexnow" \
-H "Content-Type: application/json; charset=utf-8" \
-d '{
"host": "내도메인",
"key": "a1b2c3d4e5f6071829abcdef01234567",
"keyLocation": "https://내도메인/a1b2c3d4e5f6071829abcdef01234567.txt",
"urlList": [
"https://내도메인/blog/post-1",
"https://내도메인/blog/post-2"
]
}'
1-4. 응답코드 해석 (이걸 모르면 디버깅 못 한다)
| 코드 | 의미 | 대처 |
|---|---|---|
| 200 | 정상 수신·키 검증 OK | 끝 |
| 202 | 수신, 키 검증 대기중 | 정상. 곧 키파일을 확인함 |
| 400 | 잘못된 요청(JSON 형식 등) | body 점검 |
| 403 | 키 파일이 없거나 내용 불일치 | 1-2 다시 확인 |
| 422 | URL 호스트 ≠ 제출 host, 또는 키 불일치 | 도메인 일치 확인 |
| 429 | 너무 자주 보냄 | 발행 시점에만, 같은 URL 반복 금지 |
1-5. 발행 훅으로 자동화 (Python 예시)
글이 발행/수정되는 순간 자동으로 핑하게 만든다:
import httpx
INDEXNOW_KEY = "a1b2c3d4e5f6071829abcdef01234567"
HOST = "내도메인"
def ping_indexnow(urls: list[str]) -> int:
resp = httpx.post(
"https://api.indexnow.org/indexnow",
json={
"host": HOST,
"key": INDEXNOW_KEY,
"keyLocation": f"https://{HOST}/{INDEXNOW_KEY}.txt",
"urlList": urls,
},
headers={"Content-Type": "application/json; charset=utf-8"},
timeout=10,
)
return resp.status_code # 200/202면 성공
# 글 status가 published로 바뀌는 지점에서 호출
# ping_indexnow(["https://내도메인/blog/post-1"])
2단계. Bing Webmaster (색인 현황 + 진단 보너스)
Bing은 내부적으로 IndexNow를 쓰므로 1단계만 해도 색인은 된다. Bing Webmaster를 추가로 등록하면 색인 현황·검색 쿼리·진단을 볼 수 있고 별도 제출 쿼터도 받는다.
https://www.bing.com/webmasters접속 → 사이트 추가- 소유 확인: XML 파일 / meta 태그 / CNAME DNS 중 하나, 또는 Google Search Console에서 import(제일 빠름)
- API 키: Settings → API access → API Key
선택적으로 URL 직접 제출:
curl -X POST "https://ssl.bing.com/webmaster/api.svc/json/SubmitUrl?apikey=발급받은키" \
-H "Content-Type: application/json" \
-d '{"siteUrl":"https://내도메인","url":"https://내도메인/blog/post-1"}'
3단계. 네이버 서치어드바이저 (한국 GEO면 사실상 필수)
네이버가 IndexNow 파트너라 1단계로도 핑은 가지만, 네이버 색인의 정공법은 서치어드바이저다.
https://searchadvisor.naver.com→ 웹마스터도구 → 사이트 등록- 소유 확인: HTML 파일 업로드 또는
<meta>태그 - 요청 → 사이트맵 제출:
https://내도메인/sitemap.xml - 요청 → 웹페이지 수집: 새 글 URL 단건 제출 (하루 쿼터 있음 → 중요 글 위주)
- 검증 → 로봇룰스에서 네이버 봇(Yeti) 허용 확인
4단계. 구글 — "즉시 색인"은 없다, 현실적인 가속만 있다
구글엔 IndexNow 같은 즉시 핑이 없다. 그리고 구글 Indexing API는 JobPosting / BroadcastEvent(라이브) 페이지만 공식 지원한다 — 일반 블로그 글에 쓰면 무시되거나 정책 위반이다. 블로그는 쓰지 마라.
블로그 색인 가속의 정석:
4-1. Search Console 등록
https://search.google.com/search-console → 속성 추가 → 소유 확인(도메인 속성 = DNS TXT 권장)
4-2. 사이트맵 제출
색인생성 → Sitemaps → sitemap.xml 제출 (한 번 하면 이후 자동 재크롤)
4-3. URL 검사 → 색인 요청 (수동)
상단 URL 검사 → 글 URL 입력 → "색인 생성 요청". 하루 약 10건 쿼터 → 중요 글만.
4-4. 진짜 레버는 이것 — 발견 속도 단축
- 이미 색인된 페이지(홈·인기글)에서 새 글로 내부링크 → 크롤러가 링크를 타고 빨리 발견한다. (고립된 신규 페이지가 제일 느리다)
<lastmod>정확 + 정기 발행으로 크롤 주기 자체를 단축- RSS/Atom 피드 제공 → 구글이 피드도 읽는다
- 외부 고권위 사이트에서 링크 1~2개 받으면 발견 속도가 급상승한다
5단계. Sitemap ping은 죽었다 — 무엇으로 대체하나
- 구글
google.com/ping?sitemap=...→ 2023년 폐기(무시/404) - Bing 익명 ping → 중단
대체: robots.txt에 Sitemap: 선언(0단계) + 각 도구(Search Console·Bing·네이버)에 사이트맵 한 번 등록하면 끝. 즉시성은 IndexNow가 ping 역할을 대체한다.
발행 → 색인 워크플로 체크리스트
새 글을 발행할 때마다 반복하는 루틴:
- ✅ 글 published →
updatedAt갱신 →sitemap.xml자동 반영 - ✅
ping_indexnow([url])호출 (Bing·네이버·Yandex 동시) - ✅ 네이버 서치어드바이저 "웹페이지 수집"에 URL 제출 (중요 글)
- ✅ 구글 Search Console URL 검사 → 색인 요청 (중요 글)
- ✅ 홈/인기글에서 새 글로 내부링크 1개 이상 걸기
- ⏱️ 24~72시간 후 색인 확인
일회성 셋업(처음 한 번만): IndexNow 키 파일 호스팅 → Bing/네이버/구글 소유 확인 → 각 도구에 사이트맵 제출. 이후엔 2~5번만 반복하면 된다.
색인됐는지 확인하는 법
- Bing:
site:내도메인/blog/post-1검색 / Bing Webmaster의 URL Inspection - 네이버: 서치어드바이저 → "수집 현황"
- 구글:
site:내도메인/blog/post-1/ Search Console URL 검사의 "색인 생성됨" 여부 - 최종 GEO 확인: 색인된 뒤 타깃 질문을 ChatGPT/Perplexity에 던져, 그 글이 인용 출처로 등장하는지 확인
마지막으로 — 색인은 시작일 뿐이다
여기까지 하면 "AI가 읽을 수 있는 상태"가 된다. 하지만 색인 ≠ 인용이다. 실제로 AI 답변에 인용되려면 콘텐츠가 해당 질문에 직답형으로, 구조화(FAQ·비교표·정의 블록)되어, 최신성 신호를 갖춘 형태여야 한다. 그건 다음 글에서 다룬다.
색인은 GEO의 입장권이고, 인용 적합성은 그 안에서의 승부다. 둘 다 갖춰야 "1주일 안에 AI가 우리를 언급한다"는 말이 현실이 된다.