# robots.txt for BOSOOP - AI company analysis reports # # 정책: 학습(training) 봇은 차단하고, 검색·인용(citation) 봇은 허용한다. # 학습봇 차단은 AI 답변면의 인용 노출을 깎지 않는다 — 사업자 문서가 두 설정을 독립으로 명시한다. # OpenAI: "a webmaster can allow OAI-SearchBot in order to appear in search results # while disallowing GPTBot" (developers.openai.com/api/docs/bots) # Perplexity: "PerplexityBot ... is not used to crawl content for AI foundation models." # (docs.perplexity.ai) # 근거·재검토 트리거: docs/finboard-teardown-2026-08-10.md §9.2-A # (단일 출처 — 동적 view 없음) # --- 학습 봇: 차단 --- User-agent: GPTBot Disallow: / User-agent: ClaudeBot Disallow: / User-agent: Amazonbot Disallow: / User-agent: AmazonAdBot Disallow: / User-agent: Yandex Disallow: / # 아래 4종은 원칙("학습 차단")에 해당하는데 이름이 없어 `*` 로 흘러 허용되던 것들이다. # CCBot: Common Crawl. 직접 학습하지 않아도 C4·RefinedWeb 등 파생 데이터셋으로 다수 모델에 흘러든다. # Bytespider: ByteDance 학습봇. robots 무시 이력이 보고되므로 차단은 선언이지 보장이 아니다. # meta-externalagent: Meta(Llama) 학습봇. # Applebot-Extended: Apple 학습 opt-out 전용 토큰. 검색용 Applebot 과 분리돼 있어 # 차단해도 Siri·Spotlight 노출 손실이 없다 (Google-Extended 와 다른 점). User-agent: CCBot Disallow: / User-agent: Bytespider Disallow: / User-agent: meta-externalagent Disallow: / User-agent: Applebot-Extended Disallow: / # --- 검색·인용 봇: 이름으로 허용 --- # `*` 로도 허용되지만, 나중에 `*` 를 조일 때 함께 죽지 않도록 이름을 박아 둔다. # 명명된 그룹은 `*` 를 상속하지 않으므로 비공개 경로를 각 그룹에 다시 적는다. # 비공개 경로를 먼저 적는다 — 최장일치(구글)와 선일치(파이썬 robotparser) 양쪽에서 같게 읽힌다. # 검색·인용 봇과 네이버(Yeti)는 한 그룹으로 같은 규칙을 쓴다. 그룹마다 따로 적던 때는 # 필터·JSON 차단이 Yeti 와 `*` 에만 들어가, AI 검색봇들이 늘 noindex 인 태그×업종 조합 # (`/tag/X/?industry=N`, 한 장 438KB·업종 링크 303개)을 긁었다 — 9/30 요청의 45% 가 # Claude-SearchBot 이었다. 한 그룹에 User-agent 를 여러 줄 두면 규칙이 갈라질 수 없다. # Claude-User 는 사용자가 직접 물어볼 때만 가져가는 페처다(설계상 robots 를 무시한다). User-agent: OAI-SearchBot User-agent: Claude-SearchBot User-agent: PerplexityBot User-agent: Claude-User User-agent: Yeti Disallow: /admin/ Disallow: /media/reports/pdfs/ # 늘 noindex 인 필터 조합 — 색인되지 않으면서 크롤 몫만 먹는다(GSC 2026-09: noindex 3,960건, # 하루 크롤 약 170회). 태그 페이지에 붙는 쿼리(업종·정렬·쪽수)와 테마 지표 정렬만 막는다. # 사이트맵에 든 업종 페이지(/?industry=N)와 목록 쪽수(?page=, 보고서 발견 경로)는 막지 않는다. Disallow: /tag/*? Disallow: /*metric_sort= Disallow: /*metric_dir= Disallow: /*fy= # 화면이 그린 뒤 부르는 차트·위젯 JSON — 본문 글은 서버가 이미 그려 보낸다. 구글 렌더링이 이 주소를 # 따로 받아 가며 크롤 요청의 17% 를 썼고, 시세 JSON 은 부를 때마다 서버가 시세를 새로 읽는다. # /api/ 아래는 전부 X-Robots-Tag: noindex 응답이다(config/middleware.py). Disallow: /api/ Disallow: /*/stock-data/ Disallow: /stocks/*/price-period/ Disallow: /disclosures/*.json # 공시 목록 옆 패널(iframe) — 상세와 같은 내용이고 noindex 다. PC 목록이 첫 화면에 패널을 저절로 # 펼치므로(2026-09-29) 막지 않으면 렌더링 크롤러가 목록을 볼 때마다 상세 한 장을 더 받아 간다. Disallow: /disclosures/*/pane/ # 늘 noindex 인 검색·조건 주소(2026-11-11 네이버 사이트 진단·GSC 예시). 네이버는 90일 동안 noindex # 10.7만 건을 받아 갔다. 표본 2,000건 중 564건이 공시마다 하나씩 생기는 스크리너 `?from=` 주소였고, # 같은 제목 표본의 절반(987건)도 이것이었다. 구글 noindex 예시 1,000건 중 386건은 검색어가 붙은 홈 # (/?industry=N&q=…)이다 — 테마의 '분석 검색' 링크가 /?q= 로 가고, 그 화면의 업종 목록이 업종마다 # &q= 주소를 다시 만든다. 스크리너 첫 화면과 조건(?lb= 등, 9/29 결정대로)·종목 공시 목록 쪽수(?page=)· # 업종 페이지(/?industry=N)는 열어 둔다. Disallow: /disclosures/screener/?from= Disallow: /disclosures/stock/*?p= Disallow: /disclosures/stock/*&p= Disallow: /disclosures/stock/*main= Disallow: /disclosures/stock/*type= Disallow: /?q= Disallow: /?*&q= Allow: / # --- 예외: Google-Extended (아래 `*` 그룹으로 허용 유지) --- # Gemini 학습과 그라운딩(인용)이 한 설정에 묶여 있어 분리할 수 없다. # "순수 학습만 차단한다"는 원칙과 어긋나지만, 막으면 인용까지 잃으므로 인용을 택한다. # 명명된 그룹과 같은 순서로 적는다 — Disallow 를 먼저. # `Allow: /` 가 앞에 오면 선일치 파서(python urllib.robotparser 등)가 그걸 먼저 물어 # /admin/ 과 /media/reports/pdfs/ 를 허용으로 읽는다. 최장일치(구글)는 순서 무관이지만 # 두 해석이 갈리지 않게 맞춰 둔다. User-agent: * Disallow: /admin/ Disallow: /media/reports/pdfs/ # 늘 noindex 인 필터 조합 — 색인되지 않으면서 크롤 몫만 먹는다(GSC 2026-09: noindex 3,960건, # 하루 크롤 약 170회). 태그 페이지에 붙는 쿼리(업종·정렬·쪽수)와 테마 지표 정렬만 막는다. # 사이트맵에 든 업종 페이지(/?industry=N)와 목록 쪽수(?page=, 보고서 발견 경로)는 막지 않는다. Disallow: /tag/*? Disallow: /*metric_sort= Disallow: /*metric_dir= Disallow: /*fy= # 화면이 그린 뒤 부르는 차트·위젯 JSON — 본문 글은 서버가 이미 그려 보낸다. 구글 렌더링이 이 주소를 # 따로 받아 가며 크롤 요청의 17% 를 썼고, 시세 JSON 은 부를 때마다 서버가 시세를 새로 읽는다. # /api/ 아래는 전부 X-Robots-Tag: noindex 응답이다(config/middleware.py). Disallow: /api/ Disallow: /*/stock-data/ Disallow: /stocks/*/price-period/ Disallow: /disclosures/*.json # 공시 목록 옆 패널(iframe) — 상세와 같은 내용이고 noindex 다. PC 목록이 첫 화면에 패널을 저절로 # 펼치므로(2026-09-29) 막지 않으면 렌더링 크롤러가 목록을 볼 때마다 상세 한 장을 더 받아 간다. Disallow: /disclosures/*/pane/ # 늘 noindex 인 검색·조건 주소(2026-11-11 네이버 사이트 진단·GSC 예시). 네이버는 90일 동안 noindex # 10.7만 건을 받아 갔다. 표본 2,000건 중 564건이 공시마다 하나씩 생기는 스크리너 `?from=` 주소였고, # 같은 제목 표본의 절반(987건)도 이것이었다. 구글 noindex 예시 1,000건 중 386건은 검색어가 붙은 홈 # (/?industry=N&q=…)이다 — 테마의 '분석 검색' 링크가 /?q= 로 가고, 그 화면의 업종 목록이 업종마다 # &q= 주소를 다시 만든다. 스크리너 첫 화면과 조건(?lb= 등, 9/29 결정대로)·종목 공시 목록 쪽수(?page=)· # 업종 페이지(/?industry=N)는 열어 둔다. Disallow: /disclosures/screener/?from= Disallow: /disclosures/stock/*?p= Disallow: /disclosures/stock/*&p= Disallow: /disclosures/stock/*main= Disallow: /disclosures/stock/*type= Disallow: /?q= Disallow: /?*&q= Allow: / Allow: /static/ Allow: /sitemap.xml Allow: /sitemap-reports.xml Allow: /sitemap-stocks.xml Allow: /sitemap-themes.xml Allow: /sitemap-screener.xml Allow: /sitemap-glossary.xml Allow: /sitemap-industries.xml Allow: /sitemap-pages.xml Allow: /feed/ # 색인 하나만 알린다 — sitemap.xml 이 자식 7종을 가리키므로 여기서 다시 셀 필요가 없다. # (전에는 7줄이 각각 제출돼, 같은 URL 이 색인과 자식 양쪽으로 두 번 들어갔다.) Sitemap: https://www.bosoop.com/sitemap.xml