What Is ProfilePage Schema? The Complete Guide (2026)

Saar Twito8 min read
Saar Twito
Saar TwitoFounder & SEO Engineer

Hi, I'm Saar - a software engineer, SEO specialist, and lecturer who loves building tools and teaching tech.

View author profile →

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.

TL;DR
  • Required: mainEntity (Person or Organization) with name or alternateName — 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:

  1. Outer layer (ProfilePage): Describes the page itself — dateCreated, dateModified, and optionally hasPart (links to recent content published by this user).
  2. Inner layer (mainEntity): Describes the person or organization — their name, image, biography, external profiles, and engagement statistics.

Required Properties

PropertyGreadme rule
mainEntityError if missing. Must be a Person or Organization with @type
mainEntity.name or mainEntity.alternateNameError 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

PropertyNotes
dateCreatedISO 8601 datetime when the profile was created. Greadme warns if missing
dateModifiedISO 8601 datetime when the profile was last updated. Greadme warns if missing
mainEntity.imageProfile photo URL. Do not use placeholder images. Greadme warns and deducts 8 points if missing
mainEntity.sameAsArray of URLs to external profiles (Twitter, LinkedIn, Wikipedia, personal site). Critical for entity disambiguation
mainEntity.identifierA unique internal identifier for this user within your platform (e.g., database ID)
mainEntity.alternateNameAn alternate name or handle (e.g., social media username). Recommended even when name is present
mainEntity.descriptionUser byline or short biography. Greadme warns if missing
mainEntity.interactionStatisticEngagement received by this profile. See valid types below
mainEntity.agentInteractionStatisticActivity performed by this user. See valid types below
hasPartArray 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:

PropertyRecordsValid interactionType values
interactionStatisticEngagement received by this profile (followers, likes received)FollowAction, LikeAction, BefriendAction
agentInteractionStatisticActivity 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 alternateName can substitute for name when the name is unavailable. On platforms where users have handles but no real names, using the handle in alternateName alone 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 in interactionStatistic. 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 hasPart item missing a @type or URL reference.

How Greadme Validates ProfilePage Schema

Greadme runs a dedicated ProfilePage validator. The score starts at 100 with these key deductions:

IssuePoints 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.