# 토론 포럼 스키마 개선

**URL:** https://meta.discourse.org/t/discussion-forum-schema-improvements/287347
**Category:** Support
**Created:** [12월 3, 2023, 8:07오후 UTC](https://meta.discourse.org/t/discussion-forum-schema-improvements/287347 "2023-12-03T20:07:59Z")
**Posts on this page:** 15
**Page:** 2

<div class="post-metadata">

### Author: ![rrlevering](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rrlevering/32/290917_2.png) [@rrlevering](https://meta.discourse.org/u/rrlevering)
#### Post date: [1월 3, 2024, 3:11오후 UTC](https://meta.discourse.org/t/discussion-forum-schema-improvements/287347/26 "2024-01-03T15:11:00Z")

</div>

URL이 차단되어 있더라도 해당 위치에 남겨 두시기 바랍니다. 포럼 사용 사례에 대해 그렇게 하는 것이 합리적인지 여부를 논의해 볼 수 있지만, 크롤링이 차단된 상태에서도 URL은 명료성 확보에 도움이 될 수 있습니다.

---

<div class="post-metadata">

### Author: ![Jagster](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jagster/32/192154_2.png) [@Jagster](https://meta.discourse.org/u/Jagster)
#### Post date: [1월 3, 2024, 3:39오후 UTC](https://meta.discourse.org/t/discussion-forum-schema-improvements/287347/27 "2024-01-03T15:39:01Z")

</div>

> [@Falco](#):
>
> 경로가 기본 robots.txt에 의해 차단된 URL

이것은 여전히 정중한 요청일 뿐이며, 구글조차도 항상 이를 존중하지는 않습니다. 예를 들어, Gmail 내 링크는 구글봇을 즉시 해당 URL로 보내며, 충분한 방문 횟수는 인덱싱과 검색 결과로 이어집니다.

게다가… 우리(또는 당신)는 미래에 상황이 어떻게 변할지 알 수 없습니다. 지금 해결해 두면 나중에 걱정할 필요가 없습니다. 물론 작업 시간이 필요하지만, 투자와 논의도 마찬가지입니다 😏

---

<div class="post-metadata">

### Author: ![rrit](https://avatars.discourse-cdn.com/v4/letter/r/b5ac83/32.png) [@rrit](https://meta.discourse.org/u/rrit)
#### Post date: [1월 4, 2024, 3:32오후 UTC](https://meta.discourse.org/t/discussion-forum-schema-improvements/287347/28 "2024-01-04T15:32:08Z")

</div>

이제 `first page`의 `DiscussionForumPosting`에 대한 속성 `datePublished`가 `page=2+`의 `datePublished`와 **다르게** 나타납니다!

- `first page`:  
2015-07-05T22:02:5 **8** Z
- `page=2+`:  
2015-07-05T22:02:5 **7** Z

Google은 불일치하는 데이터를 신뢰하지 않을 것이며, 이로 인해 두 URL이 서로 다른 `DiscussionForumPosting`을 포함하고 있어 결합할 수 없다고 판단할 수 있습니다.

`first page`와 `page=2+`에서 동일한 데이터 소스를 사용하는 것이 좋습니다.  
예를 들어, 항상 _ **토픽** _의 `datePublished`를 사용하고 _ **첫 번째 게시글** _의 것은 사용하지 않는 것 등입니다.

> [first page에 대한 search.google.com/test/rich-results](https://search.google.com/test/rich-results/result?id=xS0IRrodiNDKIJbHpkkXIA&hl=en)  
> `datePublished`: 2015-07-05T22:02:5 **8** Z
> 
> ![grafik](https://global.discourse-cdn.com/meta/original/4X/1/b/9/1b9ff8409b279758c91ceb0d113ed38327fea3bd.png)

> [page=2에 대한 search.google.com/test/rich-results](https://search.google.com/test/rich-results/result?id=eADj_K2g1EV_5pWQ_mvVIw&hl=en)  
> `datePublished`: 2015-07-05T22:02:5 **7** Z
> 
> ![grafik](https://global.discourse-cdn.com/meta/original/4X/4/e/6/4e6617a9beac7d3a4b424810a1a880c4c0202080.png)

* * *

PR:

> 항상 `datePublished`는 토픽에서 가져오고 `first_post`에서는 가져오지 않습니다. 이를 통해 `first page`와 `page=2+`에서 `datePublished`가 일관되게 유지됩니다.
> 
> ~~`page=2+`에서 `text`를 반복할 필요는 없습니다. 특히 `text`가 요약일 뿐이며 `first page`의 `text`와 100% 일치하지 않는 경우 `page=2+`에 `text`를 설정하지 마십시오.~~  
> Google Search Console에서 의도치 않은 결과가 발생: 후속 페이지 `page=2+`에서 `text` 속성을 유지하십시오.

> <https://github.com/discourse/discourse/pull/25130>
>
> Always use \`datePublished\` from topic and never from \`first\_post\`. This ensures …\`datePublished\` to be consistent on \`first page\` and \`page=2+\`.

---

<div class="post-metadata">

### Author: ![rrit](https://avatars.discourse-cdn.com/v4/letter/r/b5ac83/32.png) [@rrit](https://meta.discourse.org/u/rrit)
#### Post date: [1월 5, 2024, 12:01오전 UTC](https://meta.discourse.org/t/discussion-forum-schema-improvements/287347/29 "2024-01-05T00:01:42Z")

</div>

### 크롤러 보기에서 “x일 전 닫힘” 게시글 숨기기

토픽이 닫히면 해당 토픽에 특수 게시글이 추가됩니다:  
예를 들어 [Google structured data for forums and profile pages - #14 by techAPJ](https://meta.discourse.org/t/google-structured-data-for-forums-and-profile-pages/286762/15) 참조

 ![grafik](https://global.discourse-cdn.com/meta/original/4X/b/2/0/b201ef58af32f0eab64439d356d36f3d7e387a9d.png)

물론 이 게시글은 ~~없~~ `text` 속성이 비어 있습니다. [validator.schema.org for …/t/-/286762](https://validator.schema.org/#url=https%3A%2F%2Fmeta.discourse.org%2Ft%2Fgoogle-structured-data-for-forums-and-profile-pages%2F286762) → 마지막 댓글 참조:

 ![grafik](https://global.discourse-cdn.com/meta/original/4X/6/d/d/6dd1c33a92a2ba676a7cb3e7991805b4dba387a6.png)

#### Google 검색 콘솔 보고서

 ![grafik](https://global.discourse-cdn.com/meta/original/4X/1/7/d/17d429ec43dca2669458074439e62ff7ceb163fd.png)

#### 결론

따라서 이러한 특수한 시스템/공지 게시글은 크롤러 보기에서 제외되어야 합니다.

#### PR

> 특수한 시스템/공지 게시글은 콘텐츠가 없으므로 크롤러 보기에서 제외됩니다.
> 
> 빈 콘텐츠는 Google 검색 콘솔에서 비치명적 문제인 '필드 “text” 누락 (“comment” 내)'을 유발합니다.

> <https://github.com/discourse/discourse/pull/25198>
>
> Special kind of system/announcement posts are excluded from the crawler view as …they do not have any content.
> 
> Empty content triggers a non-critical issue 'Missing field "text" (in "comment")' in Google Search Console.

---

<div class="post-metadata">

### Author: ![JonahAragon1](https://avatars.discourse-cdn.com/v4/letter/j/f19dbf/32.png) [@JonahAragon1](https://meta.discourse.org/u/JonahAragon1)
#### Post date: [1월 6, 2024, 8:20오전 UTC](https://meta.discourse.org/t/discussion-forum-schema-improvements/287347/30 "2024-01-06T08:20:00Z")

</div>

가용한 경우, 저자 이름 메타데이터를 전체 이름 프로필 필드로 설정하는 것이 더 합리적일까요? 적어도 `prioritize username in ux`가 비활성화된 포럼에서는 그렇습니다(다만, URL 필드가 이미 구분을 해주므로 어느 쪽이든 괜찮다고 생각합니다).

---

<div class="post-metadata">

### Author: ![digitaldominica](https://avatars.discourse-cdn.com/v4/letter/d/97f17d/32.png) [@digitaldominica](https://meta.discourse.org/u/digitaldominica)
#### Post date: [1월 6, 2024, 2:29오후 UTC](https://meta.discourse.org/t/discussion-forum-schema-improvements/287347/31 "2024-01-06T14:29:02Z")

</div>

이 문제를 해결할 수 있는 방법이 있나요, 아니면 discourse 팀이 코어를 업데이트해야 하나요?

---

<div class="post-metadata">

### Author: ![rrit](https://avatars.discourse-cdn.com/v4/letter/r/b5ac83/32.png) [@rrit](https://meta.discourse.org/u/rrit)
#### Post date: [1월 7, 2024, 3:38오후 UTC](https://meta.discourse.org/t/discussion-forum-schema-improvements/287347/32 "2024-01-07T15:38:39Z")

</div>

> [@rrlevering](#):
>
> Search Console에 표시되는 현재 검사에 대한 의사 코드를 작성해 보겠습니다. […]
> 
> ```plaintext
> if not (IsDeletedContent() OR IsExternalContent())
> then if not ("text" OR "articleBody" OR "sharedContent" OR "image" or "video")
> then report(OneOfThreeRequired("text", "image", "video"))
> […]
> 
> ```
> 
> […]
> 
> `DiscussionForumPosting`이 다른 페이지(예: 여러 페이지 콘텐츠의 원래 페이지)에 있는 콘텐츠를 참조하는 경우, (예: OP 주제 제목)과 같은 내용을 담고 있는 스터브(stub)만 가지고 첫 번째 페이지 URL을 참조하면 됩니다. 이는 `url != page URL`인지만 확인하는 `IsExternalContent()` 검사입니다.

@rrlevering 이 “후속 페이지에 `text` 속성이 필요 없음” / `IsExternalContent()` 검사에 대해:

#### 실제 도메인에서 이 테스트 케이스를 가지고 있습니다:

Discourse는 다음에 `DiscussionForumPosting`을 구현합니다 …

- `첫 번째 페이지` - 페이지 URL: [https://example.org/t/-/12345](https://example.org/t/-/12345)
  - 속성 `url`: `https://example.org/t/-/12345`
  - 속성 `text`: _ **설정됨** _
  - 속성 `author`: – 설정됨 –

- `page=2` - 페이지 URL: [https://example.org/t/-/12345?page=2](https://example.org/t/-/12345?page=2)
  - 속성 `url`: `https://example.org/t/-/12345`
  - 속성 `text`: _ **전혀 설정되지 않음** _
  - 속성 `author`: – 설정됨 –

#### 결과: Google Search Console (실시간 테스트)

- `첫 번째 페이지`:  
`DiscussionForumPosting` _ **유효** _
- `page=2`:  
`DiscussionForumPosting` _ **유효하지 않음** _
  - **`중요 문제 1건` – `"text", "image", 또는 "video" 중 하나가 지정되어야 함`**

따라서 여기에는 `IsExternalContent()`에 대한 검사가 없거나, 검사에서 다음에 대해 페이지 URL이 속성 `url`과 같다고 가정하고 있습니다:

- 페이지 URL:  
`https://example.org/t/-/12345?page=2`
- 속성 `url`:  
`https://example.org/t/-/12345`

따라서 현재로서는 Google Search Console에서 _ **유효한** _ `DiscussionForumPosting`을 얻으려면 후속 페이지에 속성 `text`를 반복해야 합니다.

---

<div class="post-metadata">

### Author: ![rrit](https://avatars.discourse-cdn.com/v4/letter/r/b5ac83/32.png) [@rrit](https://meta.discourse.org/u/rrit)
#### Post date: [1월 9, 2024, 7:49오후 UTC](https://meta.discourse.org/t/discussion-forum-schema-improvements/287347/34 "2024-01-09T19:49:40Z")

</div>

### `DiscussionForumPosting`에 대한 잘못된 스키마 마크업 - 특정 토픽/게시물 URL에만 해당

**영향받는 토픽:** 총 게시물이 20개를 초과하는 토픽  
**영향받는 URL:** `…/t/-/NNN/7`부터 `…/t/-/NNN/20`까지

#### ‘Google Rich Result Test’ 보고서

> **URL …/t/-/NNN/11: 총 게시물 수가 다른 다양한 토픽 (클릭하여 열기)**
>
> - 총 18개 게시물이 있는 토픽: […/t/-/283678/11 결과](https://search.google.com/test/rich-results?hl=en&url=https%3A%2F%2Fmeta.discourse.org%2Ft%2Fruntime-error-login-bug%2F283678%2F11%3F_escaped_fragment_) 유효
> - 총 19개 게시물이 있는 토픽: […/t/-/235984/11 결과](https://search.google.com/test/rich-results?hl=en&url=https%3A%2F%2Fmeta.discourse.org%2Ft%2Fsearch-form-posted-by-field-disappears-on-iphone-discoursehub%2F235984%2F11%3F_escaped_fragment_) 유효
> - 총 20개 게시물이 있는 토픽: […/t/-/264899/11 결과](https://search.google.com/test/rich-results?hl=en&url=https%3A%2F%2Fmeta.discourse.org%2Ft%2Funread-new-not-clearing-from-categories%2F264899%2F11%3F_escaped_fragment_) **무효**
> - 총 21개 게시물이 있는 토픽: […/t/-/282382/11 결과](https://search.google.com/test/rich-results?hl=en&url=https%3A%2F%2Fmeta.discourse.org%2Ft%2Fcopy-quote-functionality%2F282382%2F11%3F_escaped_fragment_) **무효**
> 
> – 모든 예시 토픽은 총 게시물 수가 변하지 않도록 ‘닫힘(closed)’ 상태로 설정되어 있습니다. 이 버그 자체도 ‘열림(open)’ 상태의 토픽에도 영향을 미칩니다! –

> **URLs …/t/-/16968/1부터 …/t/-/16968/38까지: 현재 38개 게시물이 있는 하나의 토픽 (클릭하여 열기)**
>
> **유효한 스키마 마크업:**  
> – `DiscussionForumPosting` 자체에는 여전히 불필요한 속성 `position: 1`이 있습니다. –
> 
> - […/t/-/16968 결과](https://search.google.com/test/rich-results?hl=en&url=https%3A%2F%2Fmeta.discourse.org%2Ft%2Fallow-users-to-see-trust-level-3-progress-on-user-profile%2F16968%3F_escaped_fragment_): `Comment` 위치 2~20
> - […/t/-/16968/1 결과](https://search.google.com/test/rich-results?hl=en&url=https%3A%2F%2Fmeta.discourse.org%2Ft%2Fallow-users-to-see-trust-level-3-progress-on-user-profile%2F16968%2F1%3F_escaped_fragment_): `Comment` 위치 2~20
> - …
> - […/t/-/16968/6 결과](https://search.google.com/test/rich-results?hl=en&url=https%3A%2F%2Fmeta.discourse.org%2Ft%2Fallow-users-to-see-trust-level-3-progress-on-user-profile%2F16968%2F6%3F_escaped_fragment_) `Comment` 위치 2~20.
> 
> **무효한 스키마 마크업:** `author`/`datePublished` 누락
> 
> - […/t/-/16968/7 결과](https://search.google.com/test/rich-results?hl=en&url=https%3A%2F%2Fmeta.discourse.org%2Ft%2Fallow-users-to-see-trust-level-3-progress-on-user-profile%2F16968%2F7%3F_escaped_fragment_) `Comment` 위치 2~21.
> - […/t/-/16968/8 결과](https://search.google.com/test/rich-results?hl=en&url=https%3A%2F%2Fmeta.discourse.org%2Ft%2Fallow-users-to-see-trust-level-3-progress-on-user-profile%2F16968%2F8%3F_escaped_fragment_) `Comment` 위치 3~22.
> - …
> - […/t/-/16968/20 결과](https://search.google.com/test/rich-results?hl=en&url=https%3A%2F%2Fmeta.discourse.org%2Ft%2Fallow-users-to-see-trust-level-3-progress-on-user-profile%2F16968%2F20%3F_escaped_fragment_) `Comment` 위치 15~34.
> 
> **다시 유효한 스키마 마크업:** (_여기서:_ `@page > 1`은 `true`임):
> 
> - […/t/-/16968/21 결과](https://search.google.com/test/rich-results?hl=en&url=https%3A%2F%2Fmeta.discourse.org%2Ft%2Fallow-users-to-see-trust-level-3-progress-on-user-profile%2F16968%2F21%3F_escaped_fragment_): `Comment` 위치 16~35
> 
> - […/t/-/16968/22 결과](https://search.google.com/test/rich-results?hl=en&url=https%3A%2F%2Fmeta.discourse.org%2Ft%2Fallow-users-to-see-trust-level-3-progress-on-user-profile%2F16968%2F22%3F_escaped_fragment_): `Comment` 위치 17~36
> 
> - …
> 
> - […/t/-/16968/24 결과](https://search.google.com/test/rich-results?hl=en&url=https%3A%2F%2Fmeta.discourse.org%2Ft%2Fallow-users-to-see-trust-level-3-progress-on-user-profile%2F16968%2F24%3F_escaped_fragment_): `Comment` 위치 19~38
> 
> - […/t/-/16968/25 결과](https://search.google.com/test/rich-results?hl=en&url=https%3A%2F%2Fmeta.discourse.org%2Ft%2Fallow-users-to-see-trust-level-3-progress-on-user-profile%2F16968%2F25%3F_escaped_fragment_): _현재 포함_ `Comment` 위치 19~38
> 
> - …
> 
> - […/t/-/16968/38 결과](https://search.google.com/test/rich-results?hl=en&url=https%3A%2F%2Fmeta.discourse.org%2Ft%2Fallow-users-to-see-trust-level-3-progress-on-user-profile%2F16968%2F38%3F_escaped_fragment_) – _현재 마지막 게시물_: _현재 포함_ `Comment` 위치 19~38
> 
> - …
> 
> - […/t/-/16968/999 결과](https://search.google.com/test/rich-results?hl=en&url=https%3A%2F%2Fmeta.discourse.org%2Ft%2Fallow-users-to-see-trust-level-3-progress-on-user-profile%2F16968%2F999%3F_escaped_fragment_) – _존재하지 않는 높은 번호의 게시물_: _현재 포함_ `Comment` 위치 19~38

#### 기술적 고려 사항

> **1. \`@topic\_view.prev\_page\`는 \`author\`/\`datePublished\`를 표시할지 여부를 결정하는 데 최선의 해결책이 아닐 수 있습니다.**
>
> [app/views/topics/show.html.erb#L53-L60](https://github.com/discourse/discourse/blob/47597219b101068ed926d67ac66463e17a77f6ce/app/views/topics/show.html.erb#L53-L60)
> 
> ```xml
> <% if @topic_view.prev_page %>
> <meta itemprop='datePublished' content='<%= @topic_view.topic.created_at.to_formatted_s(:iso8601) %>'>
> <span itemprop='author' itemscope itemtype="http://schema.org/Person">
> <meta itemprop='name' content='<%= @topic_view.topic.user.username %>'>
> <link itemprop='url' href='<%= Discourse.base_url %>/u/<%= @topic_view.topic.user.username %>'>
> </span>
> <meta itemprop='text' content='<%= @topic_view.topic.excerpt %>'>
> <% end %>
> 
> ```

> **2. \`@topic\_view.prev\_page\`의 구현 자체가 버그가 있을 수 있습니다.**
>
> [lib/topic\_view.rb#L113-L115](https://github.com/discourse/discourse/blob/47597219b101068ed926d67ac66463e17a77f6ce/lib/topic_view.rb#L113-L115)  
> [lib/topic\_view.rb#L128-L130](https://github.com/discourse/discourse/blob/47597219b101068ed926d67ac66463e17a77f6ce/lib/topic_view.rb#L128-L130)  
> [lib/topic\_view.rb#L193-L195](https://github.com/discourse/discourse/blob/47597219b101068ed926d67ac66463e17a77f6ce/lib/topic_view.rb#L193-L195)
> 
> ```rb
> @post_number = [@post_number.to_i, 1].max
> # ---
> @page = @page.to_i > 1 ? @page.to_i : calculate_page
> # ---
> def prev_page
> @page > 1 && posts.size > 0 ? @page - 1 : nil
> end
> 
> ```
> 
> **여기에 버그가 있는가?**  
> [lib/topic\_view.rb#L751-L755](https://github.com/discourse/discourse/blob/47597219b101068ed926d67ac66463e17a77f6ce/lib/topic_view.rb#L751-L755)
> 
> ```rb
> def calculate_page
> posts_count =
> is_mega_topic? ? @post_number : unfiltered_posts.where("post_number <= ?", @post_number).count
> ((posts_count - 1) / @limit) + 1
> end
> 
> ```
> 
> - `calculate_page`는 현재 `@post_number`를 사용하며 7~20 값에서 실패할 수 있어 예상치 못한 결과를 줄 수 있습니다.
> - `((posts_count - 1) / @limit) + 1`의 결과는 다음과 같습니다:  
> `((7 - 1) / 20) + 1 = 1.3 = 1`
> - 예상되는 페이지 번호는 얼마인가? 아마도 정수가 아닌 값으로 계산한 후 `floor`/`ceil`을 통해 의도대로 반올림하고 정수로 타입 캐스팅해야 할 것입니다:  
> `(((posts_count - 1.0) / (@limit + 0.0)) + 1.0).floor.to_i`
> - 의도대로 post\_1부터 모든 게시물을 포함하지 않을 수 있으므로 `unfiltered_posts.where("post_number <= ?", @post_number)`를 `@topic.posts`와 비교하여 확인해 보십시오.
> 
> [lib/topic\_view.rb#L53-L55](https://github.com/discourse/discourse/blob/6432b7f979e0a8b9feda45e7fc8a2a417f63f95d/lib/topic_view.rb#L53-L55)  
> [lib/topic\_view.rb#L119-L127](https://github.com/discourse/discourse/blob/47597219b101068ed926d67ac66463e17a77f6ce/lib/topic_view.rb#L119-L127)  
> [lib/topic\_view.rb#L835-L841](https://github.com/discourse/discourse/blob/47597219b101068ed926d67ac66463e17a77f6ce/lib/topic_view.rb#L835-L841)
> 
> ```rb
> def self.chunk_size
> 20
> end
> # ---
> @chunk_size =
> case
> when @print
> TopicView.print_chunk_size
> else
> TopicView.chunk_size
> end
> 
> @limit ||= @chunk_size
> # ---
> def unfiltered_posts
> result = filter_post_types(@topic.posts)
> result = result.with_deleted if @guardian.can_see_deleted_posts?(@topic.category)
> result = result.where("user_id IS NOT NULL") if @exclude_deleted_users
> result = result.where(hidden: false) if @exclude_hidden
> result
> end
> 
> ```

#### 결론

이 경계 케이스에서 …

- 총 게시물이 20개를 초과하는 토픽
- `…/t/-/NNN/7`부터 `…/t/-/NNN/20`까지

… 첫 번째 게시물이 현재 뷰의 일부가 아니었고, 뷰가 여전히 첫 페이지에 있었기 때문에 `@topic_view.prev_page`가 트리거되지 않았습니다.

따라서 첫 번째 게시물의 컨텍스트 또는 `@topic_view.prev_page == true`일 때만 렌더링되던 마이크로데이터 스키마 `DiscussionForumPosting`의 모든 속성이 누락되었습니다.

#### PR

> 마이크로데이터 스키마 `DiscussionForumPosting`의 일부 속성은 첫 번째 게시물의 컨텍스트에서 렌더링됩니다. 첫 번째 게시물이 현재 뷰의 일부가 아닌 경우에도 이러한 속성이 설정되도록 보장하십시오.

> <https://github.com/discourse/discourse/pull/25195>
>
> Some attributes of the microdata schema \`DiscussionForumPosting\` are rendered in… the context of the first post. Ensure these attributes are also set if the first post is not part of the current view.
> 
> These missing attributes make the \`DiscussionForumPosting\`-item invalid and trigger a critical issue 'Missing field "datePublished/Missing field "author"' in Google Search Console.
> Invalid items are not eligible for Google Search's rich results.

---

<div class="post-metadata">

### Author: ![rrlevering](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rrlevering/32/290917_2.png) [@rrlevering](https://meta.discourse.org/u/rrlevering)
#### Post date: [1월 17, 2024, 1:33오후 UTC](https://meta.discourse.org/t/discussion-forum-schema-improvements/287347/36 "2024-01-17T13:33:20Z")

</div>

음… 예상치 못한 일이네요. 불편을 드려 죄송합니다. URL 비교 검사에서 쿼리 파라미터가 비교 과정에서 누락되는 것 같습니다. 수정을 바로 배포하겠습니다.

---

<div class="post-metadata">

### Author: ![Soenneker](https://avatars.discourse-cdn.com/v4/letter/s/49beb7/32.png) [@Soenneker](https://meta.discourse.org/u/Soenneker)
#### Post date: [2월 1, 2024, 11:48오전 UTC](https://meta.discourse.org/t/discussion-forum-schema-improvements/287347/37 "2024-02-01T11:48:17Z")

</div>

이 수정에 대해 최신 업데이트가 있나요?

---

<div class="post-metadata">

### Author: ![rrlevering](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rrlevering/32/290917_2.png) [@rrlevering](https://meta.discourse.org/u/rrlevering)
#### Post date: [2월 1, 2024, 3:58오후 UTC](https://meta.discourse.org/t/discussion-forum-schema-improvements/287347/38 "2024-02-01T15:58:05Z")

</div>

이번 주 배포된 수정 사항으로 인해 “이것이 외부 URL인지” 확인 시 쿼리 파라미터를 고려하도록 변경되었습니다. 따라서 쿼리 파라미터를 통해 다른 URL에서 OP를 참조하는 포럼(foo와 foo?page=2)의 경우 GSC에서 오류가 보고되지 않을 것입니다.

---

<div class="post-metadata">

### Author: ![Akshiya](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/akshiya/32/435063_2.png) [@Akshiya](https://meta.discourse.org/u/Akshiya)
#### Post date: [7월 26, 2024, 8:56오전 UTC](https://meta.discourse.org/t/discussion-forum-schema-improvements/287347/39 "2024-07-26T08:56:00Z")

</div>

이번 주 배포된 수정 사항을 통해, "외부 URL인지"를 확인하는 과정에서 쿼리 파라미터를 고려하도록 변경되었습니다.

---

<div class="post-metadata">

### Author: ![gbernhardt](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gbernhardt/32/482600_2.png) [@gbernhardt](https://meta.discourse.org/u/gbernhardt)
#### Post date: [1월 21, 2025, 2:54오후 UTC](https://meta.discourse.org/t/discussion-forum-schema-improvements/287347/41 "2025-01-21T14:54:00Z")

</div>

@rrlevering 다른 포럼 플랫폼에서는 스레드의 각 게시글에 대해 [comment - Schema.org Property](https://schema.org/comment) 스키마를 중첩(nesting)하는 것을 권장했습니다. Discourse에서는 이렇게 하지 않는 것으로 보입니다. 여전히 이 방식을 권장하시나요?

---

<div class="post-metadata">

### Author: ![rrlevering](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rrlevering/32/290917_2.png) [@rrlevering](https://meta.discourse.org/u/rrlevering)
#### Post date: [1월 23, 2025, 5:41오후 UTC](https://meta.discourse.org/t/discussion-forum-schema-improvements/287347/42 "2025-01-23T17:41:13Z")

</div>

Discourse는 스레드의 각 게시물에 대해 Comment 스키마를 중첩(nest)합니다. [Schema Markup Validator](https://validator.schema.org/#url=https%3A%2F%2Fmeta.discourse.org%2Ft%2Fdiscussion-forum-schema-improvements%2F287347%EC%9D%84) 확인하고 DiscussionForumPosting 객체를 열어 중첩된 댓글을 살펴보세요.

---

<div class="post-metadata">

### Author: ![gbernhardt](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gbernhardt/32/482600_2.png) [@gbernhardt](https://meta.discourse.org/u/gbernhardt)
#### Post date: [1월 23, 2025, 5:52오후 UTC](https://meta.discourse.org/t/discussion-forum-schema-improvements/287347/43 "2025-01-23T17:52:42Z")

</div>

감사합니다! DiscussionForumPosting 안에 중첩되어 있어서 놓쳤습니다.

[이전 페이지](https://meta.discourse.org/t/discussion-forum-schema-improvements/287347.md?page=1)
