Free SEO audit for new clients — claim yours
Home/Blog/Technical SEO/Discussion Forum and Profile Page Schema for Com…
Technical SEO

Discussion Forum and Profile Page Schema for Community Sites

Discussion Forum and Profile Page Schema for Community Sites
Table of contents
  1. What Google is trying to find on community sites
  2. Thread, question or profile: picking the right type for each template
  3. Building a DiscussionForumPosting that reflects the whole thread
    1. Handling deleted and moderated posts
  4. ProfilePage markup for members, authors and brand accounts
    1. Thin and spam profiles
  5. Keeping user-generated content worth marking up
  6. Crawl hygiene that forum software gets wrong
  7. Testing and monitoring community rich results
  8. Questions community managers ask about forum markup
    1. Should my support forum use QAPage or DiscussionForumPosting?
    2. Do I need to mark up every reply in a long thread?
    3. Can a blog with comments use DiscussionForumPosting?
    4. Should every member profile be marked up and indexed?
    5. What should happen to markup when a post is deleted?
  9. Rolling out forum and profile markup on your community
  10. Further reading on discussion forum schema
  11. Sources for this forum and profile schema guide

Forums used to be the forgotten corner of the web. Then searchers started adding "reddit" to their queries because they wanted to hear from people who had actually done the thing, and Google responded by giving first-hand discussion far more room in its results. That shift is an opportunity for every independent community, support forum and niche message board, but only if Google can tell what each page is: a thread, a single question with answers, or a member's profile.

In November 2023 Google introduced two structured data types for exactly this: DiscussionForumPosting for threads and ProfilePage for the people who write them. Both feed features such as Discussions and forums, and both are documented on Google Search Central with their own Search Console reports.

This guide is for community managers, forum software developers and SEOs looking after sites with user-generated content. It explains which markup fits which page, how to model replies, deleted posts and member profiles, where Q&A markup still belongs, and how to keep spammy UGC from undermining the whole effort.

What Google is trying to find on community sites

The point of both markup types is identification. Google wants to recognise authentic discussion and the people behind it, separate it from SEO content dressed up as a forum, and surface it when searchers want lived experience. Google's own description is direct:

“Discussion forum markup is designed for any forum-style site where people collectively share first-hand perspectives.”

— Google Search Central, Discussion forum structured data

Two words in that sentence do a lot of work. Collectively means multiple participants; a single-author blog with a comments section is not a forum. First-hand means experience rather than aggregated or scraped content. If your "community" is mostly staff posts or imported content, the markup will not change what Google thinks of it.

Profile markup supports the same goal from the other side: it tells Google who the contributors are, how active they are and how they are known elsewhere. Together, the two types give Google a map of posts and people.

Thread, question or profile: picking the right type for each template

Most community platforms have three or four page templates that matter for search. Choosing the wrong type for a template is the most common mistake, so decide this before writing any code.

Page templateRight markupWhy
Open discussion thread (opinions, stories, show-and-tell)DiscussionForumPostingPosts and replies without a single "correct" answer
Thread built around one question where members submit answersQAPage with Question and AnswerGoogle says Q&A-pattern forums should use Q&A markup
Generic social feed post (not a forum)SocialMediaPostingParent type; same requirements, but Google says most forums should use DiscussionForumPosting
Member profile pageProfilePage with a Person as mainEntityPage is about one affiliated person
Company or brand account profileProfilePage with an OrganizationUse Organization when you know the creator is one
Staff-written FAQ or knowledge base articleNone of the aboveNot user-generated; QAPage is explicitly not for FAQs
Subforum or category listingNone requiredThreads reference it through isPartOf

The Q&A boundary deserves care because it is easy to blur. Google's QAPage rules say users must be able to submit answers, and:

“Don't use QAPage markup for FAQ pages or pages where there are multiple questions per page.”

— Google Search Central, Q&A structured data

A practical rule for mixed platforms: if the thread template has an "accepted answer" or "solution" feature and the first post is a question, use QAPage. If it is a conversation, use DiscussionForumPosting. Support communities often have both kinds of thread in the same software, in which case let the thread type (question versus discussion) drive the markup at render time.

Building a DiscussionForumPosting that reflects the whole thread

The required fields are short. A DiscussionForumPosting needs an author (Person or Organization) with an author.name, a datePublished, and at least one of text, image or video. The value is in the recommended fields, which describe the conversation rather than just the opening post.

PropertyUse it forImplementation note
headlineThread titleMatch the visible H1
urlCanonical thread URLStrip session and sort parameters
author.urlLink to the author's profile pageConnects posts to ProfilePage markup
commentReplies, in page orderComments can nest for threaded replies
commentCountTotal replies, including ones on later pagesUseful on paginated threads
interactionStatisticLikes, views, replies, sharesInteractionCounter with LikeAction, ViewAction and so on
isPartOfThe subforum or groupCreativeWork or URL
sharedContentThe link, image or video the post is aboutWebPage, ImageObject, VideoObject or a quoted post
dateModifiedEdits to the postOnly for real edits, not new replies
creativeWorkStatusDeleted posts kept for contextSet to Deleted
digitalSourceTypeAI-generated or altered contentUseful where AI-assisted posts are allowed

