If you are stuck on version of Yoast before V4 then use v3 of this plugin.
This is an extension to the WPGraphQL plugin (https://github.com/wp-graphql/wp-graphql) that returns Yoast SEO data.
Using this plugin? I would love to see what you make with it. 😃 @ash_hitchcock
Currently returning SEO data for:
- Pages
- Posts
- Custom post types
- Products (WooCommerce)
- Categories
- Custom taxonomies
- WooCommerce Products
- Yoast Configuration
- Webmaster verification
- Social profiles
- Schemas
- Breadcrumbs
If there is any Yoast data that is not currently returned, please raise an issue so we can add it to the roadmap.
- Install from the WordPress Plugin Directory
- Clone or download the zip of this repository into your WordPress plugin directory & activate the WP GraphQL Yoast SEO plugin
- Install & activate WPGraphQL
composer require ashhitch/wp-graphql-yoast-seo
This plugin uses Docker for local development to ensure a consistent environment for all contributors.
Before you begin, make sure you have installed:
- Docker
- Docker Compose (usually included with Docker Desktop)
- Git
-
Clone the repository:
git clone https://github.com/ashhitch/wp-graphql-yoast-seo.git cd wp-graphql-yoast-seo
-
Start the Docker environment:
docker-compose up -d
This will build and start the following containers:
- WordPress (accessible at http://localhost:8000)
- MySQL database
- phpMyAdmin (accessible at http://localhost:8080)
-
Access WordPress:
The setup script will automatically:
- Install WordPress
- Install and activate the WPGraphQL plugin
- Install and activate the Yoast SEO plugin
- Activate the wp-graphql-yoast-seo plugin
- Create some test content (posts and pages)
Default credentials:
- Admin Username:
admin
- Admin Password:
password
- Admin Email:
[email protected]
-
Make your code changes to the plugin files in your local repository.
-
Test your changes:
- Visit http://localhost:8000 to access the WordPress admin
- You can use tools like GraphiQL (included with WPGraphQL) to test your GraphQL queries
-
Restart containers if needed:
docker-compose restart
-
View logs:
docker-compose logs -f wordpress
-
Stop the environment when you're done:
docker-compose down
To completely remove volumes (database data) as well:
docker-compose down -v
This plugin follows WordPress Coding Standards. Before submitting a pull request:
-
Install development dependencies:
composer install
-
Run code quality checks:
composer run phpcs
-
Fix coding standards automatically (when possible):
composer run phpcbf
To test your GraphQL queries with the WPGraphQL Yoast SEO plugin:
- Access the GraphiQL interface at http://localhost:8000/wp-admin/admin.php?page=graphiql-ide
- Try some of the example queries from the Usage section below
If you encounter issues:
-
Check container status:
docker-compose ps
-
Rebuild containers:
docker-compose down docker-compose build --no-cache docker-compose up -d
-
Check WordPress logs:
docker-compose logs wordpress
Please note canonicals will not be returned if you have the discourage search engines option turned on in your WordPress settings.
Plugin now requires at least Yoast 14.0.0
Image urls are now returned as mediaItem
type.
This applies to twitterImage
and opengraphImage
Checkout the companion Gatsby plugin to add in Metadata and JSON LD schema with ease.
To query for the Yoast Data simply add the seo object to your query:
query GetPages {
pages(first: 10) {
edges {
node {
id
title
seo {
canonical
title
metaDesc
focuskw
metaRobotsNoindex
metaRobotsNofollow
opengraphAuthor
opengraphDescription
opengraphTitle
opengraphDescription
opengraphImage {
altText
sourceUrl
srcSet
}
opengraphUrl
opengraphSiteName
opengraphPublishedTime
opengraphModifiedTime
twitterTitle
twitterDescription
twitterImage {
altText
sourceUrl
srcSet
}
breadcrumbs {
url
text
}
cornerstone
schema {
pageType
articleType
raw
}
readingTime
fullHead
}
author {
node {
seo {
metaDesc
metaRobotsNofollow
metaRobotsNoindex
title
social {
youTube
wikipedia
twitter
soundCloud
pinterest
mySpace
linkedIn
instagram
facebook
}
}
}
}
}
}
}
}
query GetCategories {
categories(first: 10) {
edges {
node {
id
seo {
fullHead
canonical
title
metaDesc
focuskw
metaRobotsNoindex
metaRobotsNofollow
opengraphAuthor
opengraphDescription
opengraphTitle
opengraphDescription
opengraphImage {
altText
sourceUrl
srcSet
}
twitterTitle
twitterDescription
twitterImage {
altText
sourceUrl
srcSet
}
breadcrumbs {
url
text
}
}
name
}
}
}
}
query GetUsers {
users {
nodes {
seo {
metaDesc
metaRobotsNofollow
metaRobotsNoindex
title
fullHead
social {
youTube
wikipedia
twitter
soundCloud
pinterest
mySpace
linkedIn
instagram
facebook
}
}
}
}
}
query GetPostsWithIsPrimary {
posts {
pageInfo {
startCursor
seo {
schema {
raw
}
}
}
nodes {
title
slug
categories {
edges {
isPrimary
node {
name
count
}
}
}
}
}
}
query GetSeoConfig {
seo {
meta {
author {
description
title
}
date {
description
title
}
config {
separator
}
homepage {
description
title
}
notFound {
breadcrumb
title
}
}
webmaster {
googleVerify
yandexVerify
msVerify
baiduVerify
}
schema {
siteName
wordpressSiteName
siteUrl
inLanguage
companyName
companyOrPerson
companyLogo {
mediaItemUrl
}
logo {
mediaItemUrl
}
personLogo {
mediaItemUrl
}
}
breadcrumbs {
showBlogPage
separator
searchPrefix
prefix
homeText
enabled
boldLast
archivePrefix
notFoundText
}
social {
facebook {
url
defaultImage {
mediaItemUrl
}
}
instagram {
url
}
linkedIn {
url
}
mySpace {
url
}
pinterest {
url
metaTag
}
twitter {
cardType
username
}
wikipedia {
url
}
youTube {
url
}
otherSocials
}
openGraph {
frontPage {
title
description
image {
altText
sourceUrl
mediaItemUrl
}
}
defaultImage {
altText
sourceUrl
mediaItemUrl
}
}
contentTypes {
post {
title
schemaType
metaRobotsNoindex
metaDesc
schema {
raw
}
archive {
fullHead
archiveLink
breadcrumbTitle
hasArchive
metaDesc
metaRobotsNoindex
title
}
}
page {
metaDesc
metaRobotsNoindex
schemaType
title
schema {
raw
}
}
}
redirects {
origin
target
format
type
}
}
}
contentNode(id: "1", idType: DATABASE_ID) {
id
contentTypeName
seo {
title
metaDesc
}
}
node(id: "cG9zdDox",) {
... on NodeWithTitle {
seo {
title
metaDesc
}
}
}
nodeByUri(uri: "/") {
... on NodeWithTitle {
seo {
title
metaDesc
}
}
}
Please Note: Yoast and WPGraphQL and their logos are copyright to their respective owners.