What Is ProfilePage Schema? The Complete Guide (2026)
What Is ProfilePage Schema?
ProfilePage schema is a type of structured data — defined in the Schema.org ProfilePage vocabulary — that marks up pages dedicated to a specific person or organization: author bios, creator profiles, social media profile pages, forum member pages, and similar content. It tells Google and AI systems who the page is about, when the profile was created and last updated, and what interactions the profiled entity has on the platform.
- Required:
mainEntity(Person or Organization) withnameoralternateName— Google accepts either; at least one must be present - Recommended:
dateCreated,dateModified,mainEntity.image,mainEntity.sameAs,mainEntity.identifier,mainEntity.description,mainEntity.alternateName interactionStatistic= engagement received by this profile (FollowAction, LikeAction, BefriendAction)agentInteractionStatistic= activity done by this user (FollowAction, LikeAction, WriteAction, ShareAction)
Why ProfilePage Schema Matters for AI Visibility
Profile pages are critical for entity disambiguation — the process by which AI systems identify that "Jane Smith the software engineer" is a different entity from "Jane Smith the journalist." ProfilePage schema, combined with sameAs links to external profiles, gives AI systems the identity signals they need to correctly attribute content and avoid entity confusion.
For publishers and content platforms, properly marked-up author profile pages increase the likelihood that AI assistants correctly credit articles, posts, and videos to the right creator. This is especially important as AI-generated content summaries increasingly include author attribution.
ProfilePage Schema Structure
ProfilePage schema wraps the page-level information around a mainEntity object that describes the Person or Organization being profiled. Think of it as two nested layers:
- Outer layer (ProfilePage): Describes the page itself —
dateCreated,dateModified, and optionallyhasPart(links to recent content published by this user). - Inner layer (mainEntity): Describes the person or organization — their name, image, biography, external profiles, and engagement statistics.
Required Properties
| Property | Greadme rule |
|---|---|
mainEntity | Error if missing. Must be a Person or Organization with @type |
mainEntity.name or mainEntity.alternateName | Error if both are missing — Google accepts either one. On platforms where users have handles but no legal name, alternateName alone satisfies this requirement |
Recommended Properties
| Property | Notes |
|---|---|
dateCreated | ISO 8601 datetime when the profile was created. Greadme warns if missing |
dateModified | ISO 8601 datetime when the profile was last updated. Greadme warns if missing |
mainEntity.image | Profile photo URL. Do not use placeholder images. Greadme warns and deducts 8 points if missing |
mainEntity.sameAs | Array of URLs to external profiles (Twitter, LinkedIn, Wikipedia, personal site). Critical for entity disambiguation |
mainEntity.identifier | A unique internal identifier for this user within your platform (e.g., database ID) |
mainEntity.alternateName | An alternate name or handle (e.g., social media username). Recommended even when name is present |
mainEntity.description | User byline or short biography. Greadme warns if missing |
mainEntity.interactionStatistic | Engagement received by this profile. See valid types below |
mainEntity.agentInteractionStatistic | Activity performed by this user. See valid types below |
hasPart | Array of links to recent content (Articles, Comments) published by this user. Each item needs a @type and url |
interactionStatistic vs. agentInteractionStatistic
These two properties record different directions of interaction and require different valid interactionType values:
| Property | Records | Valid interactionType values |
|---|---|---|
interactionStatistic | Engagement received by this profile (followers, likes received) | FollowAction, LikeAction, BefriendAction |
agentInteractionStatistic | Activity performed by this user (posts written, shares made) | FollowAction, LikeAction, WriteAction, ShareAction |
Each stat must be an InteractionCounter with @type, interactionType, and userInteractionCount. Using the wrong interactionType for the wrong property is a Greadme warning.
ProfilePage Schema Code Example
A complete author profile page with engagement statistics:
{
"@context": "https://schema.org",
"@type": "ProfilePage",
"dateCreated": "2022-01-15T00:00:00+00:00",
"dateModified": "2026-04-01T09:00:00+00:00",
"mainEntity": {
"@type": "Person",
"name": "Jane Smith",
"alternateName": "@janesmith_dev",
"identifier": "user-7821",
"description": "Senior software engineer specializing in distributed systems.",
"image": "https://example.com/avatars/jane-smith.jpg",
"sameAs": [
"https://twitter.com/janesmith_dev",
"https://linkedin.com/in/janesmith",
"https://github.com/janesmith"
],
"interactionStatistic": [
{
"@type": "InteractionCounter",
"interactionType": "https://schema.org/FollowAction",
"userInteractionCount": 3200
}
],
"agentInteractionStatistic": [
{
"@type": "InteractionCounter",
"interactionType": "https://schema.org/WriteAction",
"userInteractionCount": 142
}
]
}
}Common Mistakes to Avoid
- Missing both name and alternateName: At least one is required — Google explicitly states that
alternateNamecan substitute fornamewhen the name is unavailable. On platforms where users have handles but no real names, using the handle inalternateNamealone satisfies the requirement. - Using placeholder images: Greadme warns against placeholder image URLs. Use the actual profile photo — a real image URL that resolves to the user's avatar.
- Wrong interactionType for the context: WriteAction and ShareAction represent things a user does — they belong in
agentInteractionStatistic. BefriendAction represents something received — Greadme places it ininteractionStatistic. Greadme warns on types that do not semantically fit their context. - Missing userInteractionCount: Every InteractionCounter must have this field. Greadme warns and deducts points if it is absent.
- hasPart items without @type or url: Greadme warns on each
hasPartitem missing a@typeor URL reference.
How Greadme Validates ProfilePage Schema
Greadme runs a dedicated ProfilePage validator. The score starts at 100 with these key deductions:
| Issue | Points lost |
|---|---|
Missing mainEntity | −25 |
Missing mainEntity.@type | −15 |
Missing both mainEntity.name and mainEntity.alternateName | −20 |
Missing mainEntity.image | −8 |
Missing or empty mainEntity.sameAs | −5 |
Missing mainEntity.identifier | −5 |
Missing mainEntity.description | −5 |
Missing mainEntity.alternateName (when name is present) | −5 |
Missing dateCreated | −5 |
Missing dateModified | −5 |
Frequently Asked Questions
Can I use ProfilePage schema on an author bio page that is not a full user account?
Yes. ProfilePage schema is appropriate for any page whose primary purpose is describing a person or organization — including static author bio pages on blogs or news sites, even when those pages do not have login or interactive features.
Should I use Person or Organization as the mainEntity @type?
Use Person for individuals and Organization for companies, brands, or groups. If the profile represents a personal brand that is also a business entity (e.g., a solo creator's brand page), you can use both types in an array: "@type": ["Person", "Organization"].
Does ProfilePage schema replace the need for an Organization schema on author pages?
They serve different purposes. ProfilePage schema describes the individual user's profile on your platform. Organization schema describes your platform itself as an entity. Both can — and typically should — coexist on different pages of your site.
