Skip to main content

Schema piece - Person

Describes an individual person. Most commonly used to identify the author of a piece of content (such as an Article or Comment).

May also identify the publisher of a WebSite (or other content) in some cases.

Triggers

Should be added as top-level nodes in the graph, as/when required by other nodes. E.g., when an Article has an author.

Required properties

A valid Person must have the following properties.

  • @type: Person.
  • @id: The site's home URL appended by #/schema/Person/{{ID}}, where {{ID}} is a unique identifier.
    • Note that the {{ID}} component should not reveal personally identifiable or sensitive information (e.g., avoid using a username or email address, or hash+salt these values).
  • name: The full name of the Person.

Failure scenarios

If any of the required fields are missing or invalid, the node should not be output.

If the node is not output, any entities which would otherwise have declared a relationship with the Person (e.g., as the publisher of a WebSite, or the author of an Article) should remove those references.

'Admin' usernames

If the name of the person is 'admin' or similar (or localised equivalents), then the Person should be invalidated; we should never present content as being authored by 'admin'.

Optional properties

The following should be added whenever available and valid:

  • description: The user bio, truncated to 250 characters.
  • sameAs: An array of URLs representing declared social/authoritative profiles of the person (e.g., a Wikipedia page, or Facebook profile).
  • image: An array of references-by-ID to ImageObject nodes which represent the person.
  • url: The URL of the users' profile page (if they're affiliated with the site in question), or to their personal homepage/website.

Conditional properties

Optional properties which should only be output when the required criteria is met.

Examples

Minimum criteria

{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Person",
"@id": "https://www.example.com/#/schema/Person/abc123",
"name": "Example person name"
}
]
}

Extended criteria

{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Person",
"@id": "https://www.example.com/#/schema/Person/abc123",
"name": "Example person name",
"image": {
"@id": "https://www.example.com/uploads/example-image.jpg"
},
"sameAs": [
"https://www.wikipedia.com/example-person",
"https://www.facebook.com/example-person"
]
}
]
}

WordPress API: Change Organization Schema output

To make changes to the Person schema that Yoast SEO outputs, you can use our wpseo_schema_person filter. Here is an example:

Change person output

add_filter( 'wpseo_schema_person', 'schema_change_person', 11, 2 );

/**
* Changes the Yoast SEO Person schema.
*
* @param array $data The Schema Person data.
* @param Meta_Tags_Context $context Context value object.
*
* @return array $data The Schema Person data.
*/
function schema_change_person( $data, $context ) {
if ( isset( $data['worksFor'] ) && $data['worksFor'] === 'Yoast' ) {
// Make references to "Yoast" actually reference the organization's graph piece.
$data['worksFor'] = [ '@id' => $context->site_url . Schema_IDs::ORGANIZATION_HASH ];
}

return $data;
}

Change person being output

If you want to change the person being output in the schema, you can filter it like this:

add_filter( 'wpseo_schema_person_user_id', 'change_schema_person_id' );

/**
* Changes the Yoast SEO Person schema.
*
* @param int $person_id The Schema Person ID.
*
* @return int $person_id The (possibly altered) person ID.
*/
function change_schema_person_id( $person_id ) {
if ( $person_id === 12 ) {
return 3; // Make sure this is a valid user ID.
}
return $person_id;
}

Social profiles

If you want to change which profiles to show on Person output in the sameAs array, you can hook into our wpseo_schema_person_social_profiles filter. We do this on yoast.com to add people's GitHub and WordPress profile as well as their personal sites to their sameAs output:

add_filter( 'wpseo_schema_person_social_profiles', 'yoast_add_social_profiles' );

/**
* Adds social profiles to our sameAs array.
*
* @param array $profiles Social profiles.
*
* @return array Social profiles.
*/
function yoast_add_social_profiles( $profiles ) {
array_push( $profiles, 'github', 'personal', 'wordpress' );

return $profiles;
}

To make more changes to our Schema output, see the Yoast SEO Schema API.