Citeon
업종별 가이드

F&B·외식업 로컬 AI 검색 공략

김태오
김태오 · 그로스·퍼포먼스 리드

Google AI Overviews·Perplexity·ChatGPT Search가 "강남 파스타 맛집"·"근처 24시 분식집" 같은 로컬 의도 쿼리를 처리할 때, 인용 후보를 결정하는 신호는 전통적 로컬 SEO(GMB 별점·리뷰 수)와 구조적으로 다르다. AI 엔진은 크롤링한 페이지의 JSON-LD에서 영업시간·메뉴·가격대·위치 좌표를 직접 파싱하고, 이 데이터의 완전성(completeness)과 NAP(Name·Address·Phone) 일관성을 신뢰도 신호로 처리한다. 2024년 하반기 이후 Google AI Overviews가 로컬 팩 결과와 통합되면서, 구조화 데이터가 누락된 F&B 페이지는 AI 합성 답변에서 실질적으로 비가시권에 놓인다.

로컬 AI 검색 파이프라인의 작동 구조

Google AI Overviews는 쿼리 의도를 탐색(정보 수집)·비교(옵션 평가)·즉시 방문(현재 열려있는 곳)으로 분류한 뒤, Knowledge Graph에 등록된 로컬 엔티티를 1차 후보로 인출한다. schema.org/Restaurant JSON-LD의 @idsameAs가 Google Maps CID·Wikidata QID와 연결되면 엔티티 신뢰도가 올라가고 GMB 데이터와 웹 페이지 데이터가 병합 인용된다.

Restaurant JSON-LD 완전 구현

schema.org/RestaurantFoodEstablishment의 하위 타입이다. 최소 필수 속성(name·address·telephone)만으로는 AI 인용 후보가 되기 어려우므로, 아래 확장 속성까지 구현해야 한다.

{
  "@context": "https://schema.org",
  "@type": "Restaurant",
  "@id": "https://example-restaurant.kr/gangnam#restaurant",
  "name": "예시 파스타 강남점",
  "url": "https://example-restaurant.kr/gangnam",
  "telephone": "+82-2-1234-5678",
  "servesCuisine": ["이탈리안", "파스타", "Italian", "Pasta"],
  "priceRange": "₩₩",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "테헤란로 123",
    "addressLocality": "강남구",
    "addressRegion": "서울특별시",
    "postalCode": "06234",
    "addressCountry": "KR"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 37.498095,
    "longitude": 127.027610
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
      "opens": "11:30",
      "closes": "22:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Saturday","Sunday"],
      "opens": "12:00",
      "closes": "21:00"
    }
  ],
  "hasMenu": "https://example-restaurant.kr/gangnam/menu",
  "acceptsReservations": true,
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.3",
    "reviewCount": "287",
    "bestRating": "5"
  },
  "sameAs": [
    "https://map.naver.com/v5/entry/place/123456789",
    "https://place.map.kakao.com/123456789",
    "https://www.google.com/maps/place/?cid=1234567890123456789"
  ]
}

NAP 일관성과 AI 크롤러 접근 제어

NAP 일관성 강제

Name·Address·Phone이 웹 사이트·GMB·네이버 플레이스·카카오맵·배달앱 간에 불일치하면 AI 엔진이 엔티티 동일성 판단에 실패해 신뢰도를 낮춘다. 도로명 주소 표기 차이("테헤란로 123" vs "테헤란로(역삼동) 123")나 전화번호 형식(02-1234-5678 vs +82-2-1234-5678)이 대표적인 불일치 원인이다. JSON-LD에는 ITU E.164 형식(+82-)을 사용하고, 외부 플랫폼 등록 문자열은 단일 마스터 시트로 관리한다.

robots.txt — AI 학습 크롤러와 검색 인덱서 분리

AI 학습 데이터 수집 크롤러와 AI 검색 인덱서는 다른 User-agent를 사용한다. 콘텐츠 무단 학습은 차단하면서 AI 답변 인용 채널은 유지하는 정책이 F&B 업종에서 실용적이다.

# 검색 인덱서 — AI 답변 인용을 위해 전체 허용
User-agent: Googlebot
Allow: /

User-agent: Bingbot
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: Applebot
Allow: /

# AI 학습 크롤러 — 무단 학습 방지 차단
User-agent: GPTBot
Disallow: /

