Schema piece - WebPage
Describes a single page on a WebSite. Acts as a container for sub-page elements (such as Article).
Acts as a connector from a page's content to the parent WebSite (and in turn, to the Organization).
May be transformed into a more specific type (such as FAQPage ) if the required conditions are met.
Triggers
Should be output on all public pages, except for 4xx and 5xx range error pages/scenarios.
Required properties
A valid WebPage must have the following properties.
@type:WebPage.@id: The unmodified canonical URL of the page.URL:The unmodified canonical URL of the page.name: The title of the page.isPartOf: A reference-by-ID to theWebSitenode.
Failure scenarios
If any of the required fields are missing or invalid, the node should not be output.
Optional properties
The following should be added whenever available and valid:
description: The page's meta description content.inLanguage: The language code for the page; e.g.,en-GB.datePublished: The time at which the page was originally published, in ISO 8601 format; e.g.,2015-10-31T16:10:29+00:00.dateModified: The time at which the page was last modified, in ISO 8601 format; e.g.,2015-10-31T16:10:29+00:00.primaryImageOfPage: A reference-by-ID to a node representing the page's featured image.breadcrumb: A reference-by-ID to a node representing the page's breadrumb structure [link].image: An array of all images in the page content, referenced by ID (including the image referenced by theprimaryImageOfPage).video: An array of all videos in the page content, referenced by ID.keywords: An array of the names of tags attached to the page (e.g.,["cats","dogs","cake"]).speakable: ASpeakableSpecificationobject which identifies any content elements suitable for spoken results.
Conditional properties
Optional properties which should only be output when the required criteria is met.
When the page is a a conventional Page (and not, e.g., a posts archive, user profile, etc)
potentialAction: AReadActionobject with values:target: The unmodified canonical URL of the page.
When the page is authored
author: A reference-by-ID to the author of the page. Should only be output when the page is explicitly authored (e.g., on a page containing a native Post in WordPress).
When the page has comments, and the page does not contain a valid Article
comment: An array of references-by-ID to comments associated with the page.commentCount: An integer value of the total number of comments associated with the page.
When it's a homepage
- Add an additional
aboutproperty which references the main entity of the site (typically anOrganizationorPerson, depending on user configuration). - If there's no explicitly defined featured image for the page, set the
primaryImageOfPageto the (imageObjectrepresenting the) site's logo.
Transformations
The WebPage type may be transformed in the following scenarios.
Taxonomy indexes
When the query returns a loop of posts (e.g., a category archive, a blog homepage, or other taxonomy index) then, then the type property should be altered to CollectionPage.
Profile pages
When the page is about a particular user (e.g., an member bio / author archive):
- The
typeproperty should be altered toProfilePage.- If the page features posts/pages authored by that
Person, then thetypeproperty should instead by an array of['CollectionPage','ProfilePage'].
- If the page features posts/pages authored by that
- Add a
mainEntityOfPageproperty to thePersonwhich the page is about, which references theWebPageby ID.
FAQ pages
When the page contains FAQs, the type property should be converted to an array including FAQPage and WebPage (or the most specific transformation as described above).
Search results
On search results pages, the type property should be altered to an array of [CollectionPage, SearchResultsPage].
Examples
Minimum criteria
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebPage",
"@id": "https://www.example.com/example-page/",
"url": "https://www.example.com/example-page/",
"name": "Example page name",
"isPartOf": {
"@id": "https://www.example.com/#/schema/WebSite/1"
}
}
]
}
Extended criteria
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebPage",
"@id": "https://www.example.com/example-page/",
"url": "https://www.example.com/example-page/",
"name": "Example page name",
"description": "Example page description",
"keywords": ["cats","dogs","cake"],
"isPartOf": {
"@id": "https://www.example.com/#/schema/WebSite/1"
},
"inLanguage": "en-US",
"datePublished": "2019-07-10T08:08:40+00:00",
"dateModified": "2019-07-10T08:43:03+00:00",
"breadcrumb": {
"@id": "https://www.example.com/#/schema/BreadcrumbList/abc123"
},
"primaryImageOfPage": {
"@id": "https://www.example.com/uploads/example-image.jpg"
},
"image": [
{
"@id": "https://www.example.com/uploads/example-image.jpg"
},
{
"@id": "https://www.example.com/uploads/example-image-2.jpg"
}
],
"video": [
{
"@id": "https://www.example.com/#/schema/VideoObject/abc123"
},
{
"@id": "https://www.example.com/#/schema/VideoObject/def456"
}
],
"potentialAction": [
{
"@type": "ReadAction",
"target": [ "https://www.example.com/example-page/" ]
}
]
}
]
}
WordPress API: Change Webpage Schema output
To change the Webpage schema Yoast SEO outputs, you can use our wpseo_schema_webpage filter, for instance as follows:
add_filter( 'wpseo_schema_webpage', 'example_change_webpage' );
/**
* Changes @type of Webpage Schema data.
*
* @param array $data Schema.org Webpage data array.
*
* @return array Schema.org Webpage data array.
*/
function example_change_webpage( $data ) {
if ( ! is_page( 'about' ) ) {
return $data;
}
$data['@type'] = 'AboutPage';
return $data;
}
We also have a more specific filter for convenience: wpseo_schema_webpage_type - changes the page type, so could be used to make the above example even simpler.
To make more changes to our Schema output, see the Yoast SEO Schema API.