Set SEO Data from a Block
The seo
library available from Block Utils lets you set the title and meta tags in the header. The server-side rendering will ensure that they are correct when the site is crawled.
Use this when you have a block that loads the primary piece of data for a page, such as a blog post or product detail.
1. Locate Your Get Data File
Open up your block's code and find getDataProps.js
. It should look like this:
export const getDataProps = (utils, props) => Promise.resolve({})
2. Make a Request to Load Some Data
Replace getDataProps
with a function like this one that loads data from Volusion's API; in this case, getting a product based on the pageVar read from the URI.
const getDataProps = (utils, props) => {const { pageVar } = propsreturn utils.client.products.getBySlug(pageVar).then(product => {return product})}
3. Create a Function to Use the SEO Methods
In that same file, write a function that will use the data to call some seo functions.
const generateSeo = (utils, product = {}) => {utils.seo.setTitle(product.seo_title)utils.seo.setDescription(product.seo_metaDescription)utils.seo.addExtraTag('twitter:title', product.seo_title)}
4. Connect Them Together
Update your getDataProps
function so that when it gets product data it calls generateSeo
.
return utils.client.products.getBySlug(pageVar).then(product => {generateSeo(utils, product)return product})
Note: The example above has been simplified from actual production code. You may have more meta tags that you wish to set. It does not catch()
on missing data or throwNotFound()
. Production code might also do a better job with the user experience in Site Designer, where you would not have pageVar
available, and could use isRendering
to load alternative data in that environment.