A trimmed example for a thread with one reply:

{
  "@context": "https://schema.org",
  "@type": "DiscussionForumPosting",
  "headline": "Is a 600W inverter enough for a camper fridge?",
  "url": "https://forum.example.com/t/600w-inverter-fridge/4821",
  "author": {"@type": "Person", "name": "VanLifeDee",
             "url": "https://forum.example.com/u/vanlifedee"},
  "datePublished": "2026-07-02T09:14:00+01:00",
  "text": "My compressor fridge draws 45W but I've read startup surge is higher...",
  "isPartOf": "https://forum.example.com/c/electrics/",
  "interactionStatistic": {"@type": "InteractionCounter",
    "interactionType": "https://schema.org/LikeAction", "userInteractionCount": 12},
  "commentCount": 9,
  "comment": [{
    "@type": "Comment",
    "author": {"@type": "Person", "name": "SparkyMo",
               "url": "https://forum.example.com/u/sparkymo"},
    "datePublished": "2026-07-02T10:02:00+01:00",
    "text": "I ran the same fridge on a 600W pure sine inverter for two summers..."
  }]
}

Rules that keep this honest:

  • Mark up only what is on the page. If page one shows 20 replies, the comment array covers those 20, while commentCount can state the total.
  • Keep the order. Google asks for comments in the order they appear.
  • Use the real display name. If the page shows a handle, use the handle.
  • Do not mark up staff articles as forum posts. Google is explicit that the type describes a user-generated post.

Handling deleted and moderated posts

Forums often keep a placeholder ("This post was removed by a moderator") so replies still make sense. Mark that placeholder with creativeWorkStatus set to Deleted rather than dropping it from the markup and leaving orphaned replies. If a whole thread is removed, return a 404 or 410 rather than an empty shell.

ProfilePage markup for members, authors and brand accounts

ProfilePage needs a mainEntity (Person or Organization) with a name; if no name is available, alternateName can satisfy the requirement. Google is specific about what qualifies:

“The primary focus of the page must be a single person or organization that is affiliated with the overall website.”

— Google Search Central, Profile page structured data

That covers forum member profiles, a news site's author pages, a blog's "About me" page and a company's employee pages. It does not cover a shop homepage or a review site's page about a business it has no connection with.

The recommended fields map neatly onto what most forum profiles already show:

  • alternateName: the public handle (@sparkymo).
  • identifier: the internal user ID, which stays stable if the handle changes. This is what lets Google keep a member's history together after a rename.
  • interactionStatistic: stats about the profile, such as followers or likes received.
  • agentInteractionStatistic: stats about what the member has done, such as posts written or likes given.
  • description: the bio or credentials line.
  • image: the avatar. Google says not to use placeholder images, so omit the field for default avatars.
  • sameAs: links the member has added to other profiles or a personal site.
  • dateCreated and dateModified: when the profile was created and when its human-edited details last changed.

Profile markup is also useful outside forums. If you publish articles with bylines, the same type supports author pages; our guides to author pages and bylines and author signals in AI search cover how to make those pages credible.

Thin and spam profiles

Many forums have tens of thousands of profiles belonging to members who registered once and never posted, plus spam accounts with links in the bio. Marking those up does not help, and indexing them can hurt. A sensible rule is to make profiles indexable (and marked up) only once a member has a minimum level of genuine activity, and to noindex the rest.

Keeping user-generated content worth marking up

Structured data describes content; it does not vouch for it. Google's general guidelines say "Your structured data must be a true representation of the page content", and a forum full of spam is accurately described as a forum full of spam. Before or alongside implementation, deal with these quality risks:

  1. Spam registration and link-drop posts. Rate-limit new accounts, hold first posts for review, and add rel="ugc" to user links. Our guide to cleaning up UGC spam covers the clean-up side.
  2. Empty threads. Questions with no replies after months add little. Consider noindexing threads with zero replies after a set period, or merging duplicates.
  3. Third-party content hosted for rankings. Sponsored "community" sections written by outsiders can fall under Google's site reputation abuse policy.
  4. AI-generated replies. If your platform allows AI-assisted posts, label them with digitalSourceType and moderate for accuracy.
  5. Thin tag and member listing pages. Keep these out of the index or consolidate them.

Community sites have had a volatile few years in search, which we track in how algorithm updates affect forums and UGC sites. Strategy for building an on-site community in the first place is covered in our guide to running a community forum on your own site.

Crawl hygiene that forum software gets wrong

Forum platforms are prolific URL generators. A single thread can be reachable through dozens of addresses: sorted by newest, sorted by votes, paginated, filtered to one author, with a reply anchor, with a session ID. Google's URL structure guidance lists irrelevant parameters (session IDs and sort orders among them) as a common cause of excessive URLs and recommends cookies instead of session IDs where possible.

