This repository contains sample code components for enabling client side tracking functionality for the Klaviyo/Shopify integration, specifically onsite tracking for a Hydrogen storefront to supplement the prebuilt Klaviyo/Shopify integration that relies the Shopify backend. This guide assume you have read the Integrate with a Shopify Hydrogen store developer guide and have already connected Klaviyo’s native Shopify integration.
The example code is based on the Hydrogen Demo Store as an easy-to-use baseline for any Hydrogen-powered storefront.
Copy the klaviyo
folder into the src/components
directory of your root project folder. This directory contains three client files.
KlaviyoOnsite.client.jsx
- Enables loading the Klaviyo onsite script for track/identify requests and sign-up forms. Also enables subscriptions to various on site analytics. Make sure to change theAPI_KEY
to your Klaviyo public API key.KlaviyoPublishProductView.client.jsx
- Publishes a product view metric. To be added on project page.KlaviyoIdentify.client.jsx
- Enables Klaviyo to identify a user for onsite event tracking.
In src/App.server.jsx
import the KlaviyoOnsite component and add at the end of the <LocalizationProvider />
tag:
import KlaviyoOnsite from '~/components/klaviyo/KlaviyoOnsite.client';
// Omitted
export default function Layout({children, hero}) {
// Omitted
return (
<LocalizationProvider preload="*">
Omitted
<KlaviyoOnsite />
</LocalizationProvider>
);
}
The example code makes use of Hydrogen Analyticsand uses the VIEWED_PRODUCT
event notification to be triggered, which can be done with Hydrogen's built in ClientAnalytics
. For example in src/routes/products/[handle].server.jsx
add the following function and add to the end of ProductProvider
:
import KlaviyoPublishProductView from '~/components/klaviyo/KlaviyoPublishProductView.client';
// Omitted
export default function Product() {
// Omitted
return (
<Layout>
<Suspense>
<Seo type="product" data={product} />
</Suspense>
<ProductOptionsProvider data={product}>
// Omitted
<KlaviyoPublishProductView product={product} />
</ProductOptionsProvider>
</Layout>
);
}
Note: The product context is assumed to be at the variant product level to have access to properties such as selectedVariant
.
Klaviyo also tracks product collection titles, which is not part of the example GraphQL query in the demo-store. If you're using the Shopify demo-store, the addition would look like the following:
const QUERY = gql`
query product(
$country: CountryCode
$language: LanguageCode
$handle: String!
) @inContext(country: $country, language: $language) {
product: product(handle: $handle) {
# Omitted
# Adding first 10 collection titles for given product to query
collections(first: 10) {
edges {
node {
title
}
}
}
# Omitted
}
}
`;
Klaviyo has multiple ways to identify users for onsite tracking. One such way is when the account details pages is accessed or the user logs in/creates an account. In src/routes/account/index.server.jsx
add the KlaviyoIdentify
component:
import KlaviyoIdentify from '~/components/klaviyo/KlaviyoIdentify.client';
// Omitted
function AuthenticatedAccount({customer,}) {
// Omitted
return (
<Layout>
// Omitted
<KlaviyoIdentify customer={customer} />
</Layout>
);
}