🕶 Working with Metadata+v0.5
Want to add some metadata to your page? Now you can with the Head API! All page templates have access to this API
Using the Head API
Using static metadata
You can access the head property in the layout template
module.exports = ({ title, content, head, dev }) => `
<!DOCTYPE html>
<html>
<head>
${head}
<script src="${dev ? 'https://dev.script.js' : 'https://prod.script.js'}"></script>
<title>${title}</title>
</head>
<body>
${content}
</body>
</html>
`;
In your page template you can export the head function
const page = ({ data, dev }) => `
<p>${data.text}</p>
`;
module.exports = {
layout: 'default',
title: 'Hydrogen webpage',
page,
data: () => ({
text: 'Hydrogen metadata',
}),
head: () => [
['meta', { name: 'description', content: 'Hydrogen metadata' }],
];
};
Run build command
<!DOCTYPE html>
<html>
<head>
<meta name="description" content="Hydrogen metadata" />
<script src="https://dev.script.js"></script>
<title>Hydrogen webpage</title>
</head>
<body>
<p>Hydrogen metadata</p>
</body>
</html>
Using asynchronous data with the Head API
We also have access to the data from the Data API
const axios = require('axios');
const page = ({ data, dev }) => `
<p>This project has ${data.likes} likes</p>
`;
module.exports = {
layout: 'default',
title: 'Hydrogen webpage',
page,
data: async ({ dev }) => ({
likes: await axios.get('https://likes.com').then(res => res.data),
}),
head: ({ likes, dev }) => [
['meta', { name: 'og:likes', content: likes }],
];
};
Using the Hydrogen config with the Head API
With the global name property provided by the Hydrogen Config, we can use it to manage our page title's
const page = () => `
<p>The head will be injected into the layout</p>
`;
module.exports = {
layout: 'default',
page,
head: ({ config }) => [
['title', {}, `Head API | ${config.name}`]
];
};
What if you want to update your static assets folder, you can do that to!
const page = () => `
<p>The head will be injected into the layout</p>
`;
module.exports = {
layout: 'default',
page,
head: ({ config }) => [
['script', { src: `/${config.staticFolder}/js/script.js` }, true]
];
};