WPGraphQl Yoast SEO Plugin - Modified to produce schema that isn't broken for Gatsby-Source-WordPress
If you're wanting to use Gatsby to generate your site, the Schema produced needs to have full URLs - but the Gatsby-source-wordpress plugin strips out the scheme and hostname from any URLs if they match the GraphQL endpoint - which is the case in any URLs produced for the Schema. In many cases, probably almost all cases, this behaviour is desirable and convenient. However, there's no scope for leaving specific elements alone - it's a blanket search and replace performed by a regex in the gatsby-source-wordpress code. This fork intercepts the data before it leaves WordPress and changes it to something that won't be recognised by that search and replace. Leaving everything else working as it should.
This gets a bit specific because it means you must have your WordPress administration screens on a different subdomain to your website generated by Gatsby. At the moment I have hardcoded that in this fork to be 'wpadmin.yoursite.com'. This is how I have mine setup, so I've run with that. In other words, Gatsby will replace any 'https://wpadmin.yoursite.com' prefixes with a simple '/' - not what we want in Schema.
This modification therefore turns all occurrences of wpadmin in the WPGraphQL output into simply www. This is because my Gatsby produced site lives on www.yoursite.com and my WordPress backend lives on wpadmin.yoursite.com. Hope that makes sense! If anyone actually uses this and wants it configurable then drop me a line and I'll see what I can do.
If you are stuck on version of Yoast before V14 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.
- 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 snibbo71/wp-graphql-yoast-seo
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
metaRobots
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
metaRobots
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
metaRobots
opengraphAuthor
opengraphDescription
opengraphTitle
opengraphDescription
opengraphImage {
altText
sourceUrl
srcSet
}
twitterTitle
twitterDescription
twitterImage {
altText
sourceUrl
srcSet
}
breadcrumbs {
url
text
}
}
name
}
}
}
}
query GetUsers {
users {
nodes {
seo {
metaDesc
metaRobots
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 {
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
}
}
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
}
}
}
Please Note: Yoast and WPGraphQL and their logos are copyright to their respective owners.