Discourse에는 바로 사용할 수 있는 다양한 SEO 기능이 있습니다. 우리의 합리적인 기본 설정을 사용하면 커뮤니티 관리자는 커뮤니티 육성에만 집중할 수 있으며, 검색 엔진 최적화에 대한 걱정 없이 활동할 수 있습니다. 그렇다고 해서 변경할 수 없는 것은 아닙니다. 아래에서 변경할 수 있는 사항, 알아두어야 할 사항, 그리고 일반적인 팁과 트릭을 확인해 보세요.
검색 엔진을 위한 정적 뷰
Discourse에는 JavaScript가 없는 정적 HTML 뷰를 제공하여 웹 크롤러가 사이트를 더 빠르게 인덱싱하도록 돕습니다. 동적 뷰와 정적 뷰 사이의 콘텐츠는 동일하며, 검색 엔진이 사이트를 크롤링할 때 콘텐츠가 생략되거나 제거되지 않습니다.
사용자가 보는 것과 검색 엔진이 보는 것의 비교는 다음과 같습니다:
토픽 목록:
토픽:
크롤러 뷰 미리보기
JavaScript를 비활성화하지 않고 Discourse가 크롤러에게 제공하는 내용을 확인하는 방법은 두 가지가 있습니다:
-
?printURL 파라미터 — 모든 Discourse URL에?print를 추가합니다(예:https://yourforum.com/t/some-topic/123?print). 이는 사용자 에이전트에 관계없이 모든 브라우저에서 크롤러 레이아웃을 강제합니다. 검색 엔진이 무엇을 보는지 감사하는 가장 간단한 방법입니다. -
Discourse-Render: crawler요청 헤더 — 크롤러 레이아웃을 강제하기 위해 모든 요청에 이 HTTP 헤더를 보내세요. 프로그래밍 기반 감사나curl을 이용한 테스트에 유용합니다:curl -H "Discourse-Render: crawler" https://yourforum.com/t/some-topic/123
메타 태그
Discourse에서는 SEO에 필수적인 일반 메타 태그가 페이지에 존재하는 콘텐츠 기반으로 자동 생성됩니다. 예를 들어, 제목 태그는 사이트 또는 토픽 제목에서 파생되며, 설명은 첫 번째 게시물의 콘텐츠에서 생성됩니다. 그러나 페이지별 메타데이터 커스터마이징은 제한적입니다. 이러한 값을 변경하려면 설정 또는 값이 생성되는 콘텐츠 필드를 조정해야 합니다.
- 제목, 설명 및 짧은 사이트 설명 사이트 설정
- 카테고리 이름
- 게시물의 제목 및 콘텐츠
- 등등

소셜 미디어 메타 태그
Discourse는 풍부한 소셜 공유를 위해 Open Graph 및 Twitter (X) 카드 메타 태그를 자동으로 생성합니다:
Open Graph 태그
og:site_name,og:type,og:url,og:title,og:descriptionog:image-opengraph_image설정을 통해 구성 가능og:article:section- 카테고리 브레드크럼og:article:tag- 토픽 태그
X (구 Twitter) 카드 태그
twitter:card- “summary” 또는 “summary_large_image”twitter:title,twitter:description,twitter:imagetwitter:label1/data1- 읽기 시간 추정치twitter:label2/data2- 좋아요 수
구성 설정
opengraph_image- 소셜 공유를 위한 기본 OG 이미지x_summary_large_image- X (구 Twitter) 대형 카드 이미지
URL 구조 및 인코딩
비라틴 문자 및 URL
Discourse는 기본적으로 로케일이 EN으로 설정되어 있을 때 토픽 URL에서 비라틴 문자를 제거합니다. 이를 피하려면 로케일을 주요 비라틴 언어로 변경하거나 슬러그 생성 방법 설정을 ASCII에서 encoded(인코딩)로 변경할 수 있습니다.
국제 SEO 및 hreflang 태그
다국어 커뮤니티를 위해 Discourse는 hreflang 태그를 지원하여 검색 엔진이 사용자에게 올바른 언어 버전을 제공하도록 돕습니다. 이를 활성화하려면 다음 세 가지 설정을 구성해야 합니다(관리자 → 설정 → 로컬라이제이션):
content_localization_enabled: 콘텐츠 로컬라이제이션 시스템을 활성화합니다.content_localization_supported_locales: 지원되는 로케일 코드를 정의합니다(예:en|es|fr).content_localization_crawler_param:<link rel="alternate" hreflang="...">태그를 생성하고 크롤러의 내부 링크를tl로케일 파라미터(예:/t/example-topic/123?tl=es)로 재작성하는 데 필수입니다.
이러한 설정이 활성화되면 Discourse는 각 지원 언어에 대해 대체 링크를 생성하여 Google 및 기타 검색 엔진이 사용자에게 올바른 언어 버전을 제공하도록 돕습니다.
서브폴더 vs. 서브도메인 설정
Discourse는 기술적 단순성 때문에 서브폴더보다 서브도메인을 선호합니다. Google은 두 가지 방식 사이에 특별한 선호가 없습니다[1], 하지만 Discourse는 깊은 기술적 이해가 없는 한 서브폴더 설정을 피할 것을 강력히 권장합니다.
서브폴더(예: example.com/forum/)에서 Discourse를 실행하는 경우, 루트 레벨의 robots.txt는 Discourse가 아닌 메인 웹 서버에 의해 관리됩니다. 이를 올바르게 구성하는 데 도움이 되도록, Discourse는 /robots-builder.json에 JSON 엔드포인트를 노출하여 Discourse가 생성할 정확한 disallow 규칙을 서브폴더 경로 범위로 반환합니다. 이를 서버 레벨 robots.txt를 작성하는 스크립트의 입력으로 사용할 수 있습니다.
정규화(Canonicalization)
Google은 페이지의 정규(canonical) 버전을 인덱싱하는 데 관심이 많습니다. Discourse에서 여러 답변이 있는 토픽의 경우, 정규 링크(첫 번째 게시물)가 Google에 전달되며, Google이 인덱싱 여부를 결정합니다. 20개 게시물보다 긴 토픽은 페이지 분할되며, 각 페이지는 최대 20개의 게시물을 포함하는 정규 링크가 됩니다.
예를 들어, 이 토픽의 마지막 답변에 대한 정규 태그는 https://meta.discourse.org/t/try-out-the-new-sidebar-and-notification-menus/238821?page=12가 됩니다.
allow_indexing_non_canonical_urls 설정
숨겨진 사이트 설정인 allow_indexing_non_canonical_urls(기본값: true)는 비정규 URL 변형이 X-Robots-Tag: noindex 헤더를 받는지를 제어합니다. false로 설정되면 정규 URL과 다른 URL(예: 정규가 /t/slug/123?page=3인 경우의 직접 게시물 링크 /t/slug/123/45)에 대한 모든 요청에 noindex 헤더가 함께 제공됩니다.
임베드된 토픽
토픽이 외부 웹사이트에 임베드될 때, embed_set_canonical_url 설정을 사용하여 정규 URL을 원래 임베드 위치를 가리키도록 설정할 수 있습니다. 이는 동일한 토픽이 포럼과 임베드 사이트 모두에 나타날 때 중복 콘텐츠 문제를 방지합니다.
스키마 마크업
Discourse는 검색 엔진이 콘텐츠를 이해하도록 돕기 위해 광범위한 schema.org 마크업을 사용합니다. 각 콘텐츠 유형에는 검색 결과에 표시되고 검색 가능성을 높이는 풍부한 구조화된 데이터를 포함합니다.
토픽
주요 토론 스레드를 나타내기 위해 DiscussionForumPosting 스키마를 사용하며 다음을 포함합니다:
headline- 토픽 제목datePublished- 토픽 생성 시각articleSection- 카테고리 이름keywords- 모든 토픽 태그publisher- 사이트/조직 정보author- 최초 게시자 정보
게시물 및 답변
토픽 내 개별 게시물은 Comment 스키마를 사용하며 다음을 포함합니다:
author- 이름 및 프로필 링크가 있는 게시물 작성자text- 게시물 콘텐츠datePublished및dateModified- 생성 및 수정 타임스탬프interactionStatistic-LikeAction유형을 가진InteractionCounter를 사용한 좋아요 수
브레드크럼
카테고리 내비게이션은 검색 결과에 표시되어 카테고리 계층 구조 경로를 보여주는 BreadcrumbList 스키마를 사용합니다. 각 브레드크럼에는 다음이 포함됩니다:
itemListElement- 개별 카테고리 링크position- 계층 구조 내 순서- 시각적 구분을 위한 카테고리 색상
카테고리 및 토픽 목록
카테고리 페이지와 토픽 목록 뷰는 ItemList 스키마를 사용합니다:
- 시간순 정렬을 위해
ItemListOrderDescending으로 정렬 - 각 항목에 대한 위치 메타데이터 포함
- 검색 엔진이 콘텐츠 구조와 계층을 이해하는 데 도움
홈페이지
사이트 홈페이지에는 WebSite 및 SearchAction을 위한 JSON-LD 구조화된 데이터를 포함하여, 사이트의 검색 결과에 Google 검색 상자가 직접 표시되도록 합니다.
소개 페이지
소개 페이지는 About 페이지 스키마와 Organization 정보를 사용하여 검색 엔진이 커뮤니티의 정체성과 목적을 이해하는 데 도움이 됩니다.
사이트맵
Discourse에는 기본적으로 enable sitemap 설정을 통해 활성화되는 /sitemap.xml에 위치한 사이트맵 인덱스가 포함되어 있습니다. 이는 검색 엔진의 인덱싱을 더 잘 촉진합니다. 다른 사이트맵도 있습니다:
- 최근 사이트맵 (
/sitemap_recent.xml) - 지난 3일 동안 업데이트된 토픽 (1시간 캐시) - 뉴스 사이트맵 (
/news.xml) - Google News 형식으로 지난 72시간 동안 업데이트된 토픽 (5분 캐시), 뉴스 지향 커뮤니티에 유용 - 페이지 분할 사이트맵 - 페이지로 나뉘어진 토픽 전체 카탈로그 (24시간 캐시)
사이트맵은 예약된 작업을 통해 매시간 자동으로 재생성되며 마지막 수정 타임스탬프를 포함합니다. 사이트맵 페이지당 토픽 수는 sitemap_page_size 설정(기본값: 10,000)을 통해 구성할 수 있습니다.
웹 크롤러
웹 크롤러(로봇 또는 봇이라고도 함)는 웹 페이지를 인덱싱하고 콘텐츠의 검색 가능성을 높이는 데 필수적입니다. Discourse는 정교한 크롤러 감지를 사용하여 최적화된 콘텐츠를 제공하고 봇 트래픽을 효과적으로 관리합니다.
크롤러 감지
Discourse는 다양한 유형의 크롤러를 자동으로 감지하고 처리합니다:
- 검색 엔진: Googlebot, Bingbot, DuckDuckBot 등
- 소셜 미디어: Facebookbot, Twitterbot, LinkedInBot, Discordbot
- AI 크롤러: GPTBot, ClaudeBot, Anthropic-AI, BrightBot
- 아카이브 서비스: Wayback Machine, Archive.org
- 모니터링 서비스: Lighthouse, Google Inspection Tool
크롤러가 감지되면 Discourse는 최적화된 콘텐츠를 제공하고 특수 응답 헤더를 추가합니다:
X-Discourse-Crawler-View: true- 크롤러 최적화 콘텐츠임을 나타냄Last-Modified헤더 - 효율적인 재크롤링 가능
크롤러 트래픽 관리
일부 크롤러는 과도하게 활동하여 포럼에 많은 요청을 보낼 수 있습니다. Discourse는 크롤러 행동을 관리하기 위한 여러 설정을 제공합니다:
blocked_crawler_user_agents- 특정 크롤러를 완전히 차단 (기본 차단 목록에는 mauibot, semrushbot, ahrefsbot, blexbot, seo spider가 포함됨)slow_down_crawler_user_agents- 차단 대신 크롤러의 속도를 제한 (기본값에는 GPTBot, ClaudeBot과 같은 AI 크롤러가 포함됨)allowed_crawler_user_agents-
주의: 이 설정을 사용하면 명시적으로 나열되지 않은 모든 크롤러(Googlebot 포함)가 차단됩니다. 크롤링을 특정 봇 집합으로 제한하려는 경우에만 사용하세요. blocked_crawler_user_agents보다 우선순위가 높습니다. 특별한 이유가 없으면 공백으로 두세요.
자동 noindex 헤더
전역 allow_index_in_robots_txt 설정 외에도 Discourse는 여러 페이지 유형에 X-Robots-Tag: noindex 응답 헤더를 자동으로 추가합니다:
- 검색 페이지 — 항상 noindex (검색 결과는 인덱싱된 페이지로서 유용하지 않음)
- 배지 페이지 — 항상 noindex
- 그룹 페이지 — 항상 noindex
- 사용자 프로필 페이지 — 항상 noindex
- 태그 필터/교차 페이지 — noindex (태그 인덱스 및 표시 페이지는 예외임)
- RSS/Atom 피드 — 항상 noindex
이것들은 컨트롤러 레벨에서 적용되며 구성할 수 없습니다. 일시적, 저가치 또는 중복 콘텐츠 페이지가 검색 엔진 인덱스를 오염시키지 않도록 보장합니다.
크롤러 분석
관리자는 관리자 → 보고서 → 웹 크롤러에서 크롤러 활동을 모니터링하여 어떤 봇이 사이트에 액세스하고 얼마나 자주 액세스하는지 확인할 수 있습니다.
추가 SEO 기능
llms.txt를 통한 AI 크롤러 가이드
Discourse는 llms.txt 컨벤션을 지원하며, 이는 LLM 기반 크롤러(AI 어시스턴트에서 사용되는 크롤러 등)가 사이트의 콘텐츠와 구조에 대해 안내받을 수 있는 표준 방식을 제공합니다.
활성화하려면:
- LLM 크롤러를 위해 사이트를 설명하는
.txt또는.md파일(최대 512 KB)을 준비합니다 llms_txt사이트 설정(관리자 → 설정 → 보안)을 통해 업로드합니다https://yourforum.com/llms.txt에서 제공됩니다
![]()
llms.txt는robots.txt와 구별되며, LLM 기반 크롤러를 안내하기 위해 특별히 설계되었습니다. 액세스 규칙을 제공하는 대신, 사이트가 무엇인지, 어떤 콘텐츠를 포함하는지, AI 어시스턴트가 어떻게 이해하고 사용해야 하는지에 대한 의미론적 맥락을 제공합니다.robots.txt가 봇에게 ‘어디로 갈 수 있는지’를 알려준다면,llms.txt는 AI에게 ‘무엇을 보고 있는지’와 ‘왜 중요한지’를 알려줍니다.
OpenSearch 통합
Discourse는 /opensearch.xml에 OpenSearch 설명을 제공하여 브라우저 검색 통합을 가능하게 합니다. 사용자는 포럼을 브라우저의 검색 엔진 목록에 직접 추가할 수 있습니다.
RSS 피드
각 토픽에는 /t/{slug}/{id}.rss에서 사용할 수 있는 RSS 피드가 있으며, 다음을 포함합니다:
- 토픽 제목 및 설명
- 작성자 정보가 포함된 모든 게시물/답변
- 게시 날짜 및 마지막 업데이트 시각
- 카테고리 및 태그
참고: RSS 피드 경로(
/t/*/*.rss,/c/*.rss)는 대부분의 크롤러가 중복 콘텐츠를 인덱싱하는 것을 방지하기 위해 일반*와일드카드 에이전트에 대해 robots.txt에서 차단됩니다. Googlebot은 이 제한에서 명시적으로 예외이며 RSS 피드에 액세스할 수 있습니다.
Google 사이트 인증
google_site_verification_token 설정을 사용하여 테마 템플릿을 편집하지 않고 Google Search Console 인증 메타 태그를 추가할 수 있습니다.
프로그레시브 웹 앱 (PWA)
Discourse는 모바일 앱 검색 및 설치 프롬프트를 위해 /manifest.json에 웹 앱 매니페스트를 생성합니다.
마이그레이션 및 URL 리디렉션
퍼malink 기능은 SEO를 유지하고 “페이지를 찾을 수 없음” 오류를 방지하며, 검색 엔진이 인덱싱을 쉽게 할 수 있도록 올바른 메타데이터를 제공하기 위해 오래된 URL을 리디렉션하는 데 사용됩니다.
커뮤니티 사이트가 당사 팀에 의해 Discourse로 마이그레이션되는 경우, 타당한 이유가 없는 한 URL 리디렉션이 포함됩니다.
기존 가져오기 스크립트 중 하나를 사용하는 경우, 스크립트가 이를 처리하도록 확인해야 합니다[2]. 관리 패널의 커스터마이즈 → 퍼malink에서 수동으로 permalink를 추가할 수 있습니다.
인덱싱 해제 방법
Google 인덱스에서 페이지를 제거하려면 콘텐츠를 제거하거나 페이지에 대한 액세스를 차단할 수 있습니다. 필요에 따라 사이트 전체를 비공개로 설정할 수 있습니다[3]. 토픽을 삭제하거나 제한된 카테고리에 배치하여 제외할 수 있습니다. 숨겨진 토픽은 기본적으로 인덱싱되지 않지만, 해당 토픽으로 리디렉션되는 공개 링크가 어딘가에 있는 경우 인덱싱될 수 있습니다.
영구적인 제거를 위해 Google Search Console의 제거(Removals) 도구를 사용하면 검색 결과에서 페이지를 유지하는 데 도움이 됩니다. 자세한 내용은 Remove information on your website from Google - Search Console Help 확인하세요.




