<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Whoosh Blog</title>
    <link>https://getwhoosh.ai/blog/</link>
    <atom:link href="https://getwhoosh.ai/blog/rss.xml" rel="self" type="application/rss+xml" />
    <description>Shopify speed, explained properly. Core Web Vitals, third-party apps, and the revenue behind them, written for merchants who want the fix rather than the jargon.</description>
    <language>en</language>
    <lastBuildDate>Fri, 25 Sep 2026 09:00:00 GMT</lastBuildDate>
    <item>
      <title>ChatGPT Instant Checkout sends the shopper to your Shopify store</title>
      <link>https://getwhoosh.ai/blog/chatgpt-instant-checkout/</link>
      <guid isPermaLink="true">https://getwhoosh.ai/blog/chatgpt-instant-checkout/</guid>
      <pubDate>Thu, 24 Sep 2026 09:00:00 GMT</pubDate>
      <category>Agentic commerce</category>
      <description>Instant Checkout is the Buy button inside ChatGPT. On a Shopify store, that shopper usually finishes on your own URL, so the product page still has to show the price and the photo.</description>
      <enclosure url="https://getwhoosh.ai/assets/blog/chatgpt-instant-checkout/cover.png?v=160b12a0" type="image/png" length="0" />
      <content:encoded><![CDATA[<h2 id="instant-checkout-is-a-button-inside-the-chat">Instant Checkout is a button inside the chat</h2>
<p>ChatGPT Instant Checkout is a purchase the shopper finishes inside ChatGPT. They tap Buy, confirm shipping and payment, and the order is created on the merchant’s systems. The theme never loads. That is the button.</p>
<p>It is not the path a normal Shopify store is on.</p>
<p>OpenAI’s <a href="https://developers.openai.com/commerce/guides/key-concepts">developer guide</a> still limits that in-chat checkout to approved partners. The Agentic Commerce Protocol is the shared description of the cart and the payment, and that spec is open for a merchant to build against. The button and the spec are not the same thing. <a href="/blog/agentic-commerce-protocol/">What the protocol covers</a> is a different question from whether your store has the button.</p>
<p>On 29 September 2025, <a href="https://stripe.com/newsroom/news/stripe-openai-instant-checkout">Stripe’s announcement</a> said ChatGPT users in the United States could buy from US Etsy sellers in the chat. It named Shopify merchants such as Glossier, Vuori, Spanx, and SKIMS as coming soon.</p>
<p>In that flow Stripe issues a Shared Payment Token. That is a payment credential limited to one merchant and one cart total. ChatGPT passes the token to you. You charge it, you handle tax, and you ship the order.</p>
<p>You stay the merchant of record. The store is the seller. OpenAI is not.</p>
<h2 id="shopify-puts-the-payment-on-your-url">Shopify puts the payment on your URL</h2>
<p>On 24 March 2026, <a href="https://www.shopify.com/news/agentic-commerce-momentum">Shopify’s update</a> described a different finish for Shopify products.</p>
<p>ChatGPT users find the product through Shopify Catalog. They complete the purchase in an in-app browser. On desktop, ChatGPT opens your store in a separate tab.</p>
<p>An in-app browser is the browser built into the ChatGPT app. The shopper is on your URL. They have not opened Safari or Chrome themselves.</p>
<p>So which checkout is yours?</p>
<p>If you are not an approved partner, it is yours. The chat can show the product. The payment happens on the store.</p>
<p>Shopify Catalog is the product record Shopify builds from the title, price, images, variants, and inventory already in the admin. <a href="https://www.shopify.com/blog/what-is-shopify-catalog">Shopify’s Catalog article</a> describes that record as the source those agents search.</p>
<p>The same March post says products show up in ChatGPT by default through Agentic Storefronts. That is a sales channel in the Shopify admin. There is no extra app to install. Shopify says there are no transaction fees beyond standard processing rates, and the order is attributed to ChatGPT.</p>
<p><a href="https://www.shopify.com/news/shopify-open-ai-commerce">Shopify’s post from the launch day</a> had described a choice between Instant Checkout and the online store. The March post is the one that puts the payment on your store.</p>
<p>:::figure
/assets/blog/chatgpt-instant-checkout/button-vs-store.webp | Two panels: Instant Checkout as a Buy button inside ChatGPT for approved partners, beside a Shopify store where the shopper pays on the merchant URL | The button stays in the chat. The Shopify path opens your store.
:::</p>
<p>:::key
The chat can recommend the product. The page ChatGPT opens is still your product page, with your price and your photo.
:::</p>
<h2 id="what-you-turn-on-and-what-you-do-not-paste">What you turn on, and what you do not paste</h2>
<p>In the Shopify admin, open Sales channels, then Agentic. The Catalog article calls that screen the place you decide which agents may use your product data.</p>
<p>Agentic Storefronts is that channel. It is not a snippet in <code>theme.liquid</code>. Pasting a script into the theme does not turn the button on, and it does not publish the catalog.</p>
<p>Pick one product that is published, priced above zero, and in stock. Open the storefront URL a shopper would use. The theme editor preview often hides the app embeds you came to look at, so use the live URL.</p>
<p>Read the title, the price, and whether the variant can be added to cart. Those three should match the product admin. Catalog refreshes from those fields. A mismatch is a buyer who saw one price in the chat and a different price on the tab that just opened.</p>
<p>The Catalog article says a product priced at zero can be left out, and that the purchase path can still differ by channel, by product, and by the controls you set. You do not choose the sentence ChatGPT writes. An agent may also read other pages it found on the web. You do choose the title, the price, and the inventory those sentences get checked against.</p>
<h2 id="the-photo-on-the-page-that-opens">The photo on the page that opens</h2>
<p>Reload that product URL in Chrome with the cache disabled. In the Network panel, find the product image request. See whether a script from an app embed finishes before the image response completes.</p>
<p>An app embed is the script an installed app injects into the theme so a popup, a review widget, or a pixel can run in the visitor’s browser. If the image tag says <code>loading="lazy"</code>, the browser may fetch that widget while the photo waits. The person who just left ChatGPT is looking at a late photo on the page where they pay.</p>
<p>Good Largest Contentful Paint is 2.5 seconds or faster at the 75th percentile of real visitors. That is the bar in <a href="https://web.dev/articles/vitals">web.dev’s vitals documentation</a>. Largest Contentful Paint is the moment the largest element, usually the product photo, appears. <a href="https://web.dev/articles/optimize-lcp">Google’s LCP guide</a> says that image should be requested early, so the lazy attribute does not belong on the hero.</p>
<p>A purchase that never left the chat never requested that image. A lab score of the product page cannot tell you whether Instant Checkout is switched on. It tells you what the shopper hits when ChatGPT opens your URL. The same timing check, with a named file, is what you run when <a href="/blog/does-klaviyo-slow-down-shopify/">Klaviyo’s on-site script</a> is the thing in front of the photo.</p>
<p>:::figure
/assets/blog/chatgpt-instant-checkout/check-the-handoff.webp | Three steps: open Sales channels then Agentic, match the admin price to the live product URL, and confirm the hero image is requested before marketing scripts | Do these three before you treat a ChatGPT order as a theme problem.
:::</p>
<h2 id="what-you-change-on-that-page">What you change on that page</h2>
<p>Write the product title as the object the buyer asked for. Put material, size, and fit in the description. The Catalog article says agents filter on those attributes, and Shopify infers them from the fields you filled in.</p>
<p>Keep the price and the inventory current on the variant that is for sale. A sold-out variant that still looks available is a recommendation your checkout cannot complete.</p>
<p>Leave <code>theme.liquid</code> alone unless the same marketing tag is already pasted twice. On the product template, take <code>loading="lazy"</code> off the hero so the in-app browser requests the photo immediately. Move marketing scripts to after the page is usable. Leave Shopify’s payment scripts on their normal schedule, because this visit ends in your checkout.</p>
<p>Whoosh does not submit an Instant Checkout application, and it does not publish your catalog. App Sequencing holds known third-party scripts until after the product image has painted, on the page that tab opens, and it does not copy the theme. App Sequencing is US$99 a month and Everything is US$149 a month, each with a 7-day free trial.</p>
<p>Stop when the admin price matches the storefront price and the hero image request finishes before the marketing script. If ChatGPT still describes the product wrong, look at the title, the category, and the variant option names. The <a href="/faqs/">FAQs</a> cover what an install changes, and the <a href="/#preview">free speed audit</a> measures the product page a chat handoff loads.</p>]]></content:encoded>
    </item>
    <item>
      <title>Stop chasing your Shopify speed score. Measure what Google measures.</title>
      <link>https://getwhoosh.ai/blog/shopify-speed-score/</link>
      <guid isPermaLink="true">https://getwhoosh.ai/blog/shopify-speed-score/</guid>
      <pubDate>Thu, 24 Sep 2026 09:00:00 GMT</pubDate>
      <category>Core Web Vitals</category>
      <description>Shopify speed score has meant a Lighthouse average, and it now means three figures from real visitors. They are not the same number, and only one of them is the target.</description>
      <enclosure url="https://getwhoosh.ai/assets/blog/shopify-speed-score/cover.png?v=2fc2d0bb" type="image/png" length="0" />
      <content:encoded><![CDATA[<h2 id="the-name-is-used-for-two-different-numbers">The name is used for two different numbers</h2>
<p>A Shopify speed score is not one measurement. Shopify has used that name for a Lighthouse average, and it now shows something else in the admin: three figures from real visitors.</p>
<p>If you treat every 0 to 100 as the same thing, you will fix a simulation and miss the visits that actually paid.</p>
<p>The mix-up looks like this. You paste the homepage into PageSpeed and get a 54. You open the Themes page and loading is marked good. Those are not a contradiction.</p>
<p>The 54 is one simulated load of the page you pasted. The old weighting already treated the homepage as 17 percent of the score, because the product and collection pages are where people buy. The Themes rating is real visitors on those pages, over the previous seven days. Raising the homepage simulation until it says 90 does not move a rating your shoppers produced on the product page.</p>
<p>:::key
Ask which number you are looking at before you treat it as the target. Lighthouse is one simulated load. The admin report is your visitors.
:::</p>
<h2 id="the-number-shopify-retired">The number Shopify retired</h2>
<p>Shopify’s <a href="https://www.shopify.com/enterprise/blog/good-shopify-speed-score/">February 2024 explanation</a> of the old speed score says it was a weighted average of Google Lighthouse scores for three URLs: the homepage, the product page with the most traffic over the previous seven days, and the collection page with the most traffic. The same article says that score is an average of several days of Lighthouse runs, because a single run moves around, and that the score is not directly correlated with actual speed. It is weighted toward page structure and content.</p>
<p><a href="https://shopify.dev/docs/storefronts/themes/best-practices/performance/testing-for-performance">Shopify’s current theme docs</a> still describe that weighting. Home is 17 percent, the product page is 40 percent, and the collection page is 43 percent, because collection and product pages matter more to conversion than the homepage. That is why pasting only the homepage into a tester answers a question about the least important of the three pages.</p>
<p>On 31 January 2024 <a href="https://performance.shopify.com/blogs/blog/web-performance-dashboard">Shopify’s performance team</a> said the previous speed score used a single Lighthouse score, and that Lighthouse does not represent real visits. They replaced it with a web performance dashboard of real user data. The February 2024 article says the dashboard replaces the single speed score with three Core Web Vitals scores.</p>
<p>:::figure
/assets/blog/shopify-speed-score/lab-vs-field.webp | Two panels: the old Shopify speed score, one Lighthouse average of three pages, beside the web performance dashboard, three Core Web Vitals from real visitors | The retired number was a simulation. The admin report is your shoppers.
:::</p>
<h2 id="the-numbers-in-the-admin-now">The numbers in the admin now</h2>
<p>The dashboard reports how real visitors experienced the store. <a href="https://shopify.dev/docs/storefronts/themes/best-practices/performance/testing-for-performance">Shopify’s theme docs</a> say it is real user monitoring of Largest Contentful Paint, Interaction to Next Paint, and Cumulative Layout Shift, split by page type, device, and region. <a href="https://www.shopify.com/enterprise/blog/shopify-site-speed">Shopify’s 2026 guide to site speed</a> says the performance score uses the homepage, the most visited product page, and the most visited collection page, from the previous seven days.</p>
<p>The three ratings on the Themes page are loading, interactivity, and visual stability. Anything not marked good is the opportunity. With little traffic the line jumps day to day, so Shopify suggests grouping by week or month before you react to one afternoon.</p>
<p>The thresholds for “good”, from <a href="https://web.dev/articles/vitals">web.dev</a>:</p>
<p>:::stats
2.5 s | Largest Contentful Paint: the largest thing, usually the product photo, has painted | <a href="https://web.dev/articles/vitals">https://web.dev/articles/vitals</a>
200 ms | Interaction to Next Paint: the page responds to a tap | <a href="https://web.dev/articles/vitals">https://web.dev/articles/vitals</a>
0.1 | Cumulative Layout Shift: the layout does not jump while someone is reading | <a href="https://web.dev/articles/vitals">https://web.dev/articles/vitals</a>
:::</p>
<p><a href="https://developers.google.com/search/docs/appearance/core-web-vitals">Google Search uses those real-user figures as a page-experience signal</a>. It does not use a Lighthouse score of 90 as the ranking input.</p>
<h2 id="pagespeed-is-still-the-lab-test">PageSpeed is still the lab test</h2>
<p>PageSpeed Insights still gives you a 0 to 100 from Lighthouse, for the one URL you paste. <a href="https://shopify.dev/docs/storefronts/themes/best-practices/performance/testing-for-performance">Shopify’s theme docs</a> say Lighthouse scores can differ a lot from real user data, because the lab test is one device on a simulated network, and your visitors are not. Use the lab run to see which image, script, or stylesheet is in the way. Use the admin report, or Search Console’s Core Web Vitals report, to decide whether visitors are actually getting a slow page.</p>
<p>A store can look fine in one Lighthouse run and fail Largest Contentful Paint for real mobile visitors, because the test never loaded the product page those visitors land on. Another can look poor in the lab and pass for real visitors on fast phones. Read the field block at the top of PageSpeed before you read the score.</p>
<p>:::warning Do not uninstall an app to chase the retired number
Email, reviews, and chat earn money. A Lighthouse row that names them is a reason to look at when their files run, not a reason to remove the tool.
:::</p>
<h2 id="what-to-do-with-a-bad-real-user-number">What to do with a bad real-user number</h2>
<p>Start in the admin, not in a third-party tester. On the Themes page, read the three ratings: loading, interactivity, visual stability. Then open Analytics, then Reports, and look at the same three for mobile, on the product page before the homepage. The old weighting already said the product and collection pages carry most of the score. The 2026 guide still builds the admin view from those same three page types.</p>
<p>If the report says there is not enough data, you do not have a verdict yet. Group by week, as Shopify suggests, or read the field block at the top of PageSpeed for the product URL. That block is real Chrome visitors to that URL. The 0 to 100 under it is the simulation.</p>
<p>If loading is the one marked poor, the usual cause on a product page is the main image waiting on other files. Find that file in the Network panel before you install anything. <a href="/blog/does-klaviyo-slow-down-shopify/">Whether Klaviyo slows the store</a> is that check for one common script. <a href="/blog/shopify-speed-optimization-app/">Which speed app matches which job</a> is how to avoid buying a CSS minifier when the file in the way is an app script.</p>
<p>If the real-user numbers are already good, a disappointing Lighthouse score is not a project. Shopify said the single score was the wrong target. The three visitor ratings are the ones they put in its place.</p>
<p>Whoosh measures those real visits and runs a 50/50 test of conversion and bounce on your own store. It sequences known third-party scripts so they do not race the product image, and it does not copy the theme. App Sequencing is US$99 a month. Everything, which also preloads the real product image and the likely next page, is US$149 a month, with a 7-day trial on every plan.</p>]]></content:encoded>
    </item>
    <item>
      <title>What is the Agentic Commerce Protocol?</title>
      <link>https://getwhoosh.ai/blog/agentic-commerce-protocol/</link>
      <guid isPermaLink="true">https://getwhoosh.ai/blog/agentic-commerce-protocol/</guid>
      <pubDate>Wed, 23 Sep 2026 09:00:00 GMT</pubDate>
      <category>Agentic commerce</category>
      <description>The Agentic Commerce Protocol lets an AI assistant buy from a business through an API. A Shopify store uses a different standard, turned on in the admin.</description>
      <enclosure url="https://getwhoosh.ai/assets/blog/agentic-commerce-protocol/cover.png?v=e3199f02" type="image/png" length="0" />
      <content:encoded><![CDATA[<h2 id="an-assistant-can-buy-without-opening-your-website">An assistant can buy without opening your website</h2>
<p>The Agentic Commerce Protocol is a standard for an AI assistant to buy from a business through an API.</p>
<p><a href="https://docs.stripe.com/agentic-commerce/acp">Stripe’s documentation</a> describes it as a standard created by Stripe, OpenAI, and Meta. It defines how an assistant interacts with a business to complete a purchase for a buyer. The building blocks are a checkout session, a cart and a product feed, a way to pass a payment token, a way to delegate sign-in, and webhooks for the order afterwards.</p>
<p>The store keeps the checkout system and the payment processor it already uses. <a href="https://www.agenticcommerce.dev/">The protocol’s own site</a> says you create endpoints that plug into that existing backend, and that payment details can be passed to the assistant without handing over the underlying card credentials.</p>
<p>For that purchase, the shopper does not click through your theme. The assistant starts checkout by calling your endpoint. Your product page, your popup, and your review widget are not part of the call.</p>
<p>:::key
ACP is a checkout API for an AI assistant. It is not a script you add to a Shopify theme.
:::</p>
<h2 id="shopify-uses-a-different-standard">Shopify uses a different standard</h2>
<p>If your store is on Shopify, the standard Shopify shipped is not the Agentic Commerce Protocol.</p>
<p>On 11 January 2026 Shopify announced the Universal Commerce Protocol, co-developed with Google, as the open standard for AI assistants to transact with a merchant. The same announcement says ChatGPT, Microsoft Copilot, and Google’s AI surfaces are turned on from the Shopify admin, in a screen called Agentic Storefronts. Shopify’s <a href="https://www.shopify.com/news/spring-26-edition-dev">later developer note</a> says UCP covers the path from finding a product, to a cart, to checkout, and that it works with any payment processor, including Shopify Payments.</p>
<p>You do not get that by pasting ACP into <code>theme.liquid</code>. You turn the channels on in Agentic Storefronts. A developer building their own assistant is a different job: Shopify says they register an agent profile and call a public endpoint, rather than applying for access. A merchant who wants products to show up in those chats uses the admin screen.</p>
<p>:::figure
/assets/blog/agentic-commerce-protocol/acp-vs-ucp.webp | Two panels: the Agentic Commerce Protocol, a checkout API from Stripe, OpenAI, and Meta, beside Shopify’s Universal Commerce Protocol, turned on in Agentic Storefronts | Two standards. A Shopify store uses the one in the admin.
:::</p>
<h2 id="your-theme-loads-only-on-a-handoff">Your theme loads only on a handoff</h2>
<p>A purchase that finishes inside the chat never requests your product photo. The assistant called an endpoint. Your theme, your popup, and your review widget were not in that request. Making the theme faster cannot change an order that never loaded the page.</p>
<p>Some flows still send the buyer to your store to finish paying. <a href="https://www.shopify.com/news/ai-commerce-at-scale">Shopify’s announcement</a> gives the case: a furniture shopper may have to pick a delivery date and time, and the protocol’s job is to tell the assistant what that shop still needs from the person.</p>
<p>When that person lands on your store, the theme loads, the product image loads, and every app embed in the head runs. Those files compete with the photo the same way they do for any other visit. That landing is the only speed question this topic has.</p>
<h2 id="what-people-paste-and-why-it-does-nothing">What people paste, and why it does nothing</h2>
<p>The mistake is to treat this protocol like a marketing pixel. A pixel is a file the theme loads so a browser can run it. The Agentic Commerce Protocol is the opposite shape. Stripe’s docs describe endpoints your backend exposes, a checkout session the assistant opens, and a payment token the assistant passes. None of that is a script tag in <code>theme.liquid</code>.</p>
<p>If you paste a snippet into the theme and reload the product page, the Network panel will not show an assistant checking out. It will show the theme, the product image, and the app embeds you already had. The channels in Agentic Storefronts will still be off, because that screen is what turns ChatGPT, Copilot, and Google on for a Shopify store.</p>
<p>So the admin check comes before any theme edit. If a channel is off, turn it on there. If a channel is on and a buyer still lands on the product page to finish, then the theme matters, and only for that landing.</p>
<p>Good Largest Contentful Paint is <a href="https://web.dev/articles/vitals">2.5 seconds or faster at the 75th percentile</a> of real users. That number describes someone who loaded a URL. It says nothing about whether an assistant can check out through an API.</p>
<p>Open the live product page, not the theme editor preview. In Chrome DevTools, open the Network panel, turn the cache off, and reload. Find the product image.</p>
<p>You should not see an ACP call in that list, because ACP is not a file the theme loads. You should see the theme, Shopify’s own files, and the app embeds. If one of those embeds runs before the image finishes, it is in the way for the visit that got sent back to the store. <a href="/blog/does-klaviyo-slow-down-shopify/">Does Klaviyo slow down Shopify</a> is that same check aimed at one on-site script.</p>
<h2 id="what-to-do-in-the-admin">What to do in the admin</h2>
<p>Open Agentic Storefronts and see which channels are on. Shopify describes that screen as the place ChatGPT, Copilot, and Google are managed, which makes it a sales channel in the admin, not a speed app and not a file in the theme. If a channel you expected is missing, turn it on there and check again. Leave the theme alone unless you already have two copies of the same marketing script. Supporting a checkout protocol is not a snippet you paste in.</p>
<p>Then separate the two kinds of order. Place one test order that finishes in the channel, and one that comes back to the store. The first should never depend on your product page being fast. The second should. On that second visit, stop lazy-loading the main image if the buyer is waiting on it. If other apps’ scripts still run before that image, load those scripts after the page is usable. Do not delay Shopify’s checkout or payment scripts. Tap the form and add to cart on a phone.</p>
<p>Whoosh does not implement either protocol. App Sequencing loads known third-party scripts after the product image, and it does not copy the theme. Everything also preloads that image and the likely next page, and it does not prerender cart, checkout, or account. App Sequencing is US$99 a month and Everything is US$149 a month, each with a 7-day free trial. Add <code>?whoosh=disable</code> on a product URL for one view with Whoosh off.</p>
<p>If the channels are already on and the product photo paints within <a href="https://web.dev/articles/vitals">2.5 seconds</a> for real visitors, the remaining work is the catalog and which channels you have enabled. The lab number people paste into this conversation is explained in <a href="/blog/shopify-speed-score/">what a Shopify speed score is measuring</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Which Shopify speed optimization app should you install?</title>
      <link>https://getwhoosh.ai/blog/shopify-speed-optimization-app/</link>
      <guid isPermaLink="true">https://getwhoosh.ai/blog/shopify-speed-optimization-app/</guid>
      <pubDate>Tue, 22 Sep 2026 09:00:00 GMT</pubDate>
      <category>Speed apps &amp; tools</category>
      <description>Shopify speed apps do different jobs: images, critical CSS, or delaying other apps' scripts. The right one is the one that moves the file in front of your product photo.</description>
      <enclosure url="https://getwhoosh.ai/assets/blog/shopify-speed-optimization-app/cover.png?v=99fedffe" type="image/png" length="0" />
      <content:encoded><![CDATA[<h2 id="the-listings-do-different-jobs">The listings do different jobs</h2>
<p>A Shopify speed optimization app is any App Store listing that says it will make the store faster. The listings under that phrase do different work.</p>
<p>One compresses images and lazy-loads them. One writes critical CSS, the small stylesheet the browser needs before it can paint, and minifies the rest of the theme files. One changes when other apps’ scripts are allowed to run. Buying the wrong job leaves the slow file exactly where it was.</p>
<p>The right listing is the one that matches the file sitting in front of your product photo. You see that file by reloading the live product page, not by reading the word “speed” on the listing.</p>
<p>:::key
Name the file that finishes before the product photo. Then pick the listing that moves that file.
:::</p>
<h2 id="match-the-job-to-what-the-page-is-waiting-on">Match the job to what the page is waiting on</h2>
<p>Google’s bar for a good experience is the 75th percentile of real visits, not one lab run. <a href="https://web.dev/articles/vitals">Largest Contentful Paint should be within 2.5 seconds, Interaction to Next Paint within 200 milliseconds, and Cumulative Layout Shift at 0.1 or less</a>. Lighthouse cannot measure Interaction to Next Paint, because nobody is tapping the page during the test. A listing that shows you a greener Lighthouse score has not shown you a faster tap.</p>
<p>Images are the usual largest element. The <a href="https://almanac.httparchive.org/en/2025/performance">2025 Web Almanac</a> found an image was the Largest Contentful Paint element on 85.3 percent of desktop pages and 76 percent of mobile pages, and that about 16 to 17 percent of pages lazy-load that image, which delays the thing the visitor is waiting for. An app that compresses images is the right tool when the photo itself is huge. It is the wrong tool when a chat widget runs before the photo starts.</p>
<p>Scripts are the other job. <a href="https://www.shopify.com/enterprise/blog/page-load-times">Shopify’s note on page load</a> cites that Almanac for a median page carrying 280 KB of unused JavaScript on desktop and 251 KB on mobile, and every one of those files has to be downloaded and run. An app that only minifies your theme CSS does not move those files.</p>
<p>:::figure
/assets/blog/shopify-speed-optimization-app/two-jobs.webp | Two panels: image and CSS tools, which shrink files the theme owns, beside script sequencing, which changes when another app’s JavaScript is allowed to run | Shrink the photo if the photo is the problem. Delay the other app’s script if the script is the problem.
:::</p>
<h2 id="five-listings-checked-24-sep-2026">Five listings, checked 24 Sep 2026</h2>
<p>Prices are US dollars per month on the public Shopify App Store that day.</p>





















































<table><thead><tr><th>Job</th><th>Whoosh</th><th>Hyperspeed</th><th>TinySEO</th><th>Plug in Speed</th><th>Avada</th></tr></thead><tbody><tr><td>What it does</td><td>Sequences third-party scripts, preloads the real product image, prefetches the likely next page</td><td>Critical CSS, minify, image compression, lazy-load, JS defer, preload</td><td>Lazy-load and asset preload; CSS and JS minify on the higher plan</td><td>Image optimization; JS and CSS minify from the Standard plan</td><td>Theme speed work, with an expert plan that edits theme code</td></tr><tr><td>Theme</td><td>Does not copy the theme</td><td>Listing includes critical CSS and minification</td><td>Image and asset changes</td><td>Image and code minify</td><td>Expert plan is hand-written theme code</td></tr><tr><td>How it proves it</td><td>50/50 conversion test on your store</td><td>Lab scores</td><td>Image and SEO tooling</td><td>Before and after on images and files</td><td>Lab scores, expert edits on the top plan</td></tr><tr><td>Price</td><td>US$99 or US$149, 7-day trial</td><td>US$59, or US$564 a year, 7-day trial</td><td>Free tier; US$14; US$23</td><td>Free for 40 images a month; US$19; US$29; US$39</td><td>Free; Pro US$49; Expert US$99</td></tr><tr><td>Stronger when</td><td>The file in the way is another app’s script, and you want a conversion test without a theme copy</td><td>The stylesheet is what blocks first paint</td><td>You want image work and a low monthly price</td><td>You want a free image tier before you pay for minify</td><td>You want a person to edit the theme for you</td></tr></tbody></table>
<p>Whoosh is in the table because we make it. The row is the job, not a rank. Hyperspeed’s price and feature list are on its <a href="https://apps.shopify.com/hyperspeed">App Store listing</a>. TinySEO’s plans are on <a href="https://apps.shopify.com/smart-image-optimizer">its listing</a>. Plug in Speed’s plans are on <a href="https://apps.shopify.com/plug-in-speed">its listing</a>. Avada’s plans are on <a href="https://apps.shopify.com/ap-speed-optimizer">its listing</a>.</p>
<h2 id="which-listing-fits-which-problem">Which listing fits which problem</h2>
<p>If the product photo is enormous, or it is marked lazy so the browser fetches it late, start with an image tool. <a href="https://apps.shopify.com/smart-image-optimizer">TinySEO at US$14</a> and <a href="https://apps.shopify.com/plug-in-speed">Plug in Speed’s free tier</a> both do that job, and Plug in Speed is the one that lets you try image work before a minify plan. Hyperspeed also compresses images, and it is the listing to open when the blocker is render-blocking theme CSS, because critical CSS is on its listing and it is not on Whoosh’s.</p>
<p>If another app’s script runs before the photo, minifying the theme will not move that script. Whoosh sequences known third-party scripts and does not copy the theme. Avada’s Expert plan, at <a href="https://apps.shopify.com/ap-speed-optimizer">US$99</a>, is the opposite shape: someone edits the theme for you. That is a better fit when you want theme code changed, and a worse fit when you want the theme left alone.</p>
<p>Do not run two apps that both delay the same script. The form can mount late, or twice. Give each script one owner, then tap the form, the chat, and add to cart on a phone. Never defer Shopify’s checkout or payment scripts.</p>
<h2 id="check-the-page-then-the-listing">Check the page, then the listing</h2>
<p>Open the live product page, the one a shopper buys from, not the theme preview. In Chrome DevTools, open the Network panel, turn the cache off, throttle to a slow mobile connection, and reload.</p>
<p>Watch the product image request. If it is large and it finishes late with nothing else ahead of it, the job is the image: compress it, and do not lazy-load it. If a stylesheet from your theme finishes after the image should have started, the job is critical CSS. If a host that is not <code>cdn.shopify.com</code> and not your own domain is running before the image, the job is that app’s script, and a minifier will not move it.</p>
<p>Write down which of those three you saw. Then open a listing and see if its row in the table does that job. If it does a different job, it can still be a good app. It is just an answer to a question you do not have.</p>
<p>Then read the field numbers, not only the score. <a href="/blog/shopify-speed-score/">What a Shopify speed score is measuring</a> is the difference between one Lighthouse run and the real-visitor report in the admin. <a href="/blog/does-klaviyo-slow-down-shopify/">Does Klaviyo slow down Shopify</a> is this same check aimed at one marketing script.</p>
<p><a href="/case-studies/tilecloud/">TileCloud</a> recorded a 15% conversion lift. <a href="/case-studies/nakie/">Nakie</a> cut load time from 4.8 seconds to 1.35 seconds.</p>]]></content:encoded>
    </item>
    <item>
      <title>Does Klaviyo slow down your Shopify store?</title>
      <link>https://getwhoosh.ai/blog/does-klaviyo-slow-down-shopify/</link>
      <guid isPermaLink="true">https://getwhoosh.ai/blog/does-klaviyo-slow-down-shopify/</guid>
      <pubDate>Mon, 21 Sep 2026 09:00:00 GMT</pubDate>
      <category>Apps &amp; scripts</category>
      <description>Klaviyo can slow the pages shoppers load, because the app adds a script for signup forms and on-site tracking. The emails you send are not on those pages.</description>
      <enclosure url="https://getwhoosh.ai/assets/blog/does-klaviyo-slow-down-shopify/cover.png?v=934ac8e0" type="image/png" length="0" />
      <content:encoded><![CDATA[<h2 id="klaviyo-adds-a-script-to-the-pages-shoppers-load">Klaviyo adds a script to the pages shoppers load</h2>
<p>Does Klaviyo slow down a Shopify store? It can slow the pages a shopper loads.</p>
<p>Installing Klaviyo on Shopify adds a JavaScript file to the store. That file is there so a signup form can appear on the site, and so Klaviyo can record two events: someone viewed a product, and someone was active on the site. <a href="https://help.klaviyo.com/hc/en-us/articles/115005080407">Klaviyo’s setup guide</a> says those two events start tracking once you enable the app embed, and <a href="https://help.klaviyo.com/hc/en-us/articles/32004602396443">the forms guide</a> says the embed has to be on for signup forms to display.</p>
<p>The emails and texts you send are not on those pages. A speed test never loads a campaign. If PageSpeed or your own timing looks worse after you install Klaviyo, it is looking at that on-site file. It is not looking at the campaign you scheduled for Tuesday.</p>
<p>:::key
The thing that can slow the store is the script Klaviyo adds to the page. The campaigns are not on the page.
:::</p>
<h2 id="klaviyo-says-that-script-should-not-stop-the-rest-of-the-page">Klaviyo says that script should not stop the rest of the page</h2>
<p>Klaviyo’s own <a href="https://help.klaviyo.com/hc/en-us/articles/1260805704029">troubleshooting article</a> says the JavaScript is loaded asynchronously, whichever way you install it, and that this means it will not block other aspects of your site from loading. The same article says Google PageSpeed Insights and other speed reports may still flag the script as part of the load.</p>
<p>Those two sentences are the whole argument. Async means the browser is allowed to keep reading the rest of the page while Klaviyo’s file downloads. It does not mean the file is free. It still has to be fetched, and it still has to run so the form and the tracking can work. PageSpeed counts that work, which is why a store can be “not blocked” in Klaviyo’s terms and still see Klaviyo named in the report.</p>
<p>Good Largest Contentful Paint is 2.5 seconds or faster at the 75th percentile of real Chrome users, and poor is slower than 4.0 seconds. That bar is in <a href="https://web.dev/articles/vitals">web.dev’s vitals documentation</a>. Largest Contentful Paint is the moment the largest thing on the page appears. On a product page, that thing is almost always the product photo. <a href="https://developers.google.com/search/docs/appearance/core-web-vitals">Google Search uses those real-user figures as a page-experience signal</a>.</p>
<p>So the useful question is narrower than “is Klaviyo slow?” It is: on the product page you sell, does Klaviyo’s file run before that photo has painted?</p>
<p>:::figure
/assets/blog/does-klaviyo-slow-down-shopify/async-vs-flag.webp | Two panels: Klaviyo says its script loads asynchronously and should not block the rest of the page, beside PageSpeed still listing that same script in the load | Async means the browser can keep reading the page. It does not mean the file is free.
:::</p>
<h2 id="use-the-app-embed-once">Use the app embed once</h2>
<p>Klaviyo’s troubleshooting article recommends a specific install on Shopify. Enable Active on Site tracking through Klaviyo’s Shopify app embed, rather than pasting the script in by hand. Klaviyo says the embed bypasses the site’s tag manager and can load the JavaScript faster. That recommendation is in the <a href="https://help.klaviyo.com/hc/en-us/articles/1260805704029">same troubleshooting article</a>.</p>
<p>The embed is also what turns on Viewed Product and Active on Site, and what signup forms need. If you turn the embed off to chase a lab score, the forms and that tracking stop with it.</p>
<p>A second copy is the avoidable problem. <a href="https://community.klaviyo.com/marketing-30/improving-site-speed-after-integrating-with-klaviyo-1321">Klaviyo’s community guidance</a> says that if automatic injection stays on after you also install the script manually, the JavaScript is on the site twice. One embed. Not an embed plus a snippet in <code>theme.liquid</code>.</p>
<p>:::warning A second copy is a choice you can undo
If the script is in the theme and the app embed is also on, you are loading Klaviyo twice. Turn off the extra one before you touch anything else.
:::</p>
<h2 id="check-the-product-page-you-sell">Check the product page you sell</h2>
<p>Open a product page that is live, with the Klaviyo embed on. The theme editor preview often hides app embeds, so the file you came to find may not be there.</p>
<p>In Chrome DevTools, open the Network panel, turn the cache off, throttle to a slow mobile connection, and reload. Filter to JS and look for Klaviyo’s host, <code>static.klaviyo.com</code>. Then open the Performance panel and find the marker for the product photo.</p>
<p>You are looking at order. If Klaviyo’s file is still running when the photo paints, the photo waited on it. If the photo paints first and Klaviyo runs after, the script is on the page and it is not the reason the photo was late.</p>
<p>Shopify’s notes on <a href="https://shopify.dev/docs/storefronts/themes/best-practices/performance/reserve-space-app-injected">space reserved for content an app injects</a> describe a related failure: the page paints, the app’s script runs, and then new content is inserted and the layout jumps. A signup form that pops in above the price is that case. It is a layout shift, not a late photo, and it is fixed by giving the form a reserved space rather than by deleting Klaviyo.</p>
<p>:::figure
/assets/blog/does-klaviyo-slow-down-shopify/check-the-file.webp | Three steps: open the live product page, find Klaviyo in the Network panel, then see whether that file finishes before or after the product photo | The check is the order of two files, on the page you sell.
:::</p>
<h2 id="what-to-change">What to change</h2>
<p>If the photo paints before Klaviyo’s file runs, leave the install alone. The lab report mentioned it. Your shoppers’ photo did not wait on it.</p>
<p>If the photo is waiting, keep one app embed and remove any second snippet in the theme. Then load that script after the page is usable, after the load event or on the first tap, and open the signup form on a phone to confirm it still submits. Do not defer Shopify’s checkout or payment scripts while you are moving marketing tags.</p>
<p>Klaviyo’s article is the source for the install. It does not tell you to uninstall the app to satisfy PageSpeed. The forms and the on-site tracking are the reason the file exists.</p>
<p>A browse-abandonment flow is the concrete case. Klaviyo can only email someone who viewed a product and left if the page told Klaviyo they were there. That message is the script. Removing it to satisfy a lab row also removes the flow.</p>
<p>Whoosh can do the timing for known third-party scripts, including this one, without copying the theme. App Sequencing is US$99 a month. Everything, which also preloads the real product image and the likely next page, is US$149 a month. Every plan has a 7-day free trial. Add <code>?whoosh=disable</code> on a product URL when you want one view with Whoosh off.</p>
<p><a href="/case-studies/nakie/">Nakie</a> moved load time from 4.8 seconds to 1.35 seconds. <a href="/case-studies/tilecloud/">TileCloud</a> recorded a 15% conversion lift. How to read the 0 to 100 number beside this file is <a href="/blog/shopify-speed-score/">what a Shopify speed score is measuring</a>.</p>]]></content:encoded>
    </item>
  </channel>
</rss>
