Industry-Leading NPS Widgets for Gatsby

Best NPS Widgets Software for Gatsby

Join 2,200+ companies using Produktly to create exceptional nps widgets that measure customer loyalty and identify areas for growth on Gatsby.

Produktly Capterra rating 4.7/5.0Produktly Capterra Best Ease of Use Badge

Why Produktly NPS Widgets is Perfect for Gatsby

Interactive onboarding for Gatsby static sites. Produktly helps you guide users through your Gatsby-powered content.

Supercharge Your Gatsby Experience

Measure customer satisfaction and loyalty with easy-to-use NPS widgets.

High Response Rates

In-app widgets get much higher response rates than emails.

Automated Scheduling

Ask for feedback at the perfect time in the user journey.

Closed-Loop Feedback

Act on feedback quickly to improve customer loyalty.

Simple Integration with Gatsby

Getting started with Produktly nps widgets on your Gatsby project is quick and easy.

How to integrate:

  1. 1

    Get your unique script from Produktly.

  2. 2

    Add the script to your gatsby-ssr.js or gatsby-browser.js.

  3. 3

    Build tours using our visual editor on your live Gatsby site.

  4. 4

    Improve user retention with guided walkthroughs.

Produktly highlighting features in Gatsby

Gatsby and in-app guidance

Gatsby pre-renders pages at build time and hydrates them in the browser. The result is fast static HTML with React taking over once the JS bundle loads. Anything that targets a DOM element has to wait until hydration completes, or use a static target that exists in the pre-rendered HTML.

Gatsby also does client-side routing with @reach/router, so navigation between pages is in-app after the first load. Tours that depend on page reloads will only fire once unless they listen to history changes.

Installing Produktly on Gatsby

Use setHeadComponents in gatsby-ssr.js so the snippet gets injected into the pre-rendered HTML of every page.

// gatsby-ssr.js
import React from "react";

export const onRenderBody = ({ setHeadComponents }) => {
  setHeadComponents([
    <script
      key="produktly"
      dangerouslySetInnerHTML={{
        __html: `
          (function (w, d, f) {
            var a = d.getElementsByTagName("head")[0];
            var s = d.createElement("script");
            s.async = 1; s.src = f;
            s.setAttribute("id", "produktlyScript");
            s.dataset.clientToken = "YOUR_TOKEN";
            a.appendChild(s);
          })(window, document, "https://public.produktly.com/js/main.js");
        `
      }}
    />
  ]);
};

setHeadComponents inlines the script during build, so it lands in the static HTML and runs on first paint, no JS bundle required.

Things to watch out for on Gatsby

  • Loading in gatsby-browser.js misses the first render

    gatsby-browser.js only runs after hydration. If you want the script available on first paint, put it in gatsby-ssr.js as shown.

  • Gatsby Link skips full page reloads

    After the first page, Gatsby Link does soft navigation. Enable Produktly’s SPA redirect handling so cross-page tours keep firing.

  • Static queries hydrate after the page paints

    If your tour targets a component fed by useStaticQuery, the element exists in the pre-rendered HTML but may be replaced during hydration. Use stable data-* attributes that survive both renders.

Why teams on Gatsby pick Produktly

Gatsby teams pick Produktly because the snippet ships in static HTML and runs before the React bundle loads, no impact on Core Web Vitals. Setup is one onRenderBody hook, and the editor works against pre-rendered HTML the same way it works against any other site.