Yoast SEO Product sheet

This document is a living document, describing the functionality of Yoast SEO for any platform. It starts with a general specification, describing the functionality a Yoast SEO module should always guarantee, regardless of the platform for which it has been built. Further down you will find more platform specific requirements.

Table of contents

Yoast SEO: general specification

Technical SEO (out of the box)

Some things need to work out of the box when the module is enabled.

  • The site needs to have pretty permalinks. System permalinks should refer to their human-readable equivalents through canonicals.
  • Every page needs to have a rel="canonical" that defaults to its generated pretty URL. See rel=canonical: the ultimate guide on Yoast.com.
  • The site needs to handle paginated content well. Paginated content should have rel="next"and/or rel="prev" tags. See Google's documentation on paginated content.
  • Search results and archive pages that should be public should have meta robots tags noindex, follow.
  • Category pages which are paginated should index all pages in the series (previous advice suggested that only the first page should be indexed).

On-page SEO and content analysis

For on-page SEO two sides should be covered:

  1. On the technical side, SEO metadata needs to be included in the head of every page. This also includes social metadata like OpenGraph and Twitter metadata.
  2. On the content side, the user should be able to optimize content for SEO. For this purpose, we have built a, fully client-side functioning, content analysis tool.

Page specific metadata

For each page, a user needs to be able to set the following metadata:

  • <title>
  • content: SEO title field in Yoast Snippet editor.
  • if emptycontent: Title of the page.
  • <meta name="description">
  • content: The meta description field in the Yoast Google Snippet editor
  • exclude if empty.
  • <meta property="og:locale" />
  • content: Locale of the content.
  • exclude if empty
  • <meta property="og:type" />
  • if homepagecontent: website
  • if singular content (post, page or equivalent)content: article
  • if archive or portalcontent: object
  • <meta property="og:title" />
  • content: Facebook title field.
  • if emptycontent: SEO title field in Yoast Snippet editor
  • if emptycontent: Title of the page.
  • <meta property="og:description" />
  • content: Facebook description field.
  • if emptycontent: Meta description field in Yoast Snippet editor
  • if emptycontent: Excerpt of the content
  • exclude if empty
  • <meta property="og:url" />
  • content: The canonical url of the page
  • <meta property="og:image" />
  • content: The Facebook image field.
  • if empty, Main or featured image for the content.
  • if empty, Images present in the content.
  • <meta name="twitter:description" />
  • content: Twitter description field.
  • if emptycontent: Facebook description field.
  • if emptycontent: Meta description field in Yoast Snippet editor
  • if emptycontent: Excerpt of the content
  • exclude if empty
  • <meta name="twitter:title" />
  • content: Twitter title input field.
  • if emptycontent: Facebook title input field.
  • if emptycontent: SEO title field in Yoast Snippet editor
  • if emptycontent: Title of the page.
  • <meta name="twitter:image" />
  • content: The Twitter image field.
  • if emptycontent: The Facebook image field.
  • if emptycontent: Main or featured image for the content.
  • if emptycontent: Images present in the content.

Globally set metadata

As a site owner, I want to be able to set the following metadata globally:

  • <meta property="og:site_name" />
  • content: The site name
  • <meta property="fb:admins" />
  • content: List of the website's Facebook page admin ids (comma separated).
  • <meta property="fb:pages" />
  • content: Facebook page id.
  • <meta name="twitter:card" />
  • content: The selected twitter card type.
  • Supported types:
  • summary (Summary)
  • summary_large_image (Summary with large image)
  • See Twitter docs on card types
  • <meta name="twitter:site" />
  • content: The Twitter handle of the Twitter profile associated with the site (also used for People and Organization structured metadata).

Advanced SEO metadata

Optionally, we might also want to include a few options for setting the robots meta.

  • As an advanced user, I want to be able to set the following <meta name="robots"> tags for every page:
  • index / noindex
  • follow / nofollow
  • noodp
  • noimageindex
  • noarchive
  • nosnippet
  • As an advanced user, I need to be able to set the canonical url for every page.