For markup purposes this matters in two ways. First, the url in your DiscussionForumPosting should be the clean canonical thread URL, not whatever variant the crawler arrived on. Second, if Googlebot spends its time on sort and filter variants, it reaches new threads later. Our guide to spider traps and infinite URL spaces covers how to find and close these.

Testing and monitoring community rich results

Roll out in stages, starting with one template.

  1. Implement on the thread template and test ten real threads in the Rich Results Test, including a long paginated one, one with a deleted post and one with an image-only first post.
  2. Implement on the profile template and test active, inactive and renamed members.
  3. Check the Search Console reports for Discussion forum and Profile page items after Google recrawls. Fix errors (missing author name, missing date) first, then warnings.
  4. Compare performance using the Search Console performance report filtered to thread URLs (a regex on /t/ or /threads/ usually works). Look at impressions over 8–12 weeks rather than days.
  5. Re-test after every forum software upgrade. Platform updates regularly change templates and can break or duplicate markup.

A small test matrix keeps edge cases from slipping through. Run each case through the Rich Results Test before and after any template change:

Test caseWhat to confirmTypical failure
Thread with 200+ replies, page 3url is the canonical thread, comments match page 3Markup repeats page 1 replies on every page
Image-only opening postimage present so the text requirement is metError: missing text, image or video
Thread with a moderated replycreativeWorkStatus is DeletedReply silently missing; later replies orphaned
Guest or deleted-account authorauthor.name still present (e.g. "Guest")Error: missing author name
Renamed member profileidentifier unchanged, new alternateNameIdentifier tied to handle and changes with it
Member with default avatarimage omittedPlaceholder image marked up

Worked example (hypothetical): a hobby forum with 180,000 threads and 95,000 member profiles finds that only 22,000 members have ever posted. It marks up all threads with replies, marks up and indexes only the 22,000 active profiles, noindexes the remaining 73,000, and blocks sort parameters in robots.txt. The result is a much smaller, cleaner set of URLs for Google to crawl, with every indexed profile linked to real posts.

The same validation habits apply to other structured data types; see our schema markup guide, and for comparison, the property-by-property approach in our Recipe schema guide and SoftwareApplication schema guide.

Questions community managers ask about forum markup

Should my support forum use QAPage or DiscussionForumPosting?

Use QAPage for threads that are a single question where members submit answers, and DiscussionForumPosting for open discussions. Many support forums have both kinds of thread, so choose the type per thread at render time.

Do I need to mark up every reply in a long thread?

Mark up the replies shown on the page in the order they appear, and use commentCount for the total. Do not include replies that are not visible on that URL.

Can a blog with comments use DiscussionForumPosting?

Not for the article itself. Google says the type describes a user-generated post on a forum-style site where people collectively share first-hand perspectives. A staff-written article with comments is not that.

Should every member profile be marked up and indexed?

No. Profiles with no posts, default avatars or spam links add little. Many forums index and mark up only profiles above an activity threshold and noindex the rest.

What should happen to markup when a post is deleted?

If you keep a placeholder for context, keep it in the markup with creativeWorkStatus set to Deleted so replies still make sense. If the whole thread is removed, return a 404 or 410.

Rolling out forum and profile markup on your community

List your templates, assign each one a type using the table above, and implement the thread template first. Decide your profile indexing threshold before marking up profiles, clean up spam and empty threads, and canonicalise thread URLs. Then watch the Search Console reports and performance data over the following quarter.

If you run a community and want help with markup, crawl control and UGC quality together, our technical SEO team and community management resources are a good starting point. Get a quote for a community site audit.

Further reading on discussion forum schema

Sources for this forum and profile schema guide

  1. Discussion forum (DiscussionForumPosting) structured data – Google Search Central
  2. Profile page (ProfilePage) structured data – Google Search Central
  3. Q&A (QAPage) structured data – Google Search Central
  4. General structured data guidelines – Google Search Central
  5. New in structured data: discussion forum and profile page (Google Search Central Blog, November 2023)
  6. URL structure best practices for Google Search – Google Search Central
  7. Crawl budget management for large sites – Google Search Central
Rohit Choudhary
Written byRohit ChoudharyCo-Founder, My SEO Experts

Rohit Choudhary is the co-founder of My SEO Experts and has more than 14 years of hands-on experience in SEO, paid advertising and digital marketing. Since starting out in 2011 he has helped hundreds of businesses grow through practical, data-driven search strategies, and he also serves as a consulting Digital Marketing Director for several US-based companies.

Keep reading

Related articles

How to Run an SEO Audit With Claude and the Semrush MCP
Technical SEO

How to Run an SEO Audit With Claude and the Semrush MCP

A practical workflow for connecting Claude to Semrush data, auditing crawl health, on-page issues, backlinks and competitors, and turning AI findings into a verified, ranked fix list.

Ready to grow your business online?

Get a free, no-obligation proposal tailored to your goals and budget.

CallFree Quote