What Is DiscussionForumPosting Schema? The Complete Guide (2026)
What Is DiscussionForumPosting Schema?
DiscussionForumPosting schema is a type of structured data — defined in the Schema.org DiscussionForumPosting vocabulary — that marks up individual posts on forums, community boards, and discussion platforms. Google uses it to understand user-generated content, enrich search results with engagement signals like upvote and comment counts, and surface relevant discussions in AI Overviews and People Also Ask panels.
- Required by Google:
author(withname),datePublished(ISO 8601), and content (at least one oftext,image, orvideo) - Recommended by Google:
url,headline(DiscussionForumPosting only — not for SocialMediaPosting),dateModified,interactionStatistic(LikeAction, ViewAction, CommentAction, etc.) - Use
DiscussionForumPostingfor forums; useSocialMediaPostingfor social media posts —headlineis not recommended on SocialMediaPosting creativeWorkStatus: "Deleted"is the only valid value for that field
Why DiscussionForumPosting Schema Matters
Forum content is among the most heavily cited sources in AI search systems. Research published by Princeton and Georgia Tech (ACM KDD 2024) found that Reddit, StackOverflow, and similar community platforms are cited in AI-generated responses at far higher rates than brand-owned content on equivalent topics. Structured markup helps AI systems correctly attribute, date, and contextualize this content.
Google's Discussion Forum rich results documentation confirms that properly marked-up forum posts can appear with author information, post dates, and engagement counts directly in search results.
DiscussionForumPosting vs. SocialMediaPosting: What Is the Difference?
| Type | Use for | headline field |
|---|---|---|
DiscussionForumPosting | Forum posts on platforms like Reddit, StackOverflow, or custom community boards | Recommended — add the post title |
SocialMediaPosting | Posts on social media platforms (Twitter/X, LinkedIn, Facebook) | Not recommended — remove if present |
Greadme warns when headline is present on a SocialMediaPosting schema, and deducts 3 points. It is perfectly valid and recommended on DiscussionForumPosting.
Required Properties
| Property | Greadme rule |
|---|---|
author | Error if missing. Must include name. Recommended: url linking to author profile page |
datePublished | Error if missing or invalid ISO 8601. Greadme convention uses full datetime with timezone: YYYY-MM-DDTHH:MM:SS+TZ |
text, image, or video | Error if all three are missing — at least one must be present |
Recommended Properties
| Property | Notes |
|---|---|
headline | The post title. Only for DiscussionForumPosting — not SocialMediaPosting. If no separate title exists, do not duplicate or truncate the post text |
dateModified | ISO 8601 datetime. Add when the post has been edited. Greadme warns if missing when text is present |
interactionStatistic | InteractionCounter array describing engagement metrics. See valid types below |
url | Recommended by Google. Greadme warns and deducts points if missing. For multi-page threads, use the first page URL |
comment | Array of Comment objects. Each comment should have its own author, datePublished, and content |
isPartOf | Links to the subforum or group this post belongs to (CreativeWork with url) |
creativeWorkStatus | "Deleted" is the only valid value — use when a post has been removed but remains visible for context |
sharedContent | WebPage, ImageObject, or VideoObject representing content shared in the post |
interactionStatistic: Valid Types by Context
Greadme validates interactionType values strictly based on context. The two contexts have different allowed types:
| Context | Property | Valid interactionType values |
|---|---|---|
| Content engagement (on the post) | interactionStatistic | LikeAction, DislikeAction, ViewAction, CommentAction, ReplyAction, ShareAction |
| Author activity (on the author object) | agentInteractionStatistic | FollowAction, LikeAction, WriteAction |
Each InteractionCounter must include @type: "InteractionCounter", interactionType, and userInteractionCount. Greadme errors if userInteractionCount is missing.
DiscussionForumPosting Schema Code Example
A complete forum post with interactionStatistic and a nested comment:
{
"@context": "https://schema.org",
"@type": "DiscussionForumPosting",
"url": "https://forum.example.com/post/123",
"headline": "Best practices for caching API responses?",
"text": "I'm building a REST API and wondering about caching strategies.",
"datePublished": "2026-04-10T09:00:00+00:00",
"dateModified": "2026-04-10T10:30:00+00:00",
"author": {
"@type": "Person",
"name": "dev_jane",
"url": "https://forum.example.com/user/dev_jane"
},
"interactionStatistic": [
{
"@type": "InteractionCounter",
"interactionType": "https://schema.org/LikeAction",
"userInteractionCount": 142
},
{
"@type": "InteractionCounter",
"interactionType": "https://schema.org/CommentAction",
"userInteractionCount": 38
}
],
"comment": [
{
"@type": "Comment",
"text": "Redis with a TTL strategy works well for most cases.",
"datePublished": "2026-04-10T09:45:00+00:00",
"author": {
"@type": "Person",
"name": "backend_guru",
"url": "https://forum.example.com/user/backend_guru"
}
}
]
}The Content Guideline: User-Generated Only
DiscussionForumPosting must only be used for genuinely user-generated content. Posts authored by a publisher or their agents — including official company announcements posted on a forum — should not be marked up as DiscussionForumPosting.
Greadme always includes a content-guideline advisory warning to remind you of this requirement. Misuse (e.g., marking up brand-authored content as forum posts) violates Google's structured data guidelines and may result in manual actions.
Common Mistakes to Avoid
- Missing datePublished time and timezone: Greadme recommends using the full datetime format:
"2026-04-10T09:00:00+00:00". A date-only value like"2026-04-10"is valid ISO 8601, but Greadme prefers the full format for maximum precision in time-sensitive content. - Using headline on SocialMediaPosting: Greadme warns and deducts 3 points. Social media posts do not have separate titles — do not add a headline.
- creativeWorkStatus with anything other than "Deleted": This is the only valid value. Any other value triggers a Greadme warning.
- Missing url on comments: Comment objects should have a
urlproperty pointing to an anchor link for that specific comment (e.g.,https://forum.example.com/post/123#comment-456). - Using FollowAction in content interactionStatistic: FollowAction belongs in
agentInteractionStatisticon the author object, not in the post-levelinteractionStatistic. Greadme warns on invalid type usage.
How Greadme Validates DiscussionForumPosting Schema
Greadme validates both DiscussionForumPosting and SocialMediaPosting schemas with type-aware rules. Score starts at 100:
| Issue | Points lost |
|---|---|
Missing author | −20 |
Missing author.name | −15 |
Missing datePublished | −20 |
Invalid datePublished format | −15 |
| Missing all of text, image, video | −25 |
Missing url (recommended by Google — not required) | Warning, −5 |
Missing headline (DiscussionForumPosting only) | −8 |
headline present on SocialMediaPosting | −3 |
Missing author.url | −5 |
Frequently Asked Questions
Should I add DiscussionForumPosting schema to every post on my forum?
Yes, if your forum platform supports it. Each individual post page should have its own DiscussionForumPosting schema. For category or topic listing pages (showing multiple posts), you can optionally add an ItemList or Collection schema listing post URLs — Greadme and Google treat this as an optional pattern.
What if a post has been deleted?
If the post content is still visible (e.g., showing "This post has been removed") but the post object remains for context, add "creativeWorkStatus": "Deleted". This signals to Google that the content is no longer active. If the page is fully removed (404), remove the schema markup entirely.
Can I use this schema for a Reddit-style platform?
Yes. DiscussionForumPosting is explicitly designed for Reddit-style and StackOverflow-style platforms. Use DiscussionForumPosting for posts and Comment objects for replies. Threaded comments can be nested within the comment array for as many levels as your platform supports.