User-agent: ClaudeBot
Disallow: /

User-agent: Google-Extended
Disallow: /

User-agent: CCBot
Disallow: /

Sitemap: https://example-restaurant.kr/sitemap.xml

신호 비교: 로컬 SEO vs AEO vs GEO

항목 로컬 SEO AEO (Answer Engine) GEO (Generative Engine)
주요 엔진 Google 지도·네이버 플레이스 Google AI Overviews·Siri Perplexity·ChatGPT Search
핵심 신호 GMB 완성도·리뷰 수·거리 JSON-LD 완전성·FAQ 구조화 JSON-LD + 자연어 컨텍스트 밀도
F&B 필수 구현 GMB 영업시간·사진·카테고리 openingHoursSpecification·hasMenu servesCuisine·MenuItem·priceRange
측정 지표 지도 노출·방향 요청 수 Rich Result 출현율·클릭률 AI 답변 인용 빈도(수동 샘플링)
업데이트 반영 속도 GMB 즉시~수시간 크롤 주기(수일~2주) 크롤 + 모델 반영(수주, 추정)

흔한 오해와 올바른 처리법

오해: "구글 비즈니스 프로필(GBP)만 최적화하면 AI 검색 인용은 자동으로 된다."

GBP 데이터(영업시간·주소·카테고리)는 Google Knowledge Panel과 Maps에 반영되지만, AI Overviews가 웹 페이지를 인용할 때는 해당 랜딩 페이지의 JSON-LD를 독립적으로 파싱한다. GBP와 웹 페이지 JSON-LD가 불일치하면 AI 엔진은 두 소스를 병합하지 못하고 인용을 회피하거나 불완전한 정보만 출력한다. 올바른 처리: GBP 영업시간·주소 업데이트 후 웹 페이지 JSON-LD를 반드시 동기화하고, Google Search Console의 리치 결과 테스트로 파싱 오류를 주 1회 이상 점검한다. CMS를 사용한다면 GBP API와 JSON-LD 생성 로직을 단일 소스(DB 레코드)에서 구동하도록 연결하는 것이 근본 해결책이다.

검증 및 측정

기술 FAQ

영업시간을 자주 변경하는 매장인데, JSON-LD를 매번 수동 업데이트해야 하나요?

수동 업데이트는 현실적으로 운영 리스크가 크다. CMS에서 영업시간을 단일 데이터 소스로 관리하고, 페이지 렌더링 시 openingHoursSpecification을 서버사이드에서 동적으로 생성하는 방식이 권장된다. Next.js 기준으로 generateMetadata 또는 별도 API 라우트에서 DB 값을 읽어 JSON-LD <script type="application/ld+json"> 태그를 SSR로 삽입한다. 임시 휴무는 specialOpeningHoursSpecificationvalidFrom·validThrough2025-12-25T00:00 형식으로 기재하면 해당 기간에만 자동 오버라이드된다.

여러 지점이 있을 때 JSON-LD를 한 페이지에 모두 넣어도 되나요?

각 지점은 독립 URL 페이지를 가져야 하고, 해당 페이지에만 그 지점의 JSON-LD를 삽입해야 한다. 브랜드 대표 페이지에 모든 지점의 JSON-LD를 병렬로 넣으면 AI 엔진이 엔티티를 정확히 구분하지 못하고 주소·전화번호가 뒤섞인 답변을 생성할 수 있다. 올바른 구조: 브랜드 대표 페이지에는 FoodEstablishment 또는 Organization 타입을 사용하고, 각 지점 페이지 URL을 location 배열 속성으로 연결한다. 지점 페이지는 각자 @id·sameAs·geo를 독립적으로 보유해야 Knowledge Graph 엔티티 매핑이 지점별로 분리된다.

참고 자료

이 글의 권고는 아래 공식 문서·연구를 근거로 합니다.

김태오
김태오 · 그로스·퍼포먼스 리드

AI 검색 유입을 전환·매출로 잇는 광고·어트리뷰션을 다룹니다. 숫자로 말하는 걸 좋아합니다.

내 사이트의 AI 검색 점수가 궁금하다면

30초 무료 진단으로 SEO·AEO·GEO 점수와 처방을 받아보세요.

무료 진단 시작
← 블로그 목록으로