Content & Readability analysis

For content & readability analysis, we've built a tool called YoastSEO.js. It's able to analyze content for a whole range of SEO, accessibility and readability checks.

Example of the SEO & accessibility checks SEO & Accessibility Analysis

Example of the readability checks Readability checks

YoastSEO.js also contains a Google snippet editor which contains a preview of how the page will (probably) be displayed in Google desktop or mobile search and an editor in which users can edit the title, slug and meta description intuitively.

Snippet editor (desktop) Desktop snippet editor

Snippet editor (mobile) Mobile snippet editor

These UI elements should be integrated into the content editing experience and should update in a real-time or semi-realtime manner. For inspiration, implementors are recommended to take a look at how these elements are integrated into Yoast SEO for WordPress.

Structured metadata

Website Structured metadata (ld+json)

  • An ld+json script should be output in the head of the home page (possibly also about page?) containing structured Website metadata.
  • As a site owner, I should be able to set a name (Sitename) and an alternateName (Alternate name) for my site.
  • If my site has public search functionality, a SearchAction should be automatically added giving Google the possibility to put a search box in its search results, allowing people to search on my site straight from Google. See Google's Sitelinks Searchbox documentation.
Website example
{
	"@context":"http:\/\/schema.org",
	"@type":"WebSite",
	"url":"https:\/\/yoast.com\/",
	"name":"Yoast",
	"alternateName":"Yoast.com",
	"potentialAction":{
		"@type":"SearchAction",
		"target":"https:\/\/yoast.com\/?s={search_term_string}",
		"query-input":"required name=search_term_string"
	}
}

Person or Company Structured metadata (ld+json)

  • An ld+json script should be output in the head of the home page (possibly also about page?) containing structured Person or Organization metadata.
  • As a site owner, I should be able to tell Yoast SEO if my site represents a Person (Person) or an Organization (Company).
  • For a Person, I need to be able to set a name.
  • For an Organization, I need to be able to set a name and upload a logo.
  • For both a Person or Organization, I need to be able to set the social profiles associated with it, which will be output in the sameAs property of the structured metadata. The following social profiles should be included (none are required):
  • Facebook
  • Instagram
  • Twitter
  • Linkedin
  • Youtube
  • Pinterest
  • Myspace
  • Google+
Person example
{
	"@context":"http:\/\/schema.org",
	"@type":"Person",
	"url":"http:\/\/person.example.org\/",
	"sameAs":[
		"https:\/\/www.facebook.com\/examplePerson",
		"https:\/\/instagram.com\/examplePerson\/",
		"https:\/\/www.linkedin.com\/company\/person.example.com",
		"https:\/\/plus.google.com\/+ examplePerson\/posts",
		"https:\/\/myspace.com\/examplePerson",
		"https:\/\/www.youtube.com\/examplePerson",
		"https:\/\/www.pinterest.com\/examplePerson",
		"https:\/\/twitter.com\/examplePerson"
	],
	"name":"John Doe",
}

Organization example

{
	"@context":"http:\/\/schema.org",
	"@type":"Organization",
	"url":"https:\/\/yoast.com\/",
	"sameAs":[
		"https:\/\/www.facebook.com\/yoast",
		"https:\/\/instagram.com\/yoast\/",
		"https:\/\/www.linkedin.com\/company\/yoast.com",
		"https:\/\/plus.google.com\/+Yoastcom\/posts",
		"https:\/\/myspace.com\/yoast",
		"https:\/\/www.youtube.com\/yoast",
		"https:\/\/www.pinterest.com\/yoast",
		"https:\/\/twitter.com\/yoast"
	],
	"name":"Yoast",
	"logo":"https:\/\/yoast-mercury.s3.amazonaws.com\/uploads\/2013\/02\/Yoast_Icon_Large_RGB.png"
}