One of the major strengths of Gatsby is its evolving plugins catalog. And there are a couple of plugins found for Google AdSense integration but don’t seem to be maintained for so long. But peeking into the source code of the one pave the path to do the same without any plugins.
All you have to do is, update your gatsby-ssr.js
with the below code (if there is no gatsby-ssr.js
file on your project directory then create one at the root).
1import React from "react";23export const onRenderBody = ({ setHeadComponents, setPostBodyComponents }) => {4 const pluginOptions = {5 googleAdClientId: `ca-pub-XXXXXXXXXXXXXX`, //TODO: Replace with your client-Id6 head: true, // Set to false if you prefer to have your adsense script loaded at the end of body instead of head.7 };89 if (process.env.NODE_ENV !== `production`) {10 return null;11 }12 if (pluginOptions.googleAdClientId === undefined) {13 return null;14 }15 const setComponents = pluginOptions.head16 ? setHeadComponents17 : setPostBodyComponents;18 return setComponents([19 <script20 async21 type="text/javascript"22 src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"23 />,24 <script25 key={`gatsby-plugin-google-adsense`}26 dangerouslySetInnerHTML={{27 __html: `28 (adsbygoogle = window.adsbygoogle || []).push({29 google_ad_client: "${pluginOptions.googleAdClientId}",30 enable_page_level_ads: true31 });32 `,33 }}34 />,35 ]);36};
onRenderBody is a Gatsby SSR API, called after every page Gatsby server renders while building HTML so you can set head and body components to be rendered in your html.js.
Build the project (gatsby build
) and see whether the AdSense snippet is present in the build output HTML.
You can also refer the same used in my repo itself.