Page Metadata
Runtime metadata
Setting the page metadata is handled by react-helmet-async
.
There is no need to setup it, simply start using it!
// pages/home/home.view.tsximport * as React from 'react';import { Helmet } from 'react-helmet-async';export default function HomeView() {return (<><Helmet><title>HomePage | MyCoolSite</title></Helmet><p>Welcome to my cool site</p></>);}
We recommend you place the default Helmet configuration inside of the Root component
Static metadata
Sometimes, you need to send metadata even if JavaScript is disabled, or before any JavaScript executes.
If you use Server-Side-Rendering, the HTML sent by the server will contain all the metadata provided by Helmet.
If you don't use SSR, you can still send some metadata by modifying the base index.html
file.
Note: Without SSR, index.html
is built only once and used for all pages. With SSR, it is rebuilt for each page.
Setup:
In the following example, we're adding Google Tag Manager on all pages
First you need to tell the framework to use a custom html file generator:
// .reworkrc{"render-html": "./src/render-html.js"}
// src/render-html.js// note: this file is loaded by the builder itself, it needs to be valid JavaScript for your current version of Node.// "data" contains the metadata generated by helmet & the frameworkmodule.exports = function renderHtml(data) {return `<!DOCTYPE html><html ${data.htmlAttributes}><head>${data.head}<!-- Google Tag Manager --><script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','xxx');</script><!-- End Google Tag Manager --></head><body ${data.bodyAttributes}><!-- Google Tag Manager (noscript) --><noscript><iframesrc="https://www.googletagmanager.com/ns.html?id=xxx"height="0"width="0"style="display:none;visibility:hidden"></iframe></noscript><!-- End Google Tag Manager (noscript) -->${data.body}</body></html>`;};