<?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/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <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, for merchants who want the fix, not the jargon.</description>
    <language>en</language>
    <lastBuildDate>Tue, 06 Oct 2026 09:00:00 GMT</lastBuildDate>
    <item>
      <title>What should your Shopify homepage meta description say?</title>
      <link>https://getwhoosh.ai/blog/homepage-meta-description-shopify/</link>
      <guid isPermaLink="true">https://getwhoosh.ai/blog/homepage-meta-description-shopify/</guid>
      <pubDate>Tue, 06 Oct 2026 09:00:00 GMT</pubDate>
      <dc:creator>Edward Cameron</dc:creator>
      <category>Agentic commerce</category>
      <description>A shopper searching for sustainable clothes reads one line under your homepage link before they tap. Here is what that line should say about your whole store, where Shopify keeps it, and what the homepage has to show next.</description>
      <enclosure url="https://getwhoosh.ai/assets/blog/homepage-meta-description-shopify/cover.png?v=ce822fe5" type="image/png" length="0" />
      <content:encoded><![CDATA[<h2 id="a-shopper-searches-for-sustainable-clothes">A shopper searches for sustainable clothes</h2>
<p>Someone wants a new jumper, and they would like it to come from a brand that cares how it was made. So they type “sustainable clothing” into Google on their phone, and a column of blue links comes back with a line or two of plain words under each one.</p>
<p>They do not open every link. They read those lines and tap the one that sounds like the kind of store they had in mind.</p>
<p>Some of those links go to a single product. Others go to a store’s front door, the homepage, and the line under a homepage link has a harder job, because it has to describe everything the store sells in a sentence or two.</p>
<p><a href="https://www.shopify.com/blog/how-to-write-meta-descriptions" target="_blank" rel="noopener">Shopify’s guide to meta descriptions</a> shows how one brand handles it. Clothing brand Tentree uses its homepage line so that a shopper can see, straight from the search results, that it is a Canadian brand making sustainable clothing for men and women. Somebody who wants eco-friendly clothes gets a reason to tap before they have seen a single jumper.</p>
<p>The same thing happens when a friend mentions your store and someone types its name into Google. The link they want is your homepage, and the line under it is the first description of your store they read. That line is yours to write.</p>
<h2 id="what-the-homepage-line-is-and-where-shopify-keeps-it">What the homepage line is, and where Shopify keeps it</h2>
<p>So where does that line come from? Your homepage carries a short piece of text that nobody browsing your store ever sees. It is written for the shopper who is still in Google, deciding which link to tap. People who build websites call it a meta description.</p>
<p>Every page on your store can have one, and Shopify keeps the homepage’s line in a different place from the rest. <a href="https://help.shopify.com/en/manual/intro-to-shopify/initial-setup/setup-business-settings" target="_blank" rel="noopener">Shopify’s help page on setting up your store</a> says to go to Online Store, then Preferences, fill in the Home page title and Meta description boxes in the Social sharing image and SEO section, and click Save. The title becomes the blue link, and the meta description is the line under it.</p>
<p>A product page has its own box, in the Search engine listing section at the bottom of each product, and the <a href="https://getwhoosh.ai/blog/meta-description-example/">meta description example</a> post covers the line that goes there. The box under Preferences is the only one that speaks for the whole store.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/homepage-meta-description-shopify/write-it-under-preferences.webp" srcset="/assets/blog/homepage-meta-description-shopify/write-it-under-preferences-720.webp 720w, /assets/blog/homepage-meta-description-shopify/write-it-under-preferences-1200.webp 1200w, /assets/blog/homepage-meta-description-shopify/write-it-under-preferences.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="Four steps in the Shopify admin: open Online Store then Preferences, find Social sharing image and SEO, write what the store sells first, then save and check the page source" loading="lazy" decoding="async" width="1800" height="923"><figcaption>Products keep their own box. This is the one line that speaks for the whole store.</figcaption></figure>
<p>The same Shopify help page says this line does not change whether a search engine lists your store, but a good one can make a shopper more likely to click through. It also says each page’s title and description should be unique and should describe that page. For the homepage, that page is everything you sell.</p>
<p>Google says the same thing from its side. <a href="https://developers.google.com/search/docs/appearance/snippet" target="_blank" rel="noopener">Google’s guide to the text under search results</a> says to use a description of the whole site on the main home page, and page-level descriptions everywhere else. A jumper’s page gets its own line. The homepage gets the line about the store.</p>
<h2 id="why-the-store-has-to-be-in-the-first-few-words">Why the store has to be in the first few words</h2>
<p>Here’s the awkward part. Shopify gives you two different lengths, and they do not agree. <a href="https://help.shopify.com/en/manual/intro-to-shopify/initial-setup/setup-business-settings" target="_blank" rel="noopener">Shopify’s help page on setting up your store</a> says search engines list only about 140 characters of the line, while <a href="https://www.shopify.com/blog/how-to-write-meta-descriptions" target="_blank" rel="noopener">Shopify’s guide to meta descriptions</a> recommends about 160 characters.</p>
<p><a href="https://developers.google.com/search/docs/appearance/snippet" target="_blank" rel="noopener">Google’s guide</a> settles it a different way. It says there is no limit on how long a meta description can be, and that the line in the results is cut to fit the width of the device. So the cut lands wherever the shopper’s phone runs out of room, and neither Shopify number tells you exactly where that is.</p>
<p>What you do control is the order. Put what you sell and who it is for at the front, so the line still makes sense if it stops halfway through. In the Tentree picture, the words that matter to someone searching for sustainable clothes are sustainable clothing for men and women, and a line that opens with words like those has done its job even if the end falls off.</p>
<p>You might be tempted to go the other way. If the line has to cover the whole store, why not list every kind of product you sell? Because <a href="https://developers.google.com/search/docs/appearance/snippet" target="_blank" rel="noopener">Google’s page</a> says descriptions made of long strings of keywords do not give people a clear idea of the page, and are less likely to be shown at all. A shopper reading a run of category names learns less than one reading a plain sentence about what the store is.</p>
<p>Google also keeps the final say on which words appear. The same page says it mostly builds the line from the content on the page, and uses your meta description when it describes the page better than the rest of the content. That gives your homepage line a clear job: describe the store better than anything else on the homepage does.</p>
<aside class="callout callout-key" role="note"><p class="callout-title">Rule of thumb</p><div class="callout-body"><p>A product’s line sells one thing. The homepage line sells the <strong>store</strong>, so say what you sell and who it is for before anything else.</p></div></aside>
<h2 id="write-it-under-preferences-then-make-the-homepage-keep-its-promise">Write it under Preferences, then make the homepage keep its promise</h2>
<p>Let’s start in the admin. Open Online Store, then Preferences, and scroll down to Social sharing image and SEO. Read what is in the Meta description box before you change anything.</p>
<p>If it is empty, Google is left to borrow words from your homepage. If it holds a welcome message or a line about one bestseller, it is not telling a stranger what kind of store this is.</p>
<p>Now write one or two sentences. The first says what you sell and who it is for, in the words someone would type into Google, and the second gives one reason to choose you. Read it back and ask a single question: if the phone cut it halfway, would a stranger searching for your kind of store know they had found one? If the answer is yes, click Save.</p>
<p>Then check that the live homepage is sending it. On a computer, open your homepage, right-click an empty part of it, and choose View Page Source, which shows the raw text your store sent to the browser. Press Ctrl+F, or Cmd+F on a Mac, and search for <code>name="description"</code>, then compare the words inside the quotes next to it with the box under Preferences.</p>
<p>If they match, the homepage is set up. If Google still shows other words under your link, nothing on your store is broken, and that is Google choosing text from the page instead. You can stop editing there, because there is nothing more in the admin to change.</p>
<p>So the line did its job and the shopper tapped. What do they get?</p>
<p>They arrive on your homepage expecting the sustainable clothes they just read about, and if a signup popup or a chat widget gets its turn first, they can be staring at a form over an empty space where the first photo should be. The line promised a store, and the screen is asking for their email.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/homepage-meta-description-shopify/line-and-first-screen.webp" srcset="/assets/blog/homepage-meta-description-shopify/line-and-first-screen-720.webp 720w, /assets/blog/homepage-meta-description-shopify/line-and-first-screen-1200.webp 1200w, /assets/blog/homepage-meta-description-shopify/line-and-first-screen.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="Two panels: on the left, what the line under the homepage link tells a shopper in Google; on the right, what the homepage has to show once they tap" loading="lazy" decoding="async" width="1800" height="663"><figcaption>The line earns the tap. The first screen has to match it before any popup appears.</figcaption></figure>
<p>Whoosh does one job at this moment. Smart App Loading holds your other apps, like that popup, until the first photo on the homepage is on screen, and it does that without removing those apps or copying your theme. Smart App Loading is US$99 a month on the <a href="https://apps.shopify.com/whoosh" target="_blank" rel="noopener">Shopify App Store</a>, with a 7-day free trial. <a href="https://getwhoosh.ai/case-studies/nakie">Nakie’s published case study</a> shows the store’s load time falling from 4.8 seconds to 1.35 seconds.</p>
<p>If your popup comes from Klaviyo, <a href="https://getwhoosh.ai/blog/does-klaviyo-slow-down-shopify/">the Klaviyo post</a> walks through how to see which arrives first, the photo or the form. Or run our <a href="https://getwhoosh.ai/#preview">speed check</a> on your homepage and see what reaches the screen before that first photo. When the line under the link and the first screen say the same thing, the shopper who tapped finds the store they were promised.</p>
<p>This post first appeared on the <a href="https://getwhoosh.ai/blog/homepage-meta-description-shopify/">Whoosh Blog</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>What is a ChatGPT shopping assistant?</title>
      <link>https://getwhoosh.ai/blog/chatgpt-shopping-assistant/</link>
      <guid isPermaLink="true">https://getwhoosh.ai/blog/chatgpt-shopping-assistant/</guid>
      <pubDate>Sun, 04 Oct 2026 09:00:00 GMT</pubDate>
      <dc:creator>Edward Cameron</dc:creator>
      <category>Agentic commerce</category>
      <description>Someone asks ChatGPT for a rain jacket and gets a row of product cards. If you sell on Shopify, your jacket can already be one of them, built from your admin. When she taps it, your own product page opens, and that is the page to check.</description>
      <enclosure url="https://getwhoosh.ai/assets/blog/chatgpt-shopping-assistant/cover.png?v=cef99d81" type="image/png" length="0" />
      <content:encoded><![CDATA[<h2 id="she-asks-chatgpt-for-a-rain-jacket">She asks ChatGPT for a rain jacket</h2>
<p>Picture someone who keeps getting caught in the drizzle on the walk to work. She opens ChatGPT on her phone and asks for <a href="https://www.shopify.com/blog/ai-chatgpt" target="_blank" rel="noopener">a rain jacket for less than $200</a>.</p>
<p>ChatGPT answers the way a good shop assistant would. It shows her a short row of jackets as cards, each with a photo, a name, and a price, and one of those jackets is yours.</p>
<p>That is what people mean by a ChatGPT shopping assistant. It lives in ChatGPT rather than on your store, and it finds jackets, lines them up, and lets her pick one before she has ever visited a shop. If you sell on Shopify, your products can already be in that row.</p>
<p>She likes the look of your jacket, so she taps it. Your own product page opens, and the photo she just saw in the chat has to be the <strong>first</strong> thing she sees there too.</p>
<h2 id="how-your-jacket-gets-onto-that-card">How your jacket gets onto that card</h2>
<p>So where did ChatGPT get your jacket’s photo and price? From you, mostly. <a href="https://www.shopify.com/blog/what-is-shopify-catalog" target="_blank" rel="noopener">Shopify’s article on Catalog</a> says it starts from what you already keep in the admin: the title, description, photos, category, sizes and colours, price, and stock.</p>
<p>Shopify gathers those details from eligible stores into one product list for these chats, and that list is called Shopify Catalog. When she asked for a jacket, that list is where ChatGPT went looking.</p>
<p>Then ChatGPT does the choosing. The same article says each chat decides which products to show and how to rank them, weighing her request, how good your product details are, availability, price, shipping, and a few other things. Being in the list does not guarantee your jacket makes the row.</p>
<p>So you write the card, and ChatGPT decides whether she sees it.</p>
<p>How did your store get into that list without you doing anything? On 24 March 2026, <a href="https://www.shopify.com/news/agentic-commerce-momentum" target="_blank" rel="noopener">Shopify said</a> products show up in ChatGPT by default through Agentic Storefronts, the admin setting that shares your products with the chats.</p>
<p><a href="https://www.shopify.com/news/agentic-commerce-momentum" target="_blank" rel="noopener">That same post</a> says there are no separate integrations, no apps, and no transaction fees beyond the standard processing rates you already pay on any sale.</p>
<p>Next up is the tap. <a href="https://www.shopify.com/news/agentic-commerce-momentum" target="_blank" rel="noopener">Shopify’s March post</a> also says ChatGPT opens your store in a browser inside the app, and on a computer it opens your store in a separate tab.</p>
<p>Either way, she is on your real product page now, with your theme and every app you have installed. <a href="https://www.shopify.com/blog/ai-chatgpt" target="_blank" rel="noopener">Shopify’s post on ChatGPT</a> says checkout finishes on your own site, so your prices, your payment methods, and your brand stay as they are.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/chatgpt-shopping-assistant/from-admin-to-tap.webp" srcset="/assets/blog/chatgpt-shopping-assistant/from-admin-to-tap-720.webp 720w, /assets/blog/chatgpt-shopping-assistant/from-admin-to-tap-1200.webp 1200w, /assets/blog/chatgpt-shopping-assistant/from-admin-to-tap.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="Four steps: you fill in the jacket in the Shopify admin, Shopify shares it in its product list, ChatGPT picks which cards to show, and her tap opens your product page" loading="lazy" decoding="async" width="1800" height="923"><figcaption>You control the first step. ChatGPT runs the third. The last one is your own product page.</figcaption></figure>
<h2 id="what-you-can-leave-alone-and-what-the-tap-opens">What you can leave alone, and what the tap opens</h2>
<p>This is the useful part, because most of the work is already done. You do not install an app, you do not upload a spreadsheet of your products, and you do not write special descriptions for ChatGPT.</p>
<p>The details you keep for your own store are the details the card is built from.</p>
<p><a href="https://www.shopify.com/blog/how-agentic-commerce-works" target="_blank" rel="noopener">Shopify’s guide to how this works</a> says it is live for Shopify stores selling to US buyers, whatever country the store is in, and there is no monthly subscription for the channel.</p>
<p>You may have read about a Buy button that takes payment right inside the chat. That is <a href="https://getwhoosh.ai/blog/chatgpt-instant-checkout/">a separate buy button for approved stores</a>, and for ChatGPT on Shopify, the same guide says checkout happens on your own store, with no separate switch to turn on.</p>
<p>What you still have to get right is the jacket, in two places. The first is the admin, because the card reads from it. <a href="https://www.shopify.com/blog/what-is-shopify-catalog" target="_blank" rel="noopener">Shopify’s Catalog article</a> asks for photos of the product itself, not only lifestyle shots, and for price and stock that are kept current.</p>
<p>That second request matters more than it sounds. If the card told her the jacket is in stock at a price, and your page says something else, she has a reason to go back to the chat and tap someone else’s.</p>
<p>The second place is the page the tap opens, and this is where the two endings split.</p>
<p>In the good ending, your product page opens and the jacket photo is the first thing on screen. The price matches the card, her size is there, and she keeps shopping on your store.</p>
<p>In the other ending, a signup popup lands before the photo does, or the first photo is a model on a hillside where the jacket is hard to make out. She came from a card that showed her exactly what she wanted, and now she has to look for it.</p>
<p>I know what you’re thinking. ChatGPT already showed her the jacket, so why does the page matter that much? Because the chat only found it. The sale happens on your page, on her phone, in a small browser, with every app you have installed loading as the page opens.</p>
<aside class="callout callout-key" role="note"><p class="callout-title">Rule of thumb</p><div class="callout-body"><p>ChatGPT builds the card from your admin and decides whether to show it. When she taps, your product page opens, so the jacket photo has to be on screen before anything else.</p></div></aside>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/chatgpt-shopping-assistant/two-endings.webp" srcset="/assets/blog/chatgpt-shopping-assistant/two-endings-720.webp 720w, /assets/blog/chatgpt-shopping-assistant/two-endings-1200.webp 1200w, /assets/blog/chatgpt-shopping-assistant/two-endings.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="Two panels: on the left, the product page opens with the jacket photo first and a matching price; on the right, a popup or a hillside photo comes first and the price differs" loading="lazy" decoding="async" width="1800" height="663"><figcaption>Both endings start with the same tap. Which one she gets depends on your admin and your product page.</figcaption></figure>
<h2 id="check-your-jacket-the-way-she-will-see-it">Check your jacket the way she will see it</h2>
<p>OK, so here is the check, in the order you would click it, on one product. Pick the jacket, or whichever product you would most like to see in that row.</p>
<ol>
<li>
<p>In the Shopify admin, open Settings, then Sales channels, then Agentic Storefronts, which is where <a href="https://www.shopify.com/blog/how-agentic-commerce-works" target="_blank" rel="noopener">Shopify’s guide</a> says you manage these chats, and make sure ChatGPT is on.</p>
</li>
<li>
<p>Open the jacket in Products and read it the way she would. Does the title say rain jacket, or only a name you made up? Check the price and the stock for each size, and make sure the first photo shows the jacket itself.</p>
</li>
<li>
<p>Open the live product page on your phone, using the address a customer would use rather than the theme editor. Reload it and watch what lands first. The jacket photo should be on screen before any popup or chat bubble.</p>
</li>
</ol>
<p>If the photo is slow to appear even with nothing in front of it, the file may be bigger than her phone needs, and <a href="https://getwhoosh.ai/blog/shopify-image-optimization/">why image optimization still leaves photos slow</a> walks through that one.</p>
<p>That last look is where Whoosh fits. It does not put your jacket in ChatGPT, and it does not choose which jackets ChatGPT shows.</p>
<p>What it does is AI Page Preloading. It learns from real visits which photo shoppers see first on each product page, then tells the browser to fetch that photo early, so the jacket is ready sooner when she lands from the chat.</p>
<p>AI Page Preloading is US$99 a month on the <a href="https://apps.shopify.com/whoosh" target="_blank" rel="noopener">Shopify App Store</a>, with a 7-day free trial.</p>
<p>You can stop when the admin matches the page and the jacket is the first thing she sees. If a popup still gets there first, the next suspect is the app that runs that popup.</p>
<p>This post first appeared on the <a href="https://getwhoosh.ai/blog/chatgpt-shopping-assistant/">Whoosh Blog</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>What does a meta description generator do for a Shopify product?</title>
      <link>https://getwhoosh.ai/blog/meta-description-generator/</link>
      <guid isPermaLink="true">https://getwhoosh.ai/blog/meta-description-generator/</guid>
      <pubDate>Sat, 03 Oct 2026 09:00:00 GMT</pubDate>
      <dc:creator>Edward Cameron</dc:creator>
      <category>Agentic commerce</category>
      <description>Your spatula's Google line is blank, so you try a meta description generator. Here is what it drafts, where Shopify keeps that line, and the one read you do before you save it.</description>
      <enclosure url="https://getwhoosh.ai/assets/blog/meta-description-generator/cover.png?v=b8882753" type="image/png" length="0" />
      <content:encoded><![CDATA[<h2 id="the-spatulas-google-line-is-blank-so-you-try-a-generator">The spatula’s Google line is blank, so you try a generator</h2>
<p>You sell a thin stainless steel spatula, and the line that can sit under its link in Google is blank. A meta description generator is a tool that drafts that line for you from the product details you give it. Take the draft, but read it against the spatula’s page before you save, because <a href="https://developers.google.com/search/docs/appearance/snippet" target="_blank" rel="noopener">Google’s page on snippets</a> says it uses your line when it describes the page better than the other words on the page do.</p>
<p>So where is that blank? In your Shopify admin, each product has a section near the bottom called Search engine listing, and it holds one box for this line. Whatever you type there stays off the product page itself. It is written for the shopper still in Google, reading a column of links and deciding which one to tap.</p>
<p>People who build websites call that line a meta description. If you leave the box empty, Shopify does not leave the spatula with nothing. <a href="https://www.shopify.com/blog/how-to-write-meta-descriptions" target="_blank" rel="noopener">Shopify’s guide to meta descriptions</a> says Google can build the line from words visible on the page, and on a product the product description can stand in for it.</p>
<p>So the spatula already gets some line. What a generator offers is a line somebody chose, in place of whatever your product description happens to open with.</p>
<h2 id="what-a-generator-does-with-the-spatula">What a generator does with the spatula</h2>
<p>OK, so what happens when you press the button? A web tool asks you to type a few things first: the product’s name, a sentence or two about it, and sometimes a word you want included. An app installed in your Shopify admin can read the product’s details from your store instead, so you can draft a line without pasting anything.</p>
<p>Then it writes a sentence aimed at a set length. <a href="https://www.shopify.com/blog/how-to-write-meta-descriptions" target="_blank" rel="noopener">Shopify’s guide</a> recommends about 160 characters, and says to put the most important information first because Google may show a shorter line.</p>
<p>Here’s the catch. A generator can only work from what it was given. If your spatula’s description says it has a thin edge and is dishwasher safe, a draft can say so. If the description is two vague words, the draft has nothing specific to say, and you get a sentence that would fit under any spatula on any store.</p>
<p>Compare that with the line <a href="https://www.shopify.com/blog/how-to-write-meta-descriptions" target="_blank" rel="noopener">Shopify’s guide</a> gives for this exact product: “Stainless steel spatula with a thin edge for flipping. Dishwasher safe and ships in 24 hours.” The first sentence says what it is, and the second says why to buy it from this store. A shopper can check every word of it on the page.</p>
<p>The other habit to watch is the phrase someone would type into Google, like “metal spatula”. People call that phrase a keyword. Hand a generator that phrase and it will work it in, which is fine once. <a href="https://developers.google.com/search/docs/appearance/snippet" target="_blank" rel="noopener">Google’s page</a> says a description made of a long string of those phrases is less likely to be shown, so a draft that reads like a list of searches is the one to throw out.</p>
<h2 id="why-you-keep-the-draft-and-when-you-write-it-yourself">Why you keep the draft, and when you write it yourself</h2>
<p>A draft is useful because the blank box is the hardest part. You get a sentence in roughly the right shape and length, and you edit it instead of staring at nothing. The generator writes the sentence. You know whether it is <strong>true</strong>.</p>
<p>For one spatula, though, the draft does not save you much. Two sentences about a product you sell take a few minutes, and <a href="https://www.shopify.com/blog/how-to-write-meta-descriptions" target="_blank" rel="noopener">Shopify’s guide</a> says most small brands are better off writing these lines by hand, especially on their highest-priority pages.</p>
<p>Where a generator earns its place is a big catalog. <a href="https://www.shopify.com/blog/how-to-write-meta-descriptions" target="_blank" rel="noopener">Shopify’s guide</a> says generators are for brands with thousands of products and not enough people to write a unique line for each one. <a href="https://developers.google.com/search/docs/appearance/snippet" target="_blank" rel="noopener">Google’s page</a> agrees that a big catalog can build a line from each product’s own details, as long as the result reads like a person wrote it and differs from page to page.</p>
<p>That bulk job is what SEO HERO AI Meta Tag Generator is built for. Its <a href="https://apps.shopify.com/ai-meta-tag-generator" target="_blank" rel="noopener">App Store listing</a> says it drafts meta titles and meta descriptions for products, can do collections and pages, and has a free plan with 25 one-time credits. If you have hundreds of products and a blank box on every one, an app like that is the better buy over writing each line by hand.</p>
<p>I know what you’re thinking. Will a better line push the spatula up Google? <a href="https://www.shopify.com/blog/how-to-write-meta-descriptions" target="_blank" rel="noopener">Shopify’s guide</a> says meta descriptions are not a direct ranking factor. The line does its work after the search, when the shopper is choosing which link to tap, and that is why it has to describe the spatula and not the whole kitchen range.</p>
<aside class="callout callout-key" role="note"><p class="callout-title">Rule of thumb</p><div class="callout-body"><p>The generator drafts the line. Google decides whether to <strong>use</strong> it, and reaches for it when it describes the spatula better than the page does. Read every draft against the product before you save.</p></div></aside>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/meta-description-generator/draft-versus-check.webp" srcset="/assets/blog/meta-description-generator/draft-versus-check-720.webp 720w, /assets/blog/meta-description-generator/draft-versus-check-1200.webp 1200w, /assets/blog/meta-description-generator/draft-versus-check.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="Two panels: on the left, what a meta description generator brings to the spatula's line; on the right, what the store owner checks against the product page before saving" loading="lazy" decoding="async" width="1800" height="663"><figcaption>The generator saves you the blank box. Only you can say whether the line is true of the spatula.</figcaption></figure>
<h2 id="read-the-draft-against-the-spatulas-product-page-then-save">Read the draft against the spatula’s product page, then save</h2>
<p>Let’s start with the spatula, in the order you would click. Open the live product page in one tab, and the generator in another, so you are reading the draft against the page a shopper will land on.</p>
<p>Read the draft and ask three questions. Do the first words name the spatula, in the words someone would search for? Is every claim in it, like the thin edge or the dishwasher, also on the page? And would it be wrong if you pasted it under a different product in your store?</p>
<p>If the answer to all three is yes, go to your Shopify admin. Open Products, click the spatula, scroll to Search engine listing, and click Edit website SEO or the pencil icon, which is the way in that <a href="https://www.shopify.com/blog/how-to-write-meta-descriptions" target="_blank" rel="noopener">Shopify’s guide</a> gives. Paste the line, fix anything the draft got wrong, and save the product.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/meta-description-generator/read-then-save.webp" srcset="/assets/blog/meta-description-generator/read-then-save-720.webp 720w, /assets/blog/meta-description-generator/read-then-save-1200.webp 1200w, /assets/blog/meta-description-generator/read-then-save.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="Four steps: open the live spatula product page, read the generated draft against it, paste it into Search engine listing in the Shopify admin, then save and do the next best seller" loading="lazy" decoding="async" width="1800" height="923"><figcaption>The read in step two is the part a generator cannot do for you.</figcaption></figure>
<p>For the rest of the store, split the work. <a href="https://developers.google.com/search/docs/appearance/snippet" target="_blank" rel="noopener">Google’s page</a> says to prioritise the critical pages, like your homepage and popular pages, if you cannot write a line for every one. Write those yourself, and note that your homepage line lives under Online Store, then Preferences, in the Social sharing image and SEO section.</p>
<p>Then let a bulk tool draft the rest of the products, and give each draft the same three questions before it goes live.</p>
<p>You can stop when every product you push has a line you have read against its page. If you would rather write the spatula’s line from scratch, the <a href="https://getwhoosh.ai/blog/meta-description-example/">meta description example</a> post shows the shape. To confirm the live page is sending the line you saved, the <a href="https://getwhoosh.ai/blog/meta-description-checker/">meta description checker</a> post shows where to look.</p>
<p>Now, the line earned the tap. What does the shopper see next? They open the spatula’s page expecting the thin edge they just read about, and the photo has to be there. If a chat bubble or a reviews widget takes its turn first, they can be looking at an empty space where the spatula should be.</p>
<p>That is the one job Whoosh does here. Smart App Loading holds your other apps until the product photo is on screen, and it does that without removing those apps or copying your theme. It is US$99 a month with a 7-day free trial, and <a href="https://getwhoosh.ai/case-studies/nakie">Nakie’s published case study</a> shows that store’s load time falling from 4.8 seconds to 1.35 seconds.</p>
<p>Run our <a href="https://getwhoosh.ai/#preview">speed check</a> on the spatula’s link to see what reaches the page before its photo does. If the photo is first and the line under the link matches the product, the shopper who tapped gets the spatula they read about.</p>
<p>This post first appeared on the <a href="https://getwhoosh.ai/blog/meta-description-generator/">Whoosh Blog</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>What does a meta description checker tell you about your Shopify store?</title>
      <link>https://getwhoosh.ai/blog/meta-description-checker/</link>
      <guid isPermaLink="true">https://getwhoosh.ai/blog/meta-description-checker/</guid>
      <pubDate>Thu, 01 Oct 2026 09:00:00 GMT</pubDate>
      <dc:creator>Edward Cameron</dc:creator>
      <category>Agentic commerce</category>
      <description>You paste your spatula's link into a meta description checker and get a length score. Here is what that score reads, where Shopify already shows the same line, and why it is not the line Google prints.</description>
      <enclosure url="https://getwhoosh.ai/assets/blog/meta-description-checker/cover.png?v=bfbee629" type="image/png" length="0" />
      <content:encoded><![CDATA[<h2 id="you-paste-the-spatulas-link-into-a-checker">You paste the spatula’s link into a checker</h2>
<p>You sell a thin stainless steel spatula, and someone has told you to check its meta description. So you copy the product’s link from your browser, paste it into a free checker, and press the button. A moment later you get a character count and a score.</p>
<p>What did it just check? Your spatula’s page carries one line of text that shoppers never see on your store. It is written for the person still in Google, and it is the line that can appear under your blue link when the spatula turns up in a search.</p>
<p>People who build websites call that line a meta description. A meta description checker is a tool that finds it on a page, counts its characters, and grades the count against a guideline.</p>
<p>That score is a grade for one sentence. It only means something once you know where that sentence lives, and who decides whether a shopper ever reads it.</p>
<h2 id="what-the-checker-reads-and-where-shopify-already-shows-it">What the checker reads, and where Shopify already shows it</h2>
<p>OK, so where does the checker find the line? It opens the spatula’s page the way a browser does and reads the hidden part at the top, above the photo and the price. Your line sits there in one short piece of code that a shopper’s screen never draws.</p>
<p>Then it counts. <a href="https://www.shopify.com/blog/how-to-write-meta-descriptions" target="_blank" rel="noopener">Shopify’s guide to meta descriptions</a> recommends about 160 characters and says Google may show a shorter line, so when a checker flags a long one, it is warning you that the end might get cut.</p>
<p>You do not need a checker to read that line for one product. In your Shopify admin, open Products, click the spatula, and scroll to the Search engine listing section, which is where <a href="https://www.shopify.com/blog/how-to-write-meta-descriptions" target="_blank" rel="noopener">Shopify’s guide</a> says the line lives. The box there shows what you saved.</p>
<p>If that box is empty and you want help with the words, the <a href="https://getwhoosh.ai/blog/meta-description-example/">meta description example</a> post covers how to write one. This post is about checking it.</p>
<p>The admin shows what you saved. The live page is what the checker reads, and you can look at it too. On a computer, open the spatula’s product page, right-click an empty part of it, and choose View Page Source. That opens the raw text your store sent to the browser, before any of it became a page.</p>
<p>Press Ctrl+F, or Cmd+F on a Mac, and search for <code>name="description"</code>. The line near the top looks like <code>&#x3C;meta name="description" content="..."></code>, with your words where the dots are. Those are the words the page is actually sending.</p>
<p>If the words in the page source match the admin box, the spatula is set up. A checker given the same link is reading those same words, so for one product the only new thing it hands you is the count.</p>
<h2 id="why-a-good-score-is-not-the-line-google-prints">Why a good score is not the line Google prints</h2>
<p>Here’s the catch. A passing score tells you the spatula has a line and that it is a sensible length. It does not tell you what a shopper will read under your link.</p>
<p><a href="https://developers.google.com/search/docs/appearance/snippet" target="_blank" rel="noopener">Google’s page on snippets</a> says it mostly builds that text from the page itself, and uses your meta description when it describes the page better than the other words on the page. The same page says one page can show different text for different searches, so “metal spatula” and “spatula for eggs” might each get their own line. If your page source matches the admin and Google still shows other words, nothing on your store is broken. That is Google choosing.</p>
<p>Length works the same way. <a href="https://developers.google.com/search/docs/appearance/snippet" target="_blank" rel="noopener">Google says</a> there is no limit on how long a meta description can be, and that the text is cut to fit the width of the screen. The 160 characters a checker grades against is <a href="https://www.shopify.com/blog/how-to-write-meta-descriptions" target="_blank" rel="noopener">Shopify’s recommendation</a>, not a rule Google enforces.</p>
<p>I know what you’re thinking. If Google can swap my words anyway, why bother checking?</p>
<p>Because Google can only pick your line if there is one, and <a href="https://developers.google.com/search/docs/appearance/snippet" target="_blank" rel="noopener">Google’s page</a> says it reaches for yours when it describes the page better. A missing line, or one that trails off past the cut, is the part you control, and that is what the score is good for.</p>
<aside class="callout callout-key" role="note"><p class="callout-title">Rule of thumb</p><div class="callout-body"><p>The checker grades the line you <strong>wrote</strong>. Google decides the line it prints. Use the score to find missing and overlong lines, then stop tuning.</p></div></aside>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/meta-description-checker/score-versus-google.webp" alt="Two panels: on the left, what a meta description checker can tell you about the spatula's page; on the right, what Google decides in the search results" loading="lazy" decoding="async" width="1800" height="663"><figcaption>Use the score for the left side. The right side stays with Google, whatever the score says.</figcaption></figure>
<h2 id="check-the-spatulas-product-page-then-scan-the-rest">Check the spatula’s product page, then scan the rest</h2>
<p>Let’s start with the spatula, in the order you would click. Read the Search engine listing box in the admin, then open the live product page, choose View Page Source from the right-click menu, and search for the description line. If the two match and the line is not running far past the recommendation, the spatula is done.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/meta-description-checker/check-the-spatula.webp" alt="Four steps: read the Search engine listing box in the Shopify admin, open View Page Source on the live product page, find the description line, then compare the two" loading="lazy" decoding="async" width="1800" height="923"><figcaption>If the admin and the page source match, the page is set up, and any other words in Google are Google's choice.</figcaption></figure>
<p>That is fine for one product. A whole kitchen range is a different job, because <a href="https://www.shopify.com/blog/how-to-write-meta-descriptions" target="_blank" rel="noopener">Shopify’s guide</a> shows the same box on every product, collection, webpage, and blog post. The homepage has its own, under Online Store, then Preferences, in the Social sharing image and SEO section.</p>
<p>Opening each of those to read one box is where a checker that scans the store earns its place. <a href="https://apps.shopify.com/seo-health-checker" target="_blank" rel="noopener">Razor Growth SEO Tech Audit</a> is one Shopify app that looks across products, collections, pages, and articles, and lists the ones with missing, too long, or too short titles and descriptions.</p>
<p>It exports that list as a spreadsheet, and its App Store listing shows the price as free. For the catalog, that is the better buy, because it shows which pages are missing a line in one pass, which no amount of pasting the spatula’s link will do.</p>
<p>It still grades the line you saved, not the one Google prints. You can stop once every page you sell from has its own line and the page source matches the admin.</p>
<p>Now, the line earned the tap. What does the shopper see next? They open the spatula’s product page expecting the spatula, and if a chat widget or a signup popup gets its turn first, they can be looking at an empty space where the photo should be.</p>
<p>That is the one job Whoosh does here. Smart App Loading holds your other apps until the product photo is on screen, without removing those apps or copying your theme. It is US$99 a month with a 7-day free trial, and <a href="https://getwhoosh.ai/case-studies/nakie">Nakie’s published case study</a> shows the store’s load time falling from 4.8 seconds to 1.35 seconds.</p>
<p>To see what reaches the spatula’s page before its photo does, run our <a href="https://getwhoosh.ai/#preview">speed check</a> on that one link. If the photo is first and the line in the page source matches the admin, the shopper who tapped gets the spatula they read about.</p>
<p>This post first appeared on the <a href="https://getwhoosh.ai/blog/meta-description-checker/">Whoosh Blog</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>What is a good meta description example for a Shopify product?</title>
      <link>https://getwhoosh.ai/blog/meta-description-example/</link>
      <guid isPermaLink="true">https://getwhoosh.ai/blog/meta-description-example/</guid>
      <pubDate>Tue, 29 Sep 2026 09:00:00 GMT</pubDate>
      <dc:creator>Edward Cameron</dc:creator>
      <category>Agentic commerce</category>
      <description>A shopper searching for a spatula reads the short line under each Google link before they tap. Here is Shopify's own example of that line, why the first words matter most, and where you type yours.</description>
      <enclosure url="https://getwhoosh.ai/assets/blog/meta-description-example/cover.png?v=326c3557" type="image/png" length="0" />
      <content:encoded><![CDATA[<h2 id="a-shopper-searches-for-a-spatula">A shopper searches for a spatula</h2>
<p>Someone is making breakfast, the eggs are sticking, and they type “thin spatula” into Google on their phone. They get a column of blue links, and under each one sits a line or two of plain words. Nobody opens every link. They read those lines and tap the one that sounds like the spatula they want.</p>
<p>If your spatula is one of those links, the words under it are something you get to write. <a href="https://www.shopify.com/blog/how-to-write-meta-descriptions" target="_blank" rel="noopener">Shopify’s guide to meta descriptions</a> gives a good one for exactly this product: “Stainless steel spatula with a thin edge for flipping. Dishwasher safe and ships in 24 hours.”</p>
<p>That is the meta description example worth copying the shape of. The first sentence says what it is, in the words someone would search for. The second says why to buy it from you. A stranger reading it on a small screen knows this page is the spatula before they tap.</p>
<h2 id="what-that-line-is-and-where-shopify-keeps-it">What that line is, and where Shopify keeps it</h2>
<p>So where does the line under the link come from? Each product in your Shopify admin has a box for it, in a section near the bottom of the product called Search engine listing. Whatever you type there stays off the product page itself, so a shopper looking at the spatula on your store never sees it.</p>
<p>It is written for the other shopper, the one still in Google with sticking eggs, deciding which link to tap. People who build websites call that line a meta description.</p>
<p>Shopify already covers you if the box is empty. <a href="https://www.shopify.com/blog/how-to-write-meta-descriptions" target="_blank" rel="noopener">Shopify’s guide</a> says Google can build the line from what is visible on the page, and on a product the product description can stand in for it. So your spatula already has something under its link. The question is whether it is a line you chose, or the first words of a description you wrote for someone who had already arrived.</p>
<p>Google also makes the final call on which words appear. <a href="https://developers.google.com/search/docs/appearance/snippet" target="_blank" rel="noopener">Google’s page on snippets</a> says it mostly picks the words from the page itself, and uses your meta description when it describes the page better than the rest of the content does. That gives you a clear job: write the line that describes the spatula better than anything else on the page.</p>
<h2 id="why-the-first-words-have-to-name-the-spatula">Why the first words have to name the spatula</h2>
<p>Here’s the awkward part. The shopper may never see the end of your line. <a href="https://developers.google.com/search/docs/appearance/snippet" target="_blank" rel="noopener">Google’s page</a> says there is no limit on how long a meta description can be, but the line in the results is cut to fit the width of the device, and a phone held in one hand is not very wide.</p>
<p><a href="https://www.shopify.com/blog/how-to-write-meta-descriptions" target="_blank" rel="noopener">Shopify’s guide</a> recommends about 160 characters, and says to put the most important information first because Google may show a shorter line. Writing more does not get you penalised. It only means the useful part can fall off the end.</p>
<p>Read the spatula example again with that in mind. “Stainless steel spatula with a thin edge for flipping” comes first, and it is the part that answers the person with the sticking eggs.</p>
<p>“Dishwasher safe and ships in 24 hours” is the reason to buy it from you, and it is a bonus if it fits. If the phone cuts the line after “flipping”, the shopper still knows this link is the spatula.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/meta-description-example/front-of-the-line.webp" srcset="/assets/blog/meta-description-example/front-of-the-line-720.webp 720w, /assets/blog/meta-description-example/front-of-the-line-1200.webp 1200w, /assets/blog/meta-description-example/front-of-the-line.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="Two panels splitting Shopify's spatula example: the front names a stainless steel spatula with a thin edge, the end says dishwasher safe and ships in 24 hours" loading="lazy" decoding="async" width="1800" height="663"><figcaption>If the phone cuts the line, the front still tells the shopper this link is the spatula.</figcaption></figure>
<p>I know what some of you are thinking. If Google can ignore my line anyway, why bother writing one? Because Google’s page says it reaches for your line when it describes the page better, and a sentence that opens with the product and what it does gives Google that reason. Leave the box blank and you get whatever your product description happens to start with.</p>
<p>The same goes for pasting one line across the whole store. <a href="https://developers.google.com/search/docs/appearance/snippet" target="_blank" rel="noopener">Google’s page</a> says identical descriptions on every page are not helpful, because each page turns up in results on its own. A line about your whole kitchen range, sitting under the spatula’s link, does not tell the shopper this one is the spatula.</p>
<aside class="callout callout-key" role="note"><p class="callout-title">Rule of thumb</p><div class="callout-body"><p>Google chooses whether to show your line. You choose what it says <strong>first</strong>. Put the product, in the words a shopper would type, at the front.</p></div></aside>
<h2 id="write-it-in-the-admin-then-make-the-page-keep-the-promise">Write it in the admin, then make the page keep the promise</h2>
<p>Let’s start with the spatula itself. In your Shopify admin, open Products and click the product, then scroll to the Search engine listing section and click Edit website SEO or the pencil icon, which is the way in that <a href="https://www.shopify.com/blog/how-to-write-meta-descriptions" target="_blank" rel="noopener">Shopify’s guide</a> gives.</p>
<p>Look at what is in the meta description box before you type anything. If it is empty, Google is left to borrow from the page. If it is the same line you used on another product, it is not telling the shopper which one this is.</p>
<p>Now write two sentences. The first says what it is, in the words someone would search for, and the second says why to buy it from you. Read it back and ask one question: if the phone cut it after the first sentence, would a stranger know this page is the spatula? If yes, save the product.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/meta-description-example/write-it-in-the-admin.webp" srcset="/assets/blog/meta-description-example/write-it-in-the-admin-720.webp 720w, /assets/blog/meta-description-example/write-it-in-the-admin-1200.webp 1200w, /assets/blog/meta-description-example/write-it-in-the-admin.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="Four steps in the Shopify admin: open the product, find Search engine listing, click Edit website SEO, then write the product first and save" loading="lazy" decoding="async" width="1800" height="923"><figcaption>Collections, pages and blog posts have the same box. The homepage sits under Online Store, then Preferences.</figcaption></figure>
<p>Collections, pages and blog posts have the same Search engine listing section. Your homepage is the odd one out, and Shopify puts it under Online Store, then Preferences, in the Social sharing image and SEO section. If you have a lot of products, <a href="https://developers.google.com/search/docs/appearance/snippet" target="_blank" rel="noopener">Google’s page</a> suggests starting with the homepage and your popular pages, so begin with the handful that sell most and work down the list.</p>
<p>You can stop when each of those products has its own line that opens with the product. Google still decides when and whether to show it, so there is nothing more to tune once the line is honest and specific.</p>
<p>Now, the line earned the tap. What does the shopper see next? They open the product page expecting the stainless steel spatula they just read about. If the program behind an email signup popup starts first, they can get an empty box where the photo should be and a form asking for their email. The line under the link made a promise, and the page has to keep it.</p>
<p>That is the one job Whoosh does here. Smart App Loading holds apps like the signup popup until the product photo is on screen, without removing the app or copying your theme. Smart App Loading is US$99 a month with a 7-day free trial, and Nakie’s published case study shows the store’s load time falling from 4.8 seconds to 1.35 seconds.</p>
<p>If your popup is Klaviyo’s, <a href="https://getwhoosh.ai/blog/does-klaviyo-slow-down-shopify/">the Klaviyo post</a> shows how to see on one product page which arrives first, the photo or the popup. Or run our <a href="https://getwhoosh.ai/#preview">speed check</a> on the spatula’s page and see what gets there before the photo does.</p>
<p>This post first appeared on the <a href="https://getwhoosh.ai/blog/meta-description-example/">Whoosh Blog</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>What does an image optimizer app do on Shopify?</title>
      <link>https://getwhoosh.ai/blog/image-optimizer-shopify/</link>
      <guid isPermaLink="true">https://getwhoosh.ai/blog/image-optimizer-shopify/</guid>
      <pubDate>Mon, 28 Sep 2026 09:00:00 GMT</pubDate>
      <dc:creator>Edward Cameron</dc:creator>
      <category>Apps &amp; scripts</category>
      <description>An image optimizer rewrites the photo stored in your Shopify admin, while Shopify still makes the light copy the shopper's phone downloads. The part worth paying for is the file name and the short description, and it is the wrong buy when the photo is slow to appear.</description>
      <enclosure url="https://getwhoosh.ai/assets/blog/image-optimizer-shopify/cover.png?v=bfcaae06" type="image/png" length="0" />
      <content:encoded><![CDATA[<h2 id="you-upload-the-honey-jar-and-an-app-offers-to-optimize-it">You upload the honey jar, and an app offers to optimize it</h2>
<p>What does an image optimizer app do on Shopify? It rewrites the photo stored in your admin, and on its paid plans it also gives that photo a proper name and a short description. Shopify still makes the smaller copy a shopper’s phone downloads, whichever app you install.</p>
<p>Let’s stay with one product the whole way. You set a glass jar of your honey on the kitchen bench, catch the light coming through it, and take the photo on your phone. You upload it to the product in the admin, and it looks lovely, and the file is called <code>IMG_4821.jpg</code> because that is the name your phone gave it.</p>
<p>A week later you search the Shopify App Store for something to speed the store up, and an image optimizer sits near the top, promising to shrink your photos. So the fair question is which photo it shrinks, and whether the person looking at your honey ever sees the difference.</p>
<h2 id="what-the-app-changes-and-what-shopify-already-does">What the app changes, and what Shopify already does</h2>
<p>There are two copies of the honey jar. Keep them apart. The first is the file you uploaded, the one sitting in your admin. The second is the copy Shopify makes from it and sends to each shopper’s phone.</p>
<p>An image optimizer works on the first one. It squashes that stored file so it takes up less room, which people call compression, and it keeps a backup in case you want the original back.</p>
<p>On its paid plans it can also rename <code>IMG_4821.jpg</code> to something like <code>raw-honey-jar.jpg</code> and fill in the alt text, which is the short description of the photo that search engines read and a screen reader speaks aloud to someone who cannot see it.</p>
<p>Shopify does the second job on its own. <a href="https://www.shopify.com/blog/7412852-10-must-know-image-optimization-tips" target="_blank" rel="noopener">Shopify’s image guide</a> says you do not need to optimize images before you upload them, because Shopify already compresses each photo at a quality setting suited to selling online.</p>
<p>It also checks what kind of file the shopper’s phone can show and sends a lighter kind when it can, which <a href="https://shopify.dev/docs/api/liquid/filters/image_url" target="_blank" rel="noopener">Shopify’s developer docs</a> name as WebP and AVIF. Shopify making that smaller, lighter copy for you is what people call its image CDN.</p>
<p>So what happens when the app squashes the stored jar first? Shopify makes the shopper’s copy from whatever file is in the admin. The same guide warns that shrinking a photo before Shopify gets it can leave a poor quality image, and that can mean lower conversions and more returns. With honey, the colour through the glass and the label are what sells it, so Shopify should start from the sharp file.</p>
<p>Crush is one of these apps, and its plans show the split well. The <a href="https://apps.shopify.com/crush-pics" target="_blank" rel="noopener">Crush listing on the App Store</a> shows a free plan with a one-time 25 MB allowance, compression, and a 30-day backup, and no renaming. Renaming the file and writing the alt text start on the Micro plan, which the <a href="https://apps.shopify.com/crush-pics" target="_blank" rel="noopener">same listing</a> prices at $4.99 a month for 500 MB of photos.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/image-optimizer-shopify/stored-vs-downloaded.webp" srcset="/assets/blog/image-optimizer-shopify/stored-vs-downloaded-720.webp 720w, /assets/blog/image-optimizer-shopify/stored-vs-downloaded-1200.webp 1200w, /assets/blog/image-optimizer-shopify/stored-vs-downloaded.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="Two panels: what an image optimizer app changes on the honey jar photo stored in the Shopify admin, beside what Shopify does to the copy the shopper's phone downloads" loading="lazy" decoding="async" width="1800" height="663"><figcaption>The app works on the file in your admin. The copy the shopper sees was already made small by Shopify.</figcaption></figure>
<aside class="callout callout-key" role="note"><p class="callout-title">Rule of thumb</p><div class="callout-body"><p>The free plan shrinks the file stored in your admin. The paid plan writes the name and the description. Shopify was already making the light copy the shopper’s phone downloads.</p></div></aside>
<h2 id="why-the-name-and-the-description-are-worth-paying-for">Why the name and the description are worth paying for</h2>
<p>So, did the free plan do anything for the jar? A little. The stored file is smaller, and the backup lets you undo it. But the shopper’s phone was already getting a small, light copy from Shopify, so on the page they see, the free plan mostly repeats a step that was already done.</p>
<p>I know what you’re thinking. You already pay for an optimizer, so the photos should be sorted. The stored files are smaller. The next question is whether your plan also named them, because that is the part Shopify never does.</p>
<p>Naming is the paid plan’s job. Shopify does not name your file or describe your photo, so the admin keeps whatever name the camera chose, and the alt text box stays empty until someone types in it.</p>
<p>Does that matter? <a href="https://developers.google.com/search/docs/appearance/google-images" target="_blank" rel="noopener">Google’s guide to images in search</a> says alt text is the most important detail for describing a photo to Google, and that a screen reader speaks it to someone who cannot see the photo. The same guide says a descriptive file name gives Google a lighter clue, and <a href="https://www.shopify.com/blog/7412852-10-must-know-image-optimization-tips" target="_blank" rel="noopener">Shopify’s image guide</a> puts it plainly: replace camera-generated names with words that identify the product.</p>
<p>So <code>IMG_4821.jpg</code> with an empty box tells Google and a screen reader nothing about honey. <code>raw-honey-jar.jpg</code> with the alt text “Glass jar of raw honey with a wooden dipper” tells both of them what is in the photo. Write it the way you would describe the jar to a friend on the phone, and resist saying honey over and over, because Google’s guide warns against stuffing keywords in.</p>
<p>For one jar, that is a couple of minutes by hand. For a shop with a few hundred photos, it is a lot of typing, and that is where Crush is stronger than Whoosh. <a href="https://apps.shopify.com/crush-pics" target="_blank" rel="noopener">Crush’s paid plans</a> rename files and write alt text across the whole catalogue, and keep a 30-day backup of the photos they change. Whoosh does none of that.</p>
<p>Now the bad news, plainly. If the jar is slow to appear on the shopper’s phone, neither plan is the fix. Squashing the stored file and renaming it do not change when the phone starts fetching the jar, or what the page loads in front of it.</p>
<p>So the decision comes down to what you find on the photo. A camera name and an empty description are the app’s job, or yours by hand. A jar that is slow to appear is a different job, and paying for renaming will not move it.</p>
<h2 id="click-the-honey-jars-photo-then-open-the-live-page">Click the honey jar’s photo, then open the live page</h2>
<p>Here is the check, in the order you would click.</p>
<ol>
<li>
<p>In the Shopify admin, go to Products and open the honey jar.</p>
</li>
<li>
<p>Click the photo, so the window with its details opens.</p>
</li>
<li>
<p>Read the file name and the alt text box. <code>IMG_4821.jpg</code> and an empty box means the name and the description are the problem, while <code>raw-honey-jar.jpg</code> and a sentence about the jar means that part is done.</p>
</li>
</ol>
<p>If the name is still the camera’s and the box is empty, you have two ways to fix it. For this one jar, type a plain description into the box and save, then rename the file on your computer, add it to the product, and remove the old one. For the whole catalogue, that is the job Crush’s paid plan does.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/image-optimizer-shopify/check-the-jar.webp" srcset="/assets/blog/image-optimizer-shopify/check-the-jar-720.webp 720w, /assets/blog/image-optimizer-shopify/check-the-jar-1200.webp 1200w, /assets/blog/image-optimizer-shopify/check-the-jar.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="Three steps: open the honey jar in Shopify admin Products, click the photo to read its file name and alt text, then open the live product page on a phone" loading="lazy" decoding="async" width="1800" height="753"><figcaption>The admin tells you whether the name and description need work. The live page tells you whether the problem is something else.</figcaption></figure>
<p>Then open the live product page on your phone, using the link a shopper would tap. If the name and the description were already fine and the jar still takes its time to show up, the optimizer is the wrong buy. The <a href="https://getwhoosh.ai/blog/shopify-speed-optimization-app/">table of speed apps</a> matches each listing to the wait it fixes.</p>
<p>Start with the theme check in <a href="https://getwhoosh.ai/blog/shopify-image-optimization/">why Shopify image optimization still leaves photos slow</a>, which shows whether your theme asks for the right copy of the jar. If a signup popup lands before the jar does, <a href="https://getwhoosh.ai/blog/does-klaviyo-slow-down-shopify/">whether Klaviyo slows your store</a> covers that one.</p>
<p>Once the theme is right, one wait is left. The phone reads the page from the top, so it only asks for the jar when it reaches that part of the page, and closing that gap is the one job Whoosh does here.</p>
<p>AI Page Preloading looks at which photo real visitors see first on each page, and tells the phone to start fetching that photo early. It does not compress photos, rename files, or write alt text, and it does not copy your theme, so it sits alongside an optimizer rather than replacing one. AI Page Preloading is US$99 a month with a 7-day free trial.</p>
<p>You can stop when the jar’s file has a real name, the alt text box describes what is in the photo, and the jar turns up on the live page before anything else does. If you want a second opinion on that page, the <a href="https://getwhoosh.ai/#preview">speed check</a> measures it for you.</p>
<p>This post first appeared on the <a href="https://getwhoosh.ai/blog/image-optimizer-shopify/">Whoosh Blog</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Do you need a Shopify CDN, or do you already have one?</title>
      <link>https://getwhoosh.ai/blog/shopify-cdn/</link>
      <guid isPermaLink="true">https://getwhoosh.ai/blog/shopify-cdn/</guid>
      <pubDate>Sun, 27 Sep 2026 09:00:00 GMT</pubDate>
      <dc:creator>Edward Cameron</dc:creator>
      <category>Apps &amp; scripts</category>
      <description>Your Shopify store already sends each product photo from a computer near the shopper, so a report telling you to add a CDN is asking you to buy something you have. The part worth checking is whether the photo was uploaded to Shopify or pasted in from somewhere else.</description>
      <enclosure url="https://getwhoosh.ai/assets/blog/shopify-cdn/cover.png?v=a28836e3" type="image/png" length="0" />
      <content:encoded><![CDATA[<h2 id="someone-in-london-taps-your-candle">Someone in London taps your candle</h2>
<p>Do you need a Shopify CDN? No. Your store already has one, and it has been running since the day you opened.</p>
<p>Say you sell candles from Brisbane, and a shopper in London taps the photo of your sandalwood candle. That picture does not fly all the way from Australia. Shopify has already put a copy of it on a computer near London, so it only has to cross town to reach their phone.</p>
<p>That setup is what people call a CDN, short for content delivery network. So when a speed report says your store should add one, it is asking you to pay for a job Shopify is already doing. The question worth your ten minutes is a smaller one: did the candle photo go into Shopify, or is it coming from somewhere else?</p>
<h2 id="how-the-candle-photo-gets-to-london">How the candle photo gets to London</h2>
<p>When you add a photo in the product’s media section, Shopify keeps copies of it on computers in cities around the globe, and each shopper’s phone gets the closest one. <a href="https://shopify.dev/docs/storefronts/themes/best-practices/performance/platform" target="_blank" rel="noopener">Shopify’s notes on its platform</a> say that is why a store loads quickly for people far away, and there is nothing for you to switch on.</p>
<p>You can see this in the photo’s address, which is the web link the phone uses to fetch the picture. On most Shopify stores it starts with your own store name and then <code>/cdn/</code>, something like <code>/cdn/shop/files/sandalwood.jpg</code>. Some photos still use <code>cdn.shopify.com</code> instead, and that is Shopify too.</p>
<p>Why does your store’s own name help? The phone already opened a line to your store to load the page, so it can ask for the candle down that same line instead of starting over with a website it has never met.</p>
<p>There is one more thing the address carries, and it matters in a minute. When you upload a new photo, Shopify adds a fresh version number to the end of the address, after <code>?v=</code>, so every phone can tell it is a different picture. Your theme picks up that new number by itself, because it asks Shopify for the current photo each time the page opens.</p>
<h2 id="why-the-candle-can-still-be-slow-or-out-of-date">Why the candle can still be slow or out of date</h2>
<p>So if Shopify does all of that, how can the candle still be slow?</p>
<p>The network only carries what you put on it. Sometimes the photo on the page was never uploaded at all. It is an image pasted into the description, or a banner that still points at the photographer’s website or your old store.</p>
<p>Then the phone in London has to find that other website, open a fresh connection, and set up the padlock you see in the address bar, all before the first bit of the candle arrives.</p>
<p><a href="https://shopify.dev/docs/storefronts/themes/best-practices/performance/use-shopify-cdn" target="_blank" rel="noopener">Shopify’s guide to serving files from its own network</a> puts that setup at nearly half a second on a mobile connection with 150 ms of delay, and every extra website repeats it. When the file is the main product photo, the shopper spends that time looking at an empty box where the candle should be.</p>
<p>The second problem happens on Shopify’s own address, and it is easy to miss. Since 7 April 2026, <a href="https://shopify.dev/changelog/replacing-or-deleting-a-shopify-hosted-file-no-longer-purges-its-cdn-url" target="_blank" rel="noopener">Shopify no longer clears the old copy</a> when you replace or delete a file in the admin.</p>
<p>Your theme asks for the current photo and gets the new version number, so it shows the new candle. A <code>cdn.shopify.com</code> link you pasted into a description or a blog post has no new number, so shoppers keep seeing yesterday’s photo until the old copy runs out.</p>
<p>Here is the useful part. Both problems come from the same place, a photo that sits on the page as a pasted link rather than an upload Shopify looks after, and buying a CDN fixes neither.</p>
<p>I know what you’re thinking. A speed tool you trust flagged “no CDN”, so surely it found something. It may well have found a heavy file or a slow app, but it is wrong about the network.</p>
<p><a href="https://www.shopify.com/blog/what-is-cdn" target="_blank" rel="noopener">Shopify’s own guide to CDNs</a> says that when your platform already includes one, a separate one might be redundant. The same guide names where a separate one earns its keep: custom caching rules, or special routing for video, that your host does not offer. A candle photo needs neither.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/shopify-cdn/where-the-photo-lives.webp" srcset="/assets/blog/shopify-cdn/where-the-photo-lives-720.webp 720w, /assets/blog/shopify-cdn/where-the-photo-lives-1200.webp 1200w, /assets/blog/shopify-cdn/where-the-photo-lives.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="Two panels comparing a candle photo uploaded to Shopify with the same photo pasted in as a link from another website" loading="lazy" decoding="async" width="1800" height="663"><figcaption>The uploaded photo comes down the line the phone already has open. The pasted one waits for a new website, or shows an old picture.</figcaption></figure>
<aside class="callout callout-key" role="note"><p class="callout-title">Rule of thumb</p><div class="callout-body"><p>Shopify runs the network, and you decide what goes on it. The candle is quick when it was uploaded to Shopify, not pasted in from somewhere else.</p></div></aside>
<h2 id="read-the-photos-address-then-let-it-load-first">Read the photo’s address, then let it load first</h2>
<p>Here is the check, and it takes a couple of minutes on a computer.</p>
<p>Open the live product page, using the same link a shopper would tap rather than the theme editor. Right-click the candle photo and choose Inspect, which opens a panel beside the page with the photo’s line of code highlighted. The address is the part after <code>src=</code>.</p>
<p>If that address starts with your store’s name and has <code>/cdn/</code> in it, or starts with <code>cdn.shopify.com</code>, the photo is on Shopify and this part is done. If it starts with any other website, save that image, add it to the product through the media section, and delete the pasted copy from the description.</p>
<p>If you replaced a photo and the live page still shows the old one, open the product description and click the <code>&#x3C;></code> button to see the code behind it. Look for a pasted <code>cdn.shopify.com</code> address, take that image out of the text, and add it as product media, so the page asks Shopify for the current file.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/shopify-cdn/read-the-address.webp" srcset="/assets/blog/shopify-cdn/read-the-address-720.webp 720w, /assets/blog/shopify-cdn/read-the-address-1200.webp 1200w, /assets/blog/shopify-cdn/read-the-address.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="Three steps: open the live product page, right-click the photo and choose Inspect, then read the address after src=" loading="lazy" decoding="async" width="1800" height="791"><figcaption>Two minutes on the page a shopper opens tells you whether the photo is on Shopify.</figcaption></figure>
<p>Now, the part the network does not touch. It carries your files quickly, but it does not decide what the phone does first. Your signup popup, reviews widget, and chat bubble each load a small program from the company that makes them, and those programs can start running while the candle is still an empty box.</p>
<p>That order is the one job Whoosh does. Smart App Loading holds those app programs until the product photo is on screen, then lets them run, and it works alongside the apps without removing them or copying your theme. After you turn it on, open the popup and send the form, open the chat, and add the candle to the cart, so you know each one still works.</p>
<p>Smart App Loading is US$99 a month with a 7-day free trial, and Nakie’s published case study shows their page load going from 4.8 seconds to 1.35 seconds.</p>
<p>You can stop when the candle’s address is your store or <code>cdn.shopify.com</code>, and a replaced photo shows up on the live page. If the address is right and the photo is still slow, the next suspect is its size, which is <a href="https://getwhoosh.ai/blog/shopify-image-optimization/">why Shopify image optimization still leaves photos slow</a>. If a signup form is what jumps in front of it, start with <a href="https://getwhoosh.ai/blog/does-klaviyo-slow-down-shopify/">whether Klaviyo slows your store</a>. The <a href="https://getwhoosh.ai/faqs/">FAQs</a> cover what an install changes, and the <a href="https://getwhoosh.ai/#preview">speed check</a> measures your product page for you.</p>
<p>This post first appeared on the <a href="https://getwhoosh.ai/blog/shopify-cdn/">Whoosh Blog</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Why Shopify image optimization still leaves photos slow</title>
      <link>https://getwhoosh.ai/blog/shopify-image-optimization/</link>
      <guid isPermaLink="true">https://getwhoosh.ai/blog/shopify-image-optimization/</guid>
      <pubDate>Sat, 26 Sep 2026 09:00:00 GMT</pubDate>
      <dc:creator>Edward Cameron</dc:creator>
      <category>Apps &amp; scripts</category>
      <description>Shopify already makes small, light copies of the product photo you upload. The shopper still waits when the theme asks for the biggest copy, or makes the first photo queue behind the rest of the gallery.</description>
      <enclosure url="https://getwhoosh.ai/assets/blog/shopify-image-optimization/cover.png?v=39ac9b8e" type="image/png" length="0" />
      <content:encoded><![CDATA[<h2 id="a-shopper-on-the-bus-taps-your-linen-shirt">A shopper on the bus taps your linen shirt</h2>
<p>Why does Shopify image optimization still leave photos slow? Because Shopify has already made your photo small, and what the shopper waits for is which copy your theme asks for, and when.</p>
<p>Let’s stay with one product the whole way through. You photograph a linen shirt against a white wall, upload the sharp JPEG in the admin, and it looks lovely on your laptop. Then a shopper on the bus taps the shirt from an ad on their phone, and for a moment there is a grey box where the shirt should be.</p>
<p>That grey box is what this post is about. Nothing is wrong with the photo you took, and you do not need to make the file smaller before it goes up. The wait comes from choices made after you clicked upload, by Shopify and by your theme, which is the design your store runs on.</p>
<h2 id="what-happens-to-the-shirt-after-you-upload-it">What happens to the shirt after you upload it</h2>
<p>OK, so what does Shopify do with the file? It keeps your sharp original and makes smaller copies of it for different screens. When the shopper’s phone can show a lighter kind of file, it gets that instead of the JPEG. <a href="https://www.shopify.com/blog/7412852-10-must-know-image-optimization-tips" target="_blank" rel="noopener">Shopify’s image guide</a> names those lighter files WebP and AVIF, and says you do not need to make any of them yourself. That automatic shrinking is what Shopify means by image optimization.</p>
<p>But Shopify does not know how big the shirt will look on the bus. Your theme does. The theme has to hand the phone a menu of those copies, and then tell it how wide the photo will sit on the screen, whether that is the full width of a phone or half of a laptop. With both, the phone picks the smallest copy that still looks sharp.</p>
<p>When the theme skips that, the phone plays it safe. <a href="https://shopify.dev/docs/storefronts/themes/best-practices/performance/implement-responsive-design" target="_blank" rel="noopener">Shopify’s notes for theme builders</a> say that if the width hint is missing, the phone’s browser assumes the photo fills the whole screen and downloads the largest copy. If the theme offers no menu at all, the phone gets the same big file a desktop gets. Developers call the menu <code>srcset</code> and the width hint <code>sizes</code>, and you will see both words in a minute.</p>
<p>There is a second choice, and it is about order. Your shirt has a handful of photos in its gallery, but the shopper on the bus only sees the first one. <a href="https://shopify.dev/docs/storefronts/themes/best-practices/performance/use-responsive-images" target="_blank" rel="noopener">Shopify’s advice on theme images</a> is that the first visible photo loads straight away and is marked as the important one, while every photo further down waits until the shopper scrolls toward it. That waiting is called lazy loading.</p>
<p>Get the order backwards and the shirt turns up last. If the first photo is marked lazy, the phone treats the one picture the shopper is staring at as something that can wait. Google calls the moment that main photo appears Largest Contentful Paint, and <a href="https://web.dev/articles/lcp" target="_blank" rel="noopener">its guide</a> says a good page gets there in 2.5 seconds or less.</p>
<p>In the theme’s code, a first photo that gets both choices right looks roughly like this. You do not have to write it, only recognise it when you see it:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="html"><code><span class="line"><span style="color:#E1E4E8">&#x3C;</span><span style="color:#85E89D">img</span><span style="color:#B392F0"> src</span><span style="color:#E1E4E8">=</span><span style="color:#9ECBFF">".../linen-shirt.jpg?width=1200"</span></span>
<span class="line"><span style="color:#B392F0">  srcset</span><span style="color:#E1E4E8">=</span><span style="color:#9ECBFF">".../linen-shirt.jpg?width=400 400w, .../linen-shirt.jpg?width=800 800w, .../linen-shirt.jpg?width=1200 1200w"</span></span>
<span class="line"><span style="color:#B392F0">  sizes</span><span style="color:#E1E4E8">=</span><span style="color:#9ECBFF">"(min-width: 990px) 50vw, 100vw"</span></span>
<span class="line"><span style="color:#B392F0">  loading</span><span style="color:#E1E4E8">=</span><span style="color:#9ECBFF">"eager"</span></span>
<span class="line"><span style="color:#B392F0">  fetchpriority</span><span style="color:#E1E4E8">=</span><span style="color:#9ECBFF">"high"</span><span style="color:#E1E4E8">></span></span></code></pre>
<p>The <code>srcset</code> line is the menu of copies. The <code>sizes</code> line says the shirt fills a phone screen and half of a wide one. The word <code>eager</code> means fetch it now, and <code>fetchpriority="high"</code> puts it ahead of the other files the page wants.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/shopify-image-optimization/upload-vs-request.webp" srcset="/assets/blog/shopify-image-optimization/upload-vs-request-720.webp 720w, /assets/blog/shopify-image-optimization/upload-vs-request-1200.webp 1200w, /assets/blog/shopify-image-optimization/upload-vs-request.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="Two panels: what a store owner does with a product photo in the Shopify admin, beside the choices the theme makes on the shopper's phone" loading="lazy" decoding="async" width="1800" height="663"><figcaption>Your side is already done once the sharp photo is uploaded. The wait lives in the theme's choices on the right.</figcaption></figure>
<aside class="callout callout-key" role="note"><p class="callout-title">Rule of thumb</p><div class="callout-body"><p>You choose the photo. The theme chooses which copy the phone downloads, and whether the shirt goes before the rest of the gallery.</p></div></aside>
<h2 id="why-you-can-stop-shrinking-photos-before-you-upload">Why you can stop shrinking photos before you upload</h2>
<p>This is the useful bit, and it gives you an evening back. Plenty of guides and apps tell you to squash every photo on your laptop before it goes into Shopify. <a href="https://www.shopify.com/blog/7412852-10-must-know-image-optimization-tips" target="_blank" rel="noopener">Shopify’s image guide</a> says you do not need to, and to upload the highest-quality photo you have, because the storefront copies are made from it.</p>
<p>Squashing it first can make things worse. Every copy Shopify makes starts from your file, so a shirt that went blotchy on your laptop stays blotchy on every phone. For the upload itself, the same guide suggests a JPEG for product photos and a PNG only for something with a see-through background, like your logo.</p>
<p>I know what you’re thinking. You already pay for an image compressor app. Some of those apps earn their keep on a different job, like writing the short descriptions search engines read, or renaming files. But compressing the upload is a step Shopify already takes, and it never touches the two choices in your theme: which copy the phone asks for, and which photo goes first.</p>
<p>So here is the decision this earns. Leave the upload alone, and spend the time on the one line in your theme that tells the phone how to fetch the shirt.</p>
<h2 id="check-the-shirt-on-your-own-product-page">Check the shirt on your own product page</h2>
<p>Here’s the awkward part. If your theme gets either choice wrong, no setting on the upload will fix it. The good news is you can see which one it is with a right-click.</p>
<p>Open your live product page on a laptop, using the link a shopper would tap, not the theme editor. Right-click the first photo and choose Inspect. A panel opens beside the page with one line highlighted that starts with <code>&#x3C;img</code>, and that line is the theme’s instruction for the shirt.</p>
<p>Look for three words on it, in this order:</p>
<ol>
<li>
<p><code>sizes</code> should be there, with widths inside it like the example above. If it is missing on the first photo, the phone may be taking the biggest copy.</p>
</li>
<li>
<p><code>loading</code> should not say lazy. If it does, the shirt the shopper is looking at is waiting behind files that matter less.</p>
</li>
<li>
<p><code>fetchpriority</code> should say high on this photo, and on no other photo on the page.</p>
</li>
</ol>
<p>Then scroll down to a photo further along the gallery, right-click it, and choose Inspect again. That one should say lazy. If it says eager and high as well, every photo is asking to go first, and the shirt has to share the line.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/shopify-image-optimization/check-the-request.webp" srcset="/assets/blog/shopify-image-optimization/check-the-request-720.webp 720w, /assets/blog/shopify-image-optimization/check-the-request-1200.webp 1200w, /assets/blog/shopify-image-optimization/check-the-request.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="Three steps: open the live product page, read the first photo's highlighted line in Inspect, then compare it with a photo further down the gallery" loading="lazy" decoding="async" width="1800" height="753"><figcaption>One right-click on the page a shopper opens tells you whether the theme is making the product wait.</figcaption></figure>
<p>If something is off, send that highlighted line to whoever built or sells your theme, or check whether the theme has an update. The Shopify notes linked above describe this exact fix, so you can point them straight at it.</p>
<p>Once those three words are right, one gap is left. The phone reads your page from the top, so it only asks for the shirt when it reaches that line, and <a href="https://web.dev/articles/optimize-lcp" target="_blank" rel="noopener">Google’s guide to that photo</a> says it should start loading as early as possible. Closing that gap is the one job Whoosh does here.</p>
<p>Whoosh looks at which photo real visitors see first on each page, and tells the phone to start fetching that photo early. It does not compress your photos, and it does not copy your theme or rewrite that line for you, so a first photo marked lazy is still a theme fix. That is Whoosh’s AI Page Preloading plan, US$99 a month with a 7-day free trial.</p>
<p>If you already installed a speed app, the <a href="https://getwhoosh.ai/blog/shopify-speed-optimization-app/">table of speed apps</a> matches each listing to the wait it fixes, including a huge photo.</p>
<p>You can stop when the first photo has a <code>sizes</code> hint, does not say lazy, says high, and the gallery below it waits its turn. If the shirt is still slow after that, look at what loads ahead of it, like a signup popup, which is <a href="https://getwhoosh.ai/blog/does-klaviyo-slow-down-shopify/">how Klaviyo can slow a page</a>. The <a href="https://getwhoosh.ai/#preview">speed check</a> measures that page for you, and the <a href="https://getwhoosh.ai/faqs/">FAQs</a> cover what installing Whoosh changes.</p>
<p>This post first appeared on the <a href="https://getwhoosh.ai/blog/shopify-image-optimization/">Whoosh Blog</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Whoosh vs Yottaa: what the free plan does</title>
      <link>https://getwhoosh.ai/blog/whoosh-vs-yottaa/</link>
      <guid isPermaLink="true">https://getwhoosh.ai/blog/whoosh-vs-yottaa/</guid>
      <pubDate>Fri, 25 Sep 2026 09:00:00 GMT</pubDate>
      <dc:creator>Edward Cameron</dc:creator>
      <category>Core Web Vitals</category>
      <description>Yottaa's free plan tells you which apps your product photo is waiting on. Making those apps wait is the paid part, and on Yottaa it is billed by page views. Whoosh does that waiting at the same price every month.</description>
      <enclosure url="https://getwhoosh.ai/assets/blog/whoosh-vs-yottaa/cover.png?v=cb46d2aa" type="image/png" length="0" />
      <content:encoded><![CDATA[<h2 id="the-shirt-photo-is-waiting-on-your-other-apps">The shirt photo is waiting on your other apps</h2>
<p>Yottaa’s free plan watches your store and tells you which apps are holding up the product page. It does not make those apps wait. That is the paid part, and how you pay for it is the real difference between Yottaa and Whoosh.</p>
<p>Picture someone tapping your ad on their phone and landing on the page for your linen shirt. They came to see the shirt. While the page opens, your chat bubble, your review stars, and your email popup start loading too, and each one is a small program from another company. If those programs run first, the shopper stares at an empty box where the shirt should be.</p>
<p>Whoosh and Yottaa both work on that empty box. Each can tell the extra apps to wait until the shirt photo is on screen, which is what people call app sequencing. We make Whoosh, so keep that in mind when you read the table. The job is the same. The bill is not.</p>
<h2 id="the-free-plan-watches-and-the-add-on-moves-the-apps">The free plan watches, and the add-on moves the apps</h2>
<p>Let’s start with the free part, because it’s what most people install first. Yottaa Insights records how fast the shirt page opens for real visitors, and it lists the apps loading alongside the photo. That list is handy. It tells you the chat bubble’s name, and it leaves the chat bubble exactly where it was.</p>
<p>So what makes the chat wait? A paid add-on, called Optimize on the App Store. Yottaa’s pricing page calls the free part RAPID inSITE and the paid part RAPID CTRL, so expect either name on the invoice. <a href="https://www.yottaa.com/shopify/" target="_blank" rel="noopener">Yottaa’s Shopify page</a> says it changes that order without code changes, and it describes splitting visitors to test a change.</p>
<p>Whoosh has no free screen. You install it, it spots the apps it knows, and it holds them back until the shirt photo is up. It also fetches that photo early and starts opening the page the shopper is likely to tap next, though never the cart, checkout, or account pages.</p>
<p>To show you whether it helped, Whoosh runs a 50/50 test on your own store, where half the visits get Whoosh and half don’t, and you compare sales. TileCloud ran that test and published a 10% conversion lift. That’s one store’s result, and it is not a promise for yours.</p>



































<div class="table-wrap"><table><thead><tr><th>What you get</th><th>Whoosh</th><th>Yottaa</th></tr></thead><tbody><tr><th scope="row">What it does on the page</th><td>Holds extra apps until the photo is up; fetches that photo early; starts the likely next page</td><td>Insights watches and lists your apps; the Optimize add-on holds them back</td></tr><tr><th scope="row">Your theme</th><td>No code; does not copy the theme; leaves cart, checkout, and account alone</td><td>Changes load order without code changes, per <a href="https://www.yottaa.com/shopify/" target="_blank" rel="noopener">its Shopify page</a></td></tr><tr><th scope="row">How you see it worked</th><td>50/50 test on your own store, compared on sales</td><td>Real-visitor speed on Insights; its Shopify page also describes split tests</td></tr><tr><th scope="row">Price</th><td>US$99 a month, or US$149 for everything; 7-day free trial</td><td>Insights free; Optimize US$300 a month under 150,000 page views, then charged per page view; 14-day trial, per <a href="https://apps.shopify.com/rapid-insite" target="_blank" rel="noopener">the App Store listing</a></td></tr><tr><th scope="row">The better buy when</th><td>You want the same bill every month, busy or quiet, and a sales test on your store</td><td>You want to look for free first, want a longer trial, or need a quote above 1.5 million page views a month</td></tr></tbody></table></div>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/whoosh-vs-yottaa/monitor-or-sequence.webp" alt="Two panels: Yottaa, free to watch and billed by page views to move apps, beside Whoosh, which moves apps for the same price every month" loading="lazy" decoding="async" width="1800" height="663"><figcaption>Both can make the chat and the popup wait for the photo. One bill grows with visits, and one stays put.</figcaption></figure>
<aside class="callout callout-key" role="note"><p class="callout-title">Rule of thumb</p><div class="callout-body"><p>Yottaa’s free plan tells you which app the shirt photo is waiting on. Making that app wait is the part you pay for, on either app.</p></div></aside>
<h2 id="every-visit-to-the-shirt-counts-on-yottaas-bill">Every visit to the shirt counts on Yottaa’s bill</h2>
<p>Here’s the catch with the add-on. It is billed by page views, and a page view is one person opening one page. A shopper who looks at the shirt, then some pants, then the cart counts three times.</p>
<p>On <a href="https://www.yottaa.com/merchant-integration-pricing/" target="_blank" rel="noopener">Yottaa’s pricing page</a>, the add-on is US$300 a month for the first 150,000 page views, then US$0.002 for each one after that. Using that <a href="https://www.yottaa.com/merchant-integration-pricing/" target="_blank" rel="noopener">same rate</a>, a month with 200,000 page views puts 50,000 over the line, which adds US$100 to the US$300. Past 1.5 million page views a month, that page asks you to request a quote.</p>
<p>So the Yottaa bill rises in your good months, when a sale or a post sends more people to the shirt. Whoosh’s price in the table does not move with visits, so a busy month costs what a quiet one does. That flat bill is the thing Yottaa’s add-on does not give you.</p>
<p>Yottaa is the better buy in three places, and they’re worth saying plainly. If you’re not sure apps are the problem, Insights lets you look for free, and Whoosh has no free plan. Optimize comes with a longer trial than ours on the <a href="https://apps.shopify.com/rapid-insite" target="_blank" rel="noopener">App Store listing</a>. And a very large store gets a person and a custom quote, which Whoosh does not publish.</p>
<p>I know what you’re thinking. Why not keep the free screen and add Whoosh? You can, because Insights watches and Whoosh does the moving, so they are not doing the same job. What you shouldn’t do is turn on Optimize and Whoosh together, because two apps both holding back the same chat bubble makes a broken popup very hard to trace.</p>
<p>Pick one app to own the waiting. Then open the store on your phone and tap the popup, the chat, and add to cart, so you know each one still works.</p>
<h2 id="check-one-product-page-before-you-pay-for-either">Check one product page before you pay for either</h2>
<p>Before you pay anyone, find out what the shirt photo is waiting on. Open the live product page, the link a shopper gets, rather than the theme editor, which can hide your apps. In Chrome, right-click the page and choose Inspect to open a panel of tools, then click Network, which is the list of every file the page downloads.</p>
<p>Tick Disable cache, so the page loads fresh the way it would for a first-time shopper, and reload once. Find the shirt photo in that list, then look for files from other companies, like the chat or the review stars. If one of them finishes before the photo, write its name down. That’s the app worth making wait.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/whoosh-vs-yottaa/check-the-script.webp" alt="Three steps: open the live product page, open the Network list with the cache off, and see which app file finishes before the product photo" loading="lazy" decoding="async" width="1800" height="753"><figcaption>Know the app's name before you pay to make it wait.</figcaption></figure>
<p>If you already run Insights, its screen should name that same app, and that’s the free plan doing its whole job. Once Optimize or Whoosh is on, reload the page the same way. The file you wrote down should now start after the photo. If it hasn’t moved, you are still only watching.</p>
<p>Then pick your row in the table. If you want to look before you spend anything, start with Yottaa’s free screen and add Optimize when you need it. If you want the waiting done at one price every month, including the busy ones, that’s Whoosh.</p>
<p>If the app in front of your photo turns out to be the email popup, <a href="https://getwhoosh.ai/blog/does-klaviyo-slow-down-shopify/">the Klaviyo walkthrough</a> does this same check for that one file. If you’re weighing other speed apps as well, <a href="https://getwhoosh.ai/blog/shopify-speed-optimization-app/">the wider comparison</a> covers the ones that rewrite the theme or shrink photos instead. The <a href="https://getwhoosh.ai/faqs/">FAQs</a> cover what changes when you install or remove Whoosh.</p>
<p>This post first appeared on the <a href="https://getwhoosh.ai/blog/whoosh-vs-yottaa/">Whoosh Blog</a>.</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>
      <dc:creator>Edward Cameron</dc:creator>
      <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>
<aside class="callout callout-key" role="note"><p class="callout-title">Rule of thumb</p><div class="callout-body"><p>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></div></aside>
<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/" target="_blank" rel="noopener">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" target="_blank" rel="noopener">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" target="_blank" rel="noopener">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>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/shopify-speed-score/lab-vs-field.webp" srcset="/assets/blog/shopify-speed-score/lab-vs-field-720.webp 720w, /assets/blog/shopify-speed-score/lab-vs-field-1200.webp 1200w, /assets/blog/shopify-speed-score/lab-vs-field.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="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" loading="lazy" decoding="async" width="1800" height="663"><figcaption>The retired number was a simulation. The admin report is your shoppers.</figcaption></figure>
<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" target="_blank" rel="noopener">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" target="_blank" rel="noopener">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" target="_blank" rel="noopener">web.dev</a>:</p>
<div class="stat-row"><div class="stat"><span class="stat-value">2.5 s</span><span class="stat-label">Largest Contentful Paint: the largest thing, usually the product photo, has painted</span><a class="stat-source" href="https://web.dev/articles/vitals" target="_blank" rel="noopener">Source</a></div><div class="stat"><span class="stat-value">200 ms</span><span class="stat-label">Interaction to Next Paint: the page responds to a tap</span><a class="stat-source" href="https://web.dev/articles/vitals" target="_blank" rel="noopener">Source</a></div><div class="stat"><span class="stat-value">0.1</span><span class="stat-label">Cumulative Layout Shift: the layout does not jump while someone is reading</span><a class="stat-source" href="https://web.dev/articles/vitals" target="_blank" rel="noopener">Source</a></div></div>
<p><a href="https://developers.google.com/search/docs/appearance/core-web-vitals" target="_blank" rel="noopener">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" target="_blank" rel="noopener">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>
<aside class="callout callout-warning" role="note"><p class="callout-title">Do not uninstall an app to chase the retired number</p><div class="callout-body"><p>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></div></aside>
<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="https://getwhoosh.ai/blog/does-klaviyo-slow-down-shopify/">Whether Klaviyo slows the store</a> is that check for one common script. <a href="https://getwhoosh.ai/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. Smart App Loading is US$99 a month. Whoosh Max, 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>
<p>This post first appeared on the <a href="https://getwhoosh.ai/blog/shopify-speed-score/">Whoosh Blog</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>What is ChatGPT Instant Checkout?</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>
      <dc:creator>Edward Cameron</dc:creator>
      <category>Agentic commerce</category>
      <description>Someone finds your product in ChatGPT and taps Buy. Instant Checkout lets approved stores take that payment inside the chat. On most Shopify stores, the tap opens your own product page instead, so that page is where the sale happens.</description>
      <enclosure url="https://getwhoosh.ai/assets/blog/chatgpt-instant-checkout/cover.png?v=1a6fb639" type="image/png" length="0" />
      <content:encoded><![CDATA[<h2 id="she-finds-your-mug-in-chatgpt-and-taps-buy">She finds your mug in ChatGPT and taps Buy</h2>
<p>Picture someone shopping for her dad’s birthday. She asks ChatGPT for a speckled ceramic mug, something handmade that holds a proper amount of tea, and one of the mugs it shows her is yours. She likes it, so she taps Buy.</p>
<p>What happens after that tap is what ChatGPT Instant Checkout is about. In the Instant Checkout version, she pays right there in the chat and your website never opens. That version is real, but OpenAI decides which stores get it, and most Shopify stores do not have it.</p>
<p>On a Shopify store, the same tap opens your own product page, inside the ChatGPT app. She pays in your checkout, the way any other visitor would. So for most of you, the part worth getting ready is the page she lands on.</p>
<h2 id="what-happens-between-the-chat-and-your-checkout">What happens between the chat and your checkout</h2>
<p>Let’s start with how ChatGPT knew about your mug at all. Shopify hands the chats a tidy copy of your products, built from the title, price, photos, and stock you already keep in the admin. <a href="https://www.shopify.com/blog/what-is-shopify-catalog" target="_blank" rel="noopener">Shopify’s article on Catalog</a> calls that copy Shopify Catalog, and it is what ChatGPT searched when she asked for a mug.</p>
<p>Next up is the tap. When <a href="https://stripe.com/newsroom/news/stripe-openai-instant-checkout" target="_blank" rel="noopener">Stripe announced the Buy button on 29 September 2025</a>, it let people in the United States pay sellers on Etsy without leaving the chat, and it listed Shopify stores as coming soon. She would confirm her address and card inside ChatGPT, and the store would take the payment and post the mug.</p>
<p>That in-chat payment is what the name Instant Checkout means. <a href="https://developers.openai.com/commerce/guides/key-concepts" target="_blank" rel="noopener">OpenAI’s guide for stores</a> still says the button is only for approved partners, with a form to apply. It also says a store has to build three connections to ChatGPT to support it, which is developer work, not a setting.</p>
<p>Those connections are <a href="https://getwhoosh.ai/blog/agentic-commerce-protocol/">the Agentic Commerce Protocol</a>, if you want the longer version of how a chat places an order. For your mug, the part that matters is where she ends up paying.</p>
<p>Here’s the catch for a Shopify store. On 24 March 2026, <a href="https://www.shopify.com/news/agentic-commerce-momentum" target="_blank" rel="noopener">Shopify said</a> people shopping in ChatGPT find its stores’ products through Catalog, then finish the purchase in a browser built into the ChatGPT app. On a computer, ChatGPT opens your store in a new tab instead.</p>
<p>Either way, she is on your store now. She sees your price, your payment options, and every app you have installed, because it is the same product page everyone else gets.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/chatgpt-instant-checkout/where-she-pays.webp" srcset="/assets/blog/chatgpt-instant-checkout/where-she-pays-720.webp 720w, /assets/blog/chatgpt-instant-checkout/where-she-pays-1200.webp 1200w, /assets/blog/chatgpt-instant-checkout/where-she-pays.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="Two panels: paying inside ChatGPT for approved stores, beside a Shopify product page opening inside the ChatGPT app" loading="lazy" decoding="async" width="1800" height="663"><figcaption>Most Shopify stores are on the right. The tap in the chat ends on your own product page.</figcaption></figure>
<h2 id="why-your-product-page-is-now-the-checkout">Why your product page is now the checkout</h2>
<p>This is the useful part, because it means there is nothing to apply for. The same March post from Shopify says products show up in ChatGPT by default through Agentic Storefronts, the admin setting that shares your products with the chats, with no separate app and no transaction fees beyond normal card processing.</p>
<p>When she pays, the order lands in your admin marked as coming from ChatGPT, and you are still the seller.</p>
<p>I know what you’re thinking. Wouldn’t the in-chat button be better, since she never has to wait for a page? For the stores that have it, maybe. But OpenAI decides who gets it, and the page she lands on is yours to fix today.</p>
<p>The chat does the finding. Your product page does the selling, and it has two jobs once she arrives.</p>
<p>First, the page has to agree with the chat. She was just told a price, and that the mug is in stock, and <a href="https://www.shopify.com/blog/what-is-shopify-catalog" target="_blank" rel="noopener">Shopify’s Catalog article</a> puts it plainly: a buyer shown the wrong price or a sold-out item is a buyer who does not check out.</p>
<p>Because the chat reads your admin, the fix lives there. Keep the title, price, and stock right in Shopify, and you do not have to write anything special for ChatGPT.</p>
<p>Second, the mug has to show up first. She has already seen the photo in the chat, and now she is on her phone, in a small browser, waiting to see it again. If a signup popup or a chat bubble loads before the photo, the first thing she meets on your store is something she did not ask for.</p>
<aside class="callout callout-key" role="note"><p class="callout-title">Rule of thumb</p><div class="callout-body"><p>On Shopify, the Buy tap in ChatGPT opens your product page. Make that page match the chat, and make the mug the first thing on screen.</p></div></aside>
<h2 id="open-the-page-the-chat-will-open">Open the page the chat will open</h2>
<p>OK, so here is the check, in the order you would click it, on one product.</p>
<p>Start in the Shopify admin. Open Sales channels, then Agentic, which is where <a href="https://www.shopify.com/blog/what-is-shopify-catalog" target="_blank" rel="noopener">the Catalog article</a> says you choose which chats can use your products, and make sure ChatGPT is on. It is a switch in the admin, not code you paste into the theme.</p>
<p>Then pick your mug and open its live product page on your phone, using the address a customer would use. Skip the theme editor, because it often hides your apps.</p>
<p>Check the title, the price, and whether the colour she would pick is in stock, and make sure all three match the admin. A product priced at zero can be left out of Catalog altogether.</p>
<p>Last, but not least, watch the photo. On a computer, right-click the page and choose Inspect, which opens a panel of tools beside it. Click the Network tab, which is the list of every file the page asks for, then tick Disable cache so the page loads fresh, like it would for her.</p>
<p>Reload, find the mug photo in that list, and see whether the popup or the chat bubble finished before it.</p>
<p><a href="https://web.dev/articles/vitals" target="_blank" rel="noopener">Google wants the main photo on screen within 2.5 seconds for most real visits</a>, and <a href="https://web.dev/articles/optimize-lcp" target="_blank" rel="noopener">its guide to that photo</a> says the browser should ask for it early, not after the other files. If the mug shows up late, the next suspect is whichever app got in ahead of it.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/chatgpt-instant-checkout/check-the-page.webp" srcset="/assets/blog/chatgpt-instant-checkout/check-the-page-720.webp 720w, /assets/blog/chatgpt-instant-checkout/check-the-page-1200.webp 1200w, /assets/blog/chatgpt-instant-checkout/check-the-page.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="Three steps: turn on ChatGPT under Sales channels then Agentic, match the live product page to the admin, and watch the product photo load before a popup" loading="lazy" decoding="async" width="1800" height="753"><figcaption>One product, three looks. If all three pass, the page is ready for the tap.</figcaption></figure>
<p>That last step is where Whoosh fits. It does not get you the in-chat button, and it does not send your products to ChatGPT.</p>
<p>Smart App Loading makes the popup, the chat bubble, and the other extra apps wait until the product photo is on screen, and it works alongside those apps without removing them or copying your theme. Smart App Loading is US$99 a month with a 7-day free trial.</p>
<p>You can stop when the admin and the page agree, and the mug is the first thing she sees. If an email signup popup is the one getting in first, <a href="https://getwhoosh.ai/blog/does-klaviyo-slow-down-shopify/">whether Klaviyo slows the page</a> walks through that one app.</p>
<p>If the photo itself is heavy, <a href="https://getwhoosh.ai/blog/shopify-image-optimization/">why image optimization still leaves photos slow</a> is the next read. And the <a href="https://getwhoosh.ai/#preview">speed check</a> measures the page the chat opens.</p>
<p>This post first appeared on the <a href="https://getwhoosh.ai/blog/chatgpt-instant-checkout/">Whoosh Blog</a>.</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>
      <dc:creator>Edward Cameron</dc:creator>
      <category>Agentic commerce</category>
      <description>Your customer asks ChatGPT for the blue runners, and before it can buy them the chat has to ask your store a few questions. That's the Agentic Commerce Protocol. On Shopify, Shopify answers for you, so your part is one admin screen and the page the chat sends them to.</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="your-customer-asks-chatgpt-for-the-blue-runners">Your customer asks ChatGPT for the blue runners</h2>
<p>What is the Agentic Commerce Protocol? It’s the way a chat like ChatGPT can place an order with your store on a customer’s behalf, so they can buy without clicking around your website first.</p>
<p>Picture someone on the couch who types into ChatGPT that they want blue running shoes in a size 10. The chat suggests yours, and they reply that those look good and they’d like a pair. At this point nobody has paid, and your website hasn’t opened on their phone.</p>
<p>So how does the chat get from “I’d like a pair” to an order you can pack and send? It has to talk to your store, and it has to know which questions to ask.</p>
<h2 id="what-the-chat-has-to-ask-your-store">What the chat has to ask your store</h2>
<p>The chat needs the same answers your customer would want before handing over a card. Do you have the blue runners in a size 10, and what do they cost once shipping to that address is added? How can this person pay, and once they have, who sends the shoes and tells them where the parcel is?</p>
<p>If your store can answer all of that, the chat can show the customer a checkout right there in the conversation, take their card details, and place the order with you. Their phone never has to load your product page.</p>
<p>The Agentic Commerce Protocol is that list of questions and answers, written down so a chat and a store ask and answer them the same way every time. OpenAI, the company behind ChatGPT, wrote it with the payments company Stripe, and people shorten it to ACP.</p>
<p><a href="https://www.agenticcommerce.dev/docs" target="_blank" rel="noopener">The ACP introduction</a> says the chat shows the checkout and collects the payment details, while the seller keeps the payment setup it already had.</p>
<p>That last part is the one to hold onto. You stay the seller, the order lands with your store, and you’re still the one who posts the blue runners.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/agentic-commerce-protocol/what-the-chat-asks.webp" srcset="/assets/blog/agentic-commerce-protocol/what-the-chat-asks-720.webp 720w, /assets/blog/agentic-commerce-protocol/what-the-chat-asks-1200.webp 1200w, /assets/blog/agentic-commerce-protocol/what-the-chat-asks.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="Four steps between a chat and a store before an order: check the size is in stock, get the price with shipping, agree how the customer pays, and confirm who ships" loading="lazy" decoding="async" width="1800" height="923"><figcaption>If your store can answer all four, the chat can place the order without opening your website.</figcaption></figure>
<h2 id="why-a-shopify-store-only-needs-one-screen">Why a Shopify store only needs one screen</h2>
<p>Here’s the good news, and it’s most of the news. If you sell on Shopify, you don’t set up the Agentic Commerce Protocol yourself, and there’s nothing to paste into your theme.</p>
<p>Shopify wrote its own version of those questions with Google, and <a href="https://www.shopify.com/news/ai-commerce-at-scale" target="_blank" rel="noopener">Shopify announced it on 11 January 2026</a> as the Universal Commerce Protocol. The second name matters less than what it means for you. The chat asks the questions, and Shopify answers them for your store.</p>
<p>You can see those answers for yourself. Take your store’s Shopify address, the one ending in <code>myshopify.com</code> that’s listed in the admin under Settings, then Domains, and add <code>/.well-known/ucp</code> to the end. <a href="https://shopify.dev/docs/agents/profiles" target="_blank" rel="noopener">Shopify’s page on profiles</a> says that address is where your store tells a chat what it can do, including how it takes payment.</p>
<p>It looks like a wall of code, and you don’t need to read it. Don’t try to make your own copy in the theme either, because Shopify writes that page for you.</p>
<p>The screen you do look at is in the admin, under Sales channels, then Agentic. <a href="https://www.shopify.com/blog/what-is-shopify-catalog" target="_blank" rel="noopener">Shopify’s Catalog article</a> says that’s where you see which chats can use your products, and where you switch any of them off. Shopify’s <a href="https://www.shopify.com/news/agentic-commerce-momentum" target="_blank" rel="noopener">24 March 2026 update</a> says products show up in ChatGPT by <strong>default</strong>, so if you’ve never opened that screen, your blue runners may already be in the chat.</p>
<p>So if the chat can buy the shoes, why does your own page still matter? Because not every chat finishes the sale itself. The same Catalog article says some chats send the buyer to your online store, while others can take the payment in the conversation, depending on the chat, the product, and your settings.</p>
<p>In the first ending, your customer pays inside the chat. Shopify’s January post describes a checkout built into Microsoft Copilot that works this way. Your product page never opens, so the photo, the reviews, and any popup aren’t part of that sale.</p>
<p>In the second ending, the chat hands them to you. For ChatGPT, the March update says a Shopify customer finishes in a browser inside the ChatGPT app, or in a new tab on a computer, and it’s your store they’re looking at, with your look and your checkout. That’s the ending you can do something about.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/agentic-commerce-protocol/two-endings.webp" srcset="/assets/blog/agentic-commerce-protocol/two-endings-720.webp 720w, /assets/blog/agentic-commerce-protocol/two-endings-1200.webp 1200w, /assets/blog/agentic-commerce-protocol/two-endings.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="Two panels: a customer paying inside the chat while the store's website stays closed, beside a customer sent from ChatGPT to the store's own page to pay" loading="lazy" decoding="async" width="1800" height="663"><figcaption>Shopify answers the chat either way. Only the right side opens your product page, so that is the side you can prepare.</figcaption></figure>
<aside class="callout callout-key" role="note"><p class="callout-title">Rule of thumb</p><div class="callout-body"><p>On Shopify, the chat’s questions are answered for you. Your part is one look at the Agentic screen, and a product page that’s ready for the customers the chat sends back.</p></div></aside>
<h2 id="what-to-check-before-the-next-customer-asks">What to check before the next customer asks</h2>
<p>Start where your customer starts. Open ChatGPT on your phone and ask for your product the way a shopper would, something like “blue running shoes in a size 10”, then tap through when your store comes up and watch what opens.</p>
<p>If it’s the product page, look at what arrives first. The photo of the blue runners should be on screen before a signup popup or a chat bubble slides over it. <a href="https://web.dev/articles/vitals" target="_blank" rel="noopener">Google’s guidance</a> is that the biggest thing on the page, which here is that photo, should appear within 2.5 seconds for most visits.</p>
<p>That target only applies once a page opens. An order that stayed inside the chat never asked for it, which is why the second ending is the one worth your time.</p>
<p>Some of you are wondering whether to switch the chats off until the page is faster. You don’t need to. A late photo is the same problem whether the customer came from ChatGPT or from an Instagram ad, so leave the chats on and fix the page.</p>
<p>If the popup wins the race, you don’t have to remove the app behind it. Let it wait until the photo is up, and leave Shopify’s payment buttons alone, because that’s where this customer is about to pay.</p>
<p>If the popup belongs to your email app, <a href="https://getwhoosh.ai/blog/does-klaviyo-slow-down-shopify/">whether Klaviyo slows down your store</a> walks through that one. If you want to know whether your store can get a Buy button inside ChatGPT itself, that’s <a href="https://getwhoosh.ai/blog/chatgpt-instant-checkout/">what Instant Checkout is</a>.</p>
<p>Whoosh can’t put you in ChatGPT, and it doesn’t touch the Agentic screen. Its job is the page the chat sends people to. Smart App Loading holds the popups and other extra apps until the product photo is on screen, it works alongside the apps you already have, and it doesn’t copy your theme.</p>
<p>Smart App Loading is US$99 a month with a 7-day free trial, and the <a href="https://getwhoosh.ai/#preview">speed check</a> shows how that product page loads today.</p>
<p>You’re done when you’ve opened the Agentic screen, your <code>/.well-known/ucp</code> address loads, and the photo on the page ChatGPT opened is up before the popup. If the photo is still late after that, the next suspect is whichever app loads ahead of it, not the protocol.</p>
<p>This post first appeared on the <a href="https://getwhoosh.ai/blog/agentic-commerce-protocol/">Whoosh Blog</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>
      <dc:creator>Edward Cameron</dc:creator>
      <category>Speed apps &amp; tools</category>
      <description>Every speed app on the Shopify App Store promises a faster store. Each one clears a different thing out of your product photo's way, and one look at your own product page tells you which one you need.</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="every-speed-app-is-chasing-the-same-photo">Every speed app is chasing the same photo</h2>
<p>Which Shopify speed optimization app should you install? The one that moves whatever is standing between your shopper and the product photo.</p>
<p>Picture someone on their phone tapping your ad for a linen shirt. They came to see the shirt. First they get a white screen, then the layout, then maybe a chat bubble or a row of review stars, and somewhere in all of that the photo of the shirt turns up.</p>
<p>A speed app is paid to make that photo turn up sooner. Google times the same moment and calls it Largest Contentful Paint, and <a href="https://web.dev/articles/vitals" target="_blank" rel="noopener">a good page shows it within 2.5 seconds</a> for most visits.</p>
<p>Here is the part the listings leave out. They all promise a faster store, and each one clears a different thing out of the photo’s way, which is why an app with a wall of five-star reviews can leave your page exactly as it was. We make Whoosh, so it has a row in the table below, and every listing in that table was checked on the Shopify App Store on 28 Sep 2026.</p>
<h2 id="what-stands-in-front-of-the-photo-and-which-app-moves-it">What stands in front of the photo, and which app moves it</h2>
<p>So what is in the way? On a Shopify product page it is usually one of four things, and each one is something your shopper can see.</p>
<p>The first is the design. Before the phone can draw the shirt, it has to read the instructions for your colours, fonts, and layout, and a big theme can make it read all of them before it draws anything. That is the white screen.</p>
<p>Hyperspeed and Thunder copy the few instructions the top of the page needs into the page itself, so the phone can start drawing straight away. People call that critical CSS, and Whoosh does not do it.</p>
<p>The second is the photo file. You uploaded a big, sharp picture, and Shopify already makes smaller copies sized for a phone, which <a href="https://getwhoosh.ai/blog/shopify-image-optimization/">the image post</a> walks through. Image apps like TinySEO squeeze the file you uploaded as well, and they add things around it for Google, like a written description of the photo.</p>
<p>The third is your other apps. Reviews, chat, the email popup, and your ad tracking each put a small program on the page, and if one of those runs first, the shirt waits for it. <a href="https://shopify.dev/docs/storefronts/themes/best-practices/performance" target="_blank" rel="noopener">Shopify’s own theme guide</a> says programs from installed apps compete with the page for the phone’s attention, and it tells you to hold back the ones that get in the way.</p>
<p>Hyperspeed and Thunder both hold those programs back on their paid plans, and Yottaa does it on its paid Optimize add-on. Whoosh puts them in order behind the photo and tells the phone to fetch the product photo first. It knows which photo that is from what real shoppers saw on that page, not from a guess.</p>
<p>The fourth is the next tap. Sometimes the shirt page is fine, and the slow part is when they tap the matching shorts. Booster starts loading a page when the mouse rests on its link, and Thunder has its own version, which it calls predictive link preloading.</p>
<p>Whoosh guesses the page they are most likely to open next and gets it ready before they tap, and it never does that for the cart, checkout, or account pages.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/shopify-speed-optimization-app/four-things.webp" alt="Four numbered cards: the design, the photo file, your other apps, and the next tap, each with the kind of app that clears it" loading="lazy" decoding="async" width="1800" height="923"><figcaption>Each listing clears one or two of these. Find the one in front of your photo before you pick.</figcaption></figure>
<p>Here are those four things again, written against each app. Every price links to the listing it came from.</p>






















































<div class="table-wrap table-wide"><table><thead><tr><th>App</th><th>What it clears for the photo</th><th>How it shows it worked</th><th>Price on the App Store</th><th>The better buy when</th></tr></thead><tbody><tr><th scope="row">Whoosh</th><td>Other apps’ programs, fetching the photo first, the next page; does not copy the theme</td><td>50/50 test on your own sales</td><td><a href="https://apps.shopify.com/whoosh" target="_blank" rel="noopener">US$99 or US$149 a month; 7-day free trial</a></td><td>A popup or chat beats the photo, and you want to see sales move</td></tr><tr><th scope="row">Hyperspeed</th><td>The design, other apps’ programs, photo size</td><td>Speed test scores, such as PageSpeed</td><td><a href="https://apps.shopify.com/hyperspeed" target="_blank" rel="noopener">US$59 a month; 7-day free trial</a></td><td>The white screen is the wait, and you want one plan with everything on</td></tr><tr><th scope="row">Thunder</th><td>The design, other apps’ programs, photos, the next link</td><td>Daily speed score; real-visitor speed from the US$69 plan</td><td><a href="https://apps.shopify.com/thunder" target="_blank" rel="noopener">Free; from US$19.99; US$69 with 500k pageviews, then US$10 per 100k; US$199 a month</a></td><td>The white screen is the wait, and you want a free plan first</td></tr><tr><th scope="row">TinySEO</th><td>Photo size; photos further down load later, on paid plans</td><td>Site audits and SEO reports</td><td><a href="https://apps.shopify.com/smart-image-optimizer" target="_blank" rel="noopener">Free for 50 images a month; US$14, US$23, or US$49 a month</a></td><td>You want photo descriptions and search fixes in the same app</td></tr><tr><th scope="row">Booster</th><td>The next page, when the mouse rests on a link</td><td>No report on the listing</td><td><a href="https://apps.shopify.com/page-speed-optimizer" target="_blank" rel="noopener">Free</a></td><td>The first page is fine and the next one drags</td></tr><tr><th scope="row">Yottaa</th><td>Other apps’ programs, on the paid add-on</td><td>Live screen of real visitors and slow apps</td><td><a href="https://apps.shopify.com/rapid-insite" target="_blank" rel="noopener">Insights free; Optimize US$300 a month under 150k pageviews; 14-day free trial</a></td><td>You want to see which apps are slow before you change anything</td></tr></tbody></table></div>
<aside class="callout callout-key" role="note"><p class="callout-title">Rule of thumb</p><div class="callout-body"><p>Every listing promises a faster store. Each one clears a different thing out of the photo’s way, so buy the one that clears what is in front of yours.</p></div></aside>
<h2 id="the-thing-in-the-way-picks-the-app">The thing in the way picks the app</h2>
<p>If your shopper is staring at a white screen, Whoosh is the wrong app for it. Hyperspeed and Thunder are the better buy there, because they write those early design instructions and we do not.</p>
<p>Thunder starts with a free plan and adds those instructions on its paid plan, while Hyperspeed is a single paid plan with everything switched on. Both change how your theme loads, so preview the change, place a test order, and only then publish it.</p>
<p>If the photo arrives on time and it is the next page that drags, Booster is the better buy, and it costs nothing. If what you really want is photo descriptions and search fixes done for you, TinySEO is the better buy. Just know its photo squeezing overlaps with the copies Shopify already makes.</p>
<p>If you are not ready to change anything and only want to know which of your apps is slow, Yottaa Insights shows you that for free. <a href="https://getwhoosh.ai/blog/whoosh-vs-yottaa/">Whoosh vs Yottaa</a> covers what their paid step adds on top.</p>
<p>If a popup, chat, or reviews box turns up before the shirt, more than one row can help, and the real difference is how you find out it worked. Whoosh does not copy your theme, and it measures the answer in sales: half your visitors get the page with Whoosh on, half get it without, and you compare who bought.</p>
<p>TileCloud published a 10% conversion lift from that test. That is one store’s result, and it is not a promise for yours.</p>
<p>You might be wondering why you cannot install two of these and cover every row. You can, as long as they do different jobs. An image app next to an app that holds back your other apps is fine, because photos and programs are separate things.</p>
<p>The pair to avoid is two apps both told to hold back the same chat program. They end up fighting over one job, and the chat can arrive late or stop working. Pick one owner for your other apps, and never let any of them hold back the checkout or the payment buttons.</p>
<h2 id="check-one-product-page-before-you-install-anything">Check one product page before you install anything</h2>
<p>This takes a few minutes on a laptop, and it tells you which row is yours.</p>
<p>Open the live link to your best-selling product in Chrome, the same link a shopper gets, not the theme preview. Right-click anywhere on the page and choose Inspect, and a panel opens beside it.</p>
<p>Click the Network tab, tick Disable cache, and reload. That tab now lists every file the page downloaded, with a bar showing when each one arrived.</p>
<p>Click Img to show only pictures, and find the shirt by the file name you uploaded. Then click All and look at what arrived before it.</p>
<p>A file from somebody else’s website, with a name like klaviyo or your reviews app, is one of your other apps. A long stretch with nothing on screen while only your theme’s files arrive is the design. A product photo with a big number in the Size column is the photo file.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/shopify-speed-optimization-app/before-after.webp" srcset="/assets/blog/shopify-speed-optimization-app/before-after-720.webp 720w, /assets/blog/shopify-speed-optimization-app/before-after-1200.webp 1200w, /assets/blog/shopify-speed-optimization-app/before-after.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="Two panels: the check on a live product page before installing a speed app, and the same check after, ending with a tap test on the popup, chat, and Add to cart" loading="lazy" decoding="async" width="1800" height="663"><figcaption>If the thing you wrote down did not move, the app is doing a different job.</figcaption></figure>
<p>Write down which one it was, because that is your row in the table. Install that one app, run the same check again, and see whether the thing you wrote down moved behind the photo. Then pick up your phone and tap the popup, the chat, and Add to cart, so you know they all still work.</p>
<p><a href="https://getwhoosh.ai/blog/does-klaviyo-slow-down-shopify/">Does Klaviyo slow down your Shopify store?</a> is this same check pointed at one email popup. If your other apps are what you wrote down, you can <a href="https://getwhoosh.ai/#preview">see what the Whoosh install looks like</a> before you decide.</p>
<p>Own the row that matches what you wrote down, and leave the other rows to the stores that need them.</p>
<p>This post first appeared on the <a href="https://getwhoosh.ai/blog/shopify-speed-optimization-app/">Whoosh Blog</a>.</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>
      <dc:creator>Edward Cameron</dc:creator>
      <category>Apps &amp; scripts</category>
      <description>You added Klaviyo so you can reach shoppers after they leave. That needs a small program on the product page, and it only slows the store when it starts before the product photo.</description>
      <enclosure url="https://getwhoosh.ai/assets/blog/does-klaviyo-slow-down-shopify/cover.png?v=58bee992" type="image/png" length="0" />
      <content:encoded><![CDATA[<h2 id="someone-opens-the-link-to-your-candle">Someone opens the link to your candle</h2>
<p>Does Klaviyo slow down your Shopify store? It can, for the first few seconds on a product page, and those are the seconds when a shopper decides whether to stay.</p>
<p>Picture one person opening the link to your candle on their phone. You added Klaviyo so you can still reach them after they leave, with a welcome offer when they sign up or, if they are already on your list, a reminder about that candle later on.</p>
<p>For either email to happen, Klaviyo has to be on the candle page with them while they are still looking. That is the part that can get in the way, and it is also the part you want to keep.</p>
<h2 id="what-klaviyo-puts-on-the-candle-page">What Klaviyo puts on the candle page</h2>
<p>So what is Klaviyo doing on that page? It runs a small program that the phone downloads from Klaviyo’s own website, a file called <code>klaviyo.js</code>. <a href="https://help.klaviyo.com/hc/en-us/articles/115005076767" target="_blank" rel="noopener">Klaviyo’s help page</a> says that on Shopify you do not paste it in yourself, because the Klaviyo switch in your theme settings adds it, and Shopify calls that switch an app embed.</p>
<p>The program has two jobs on the candle page. It notes that this person looked at this candle, which Klaviyo calls Viewed Product, and <a href="https://help.klaviyo.com/hc/en-us/articles/4425956184731" target="_blank" rel="noopener">Klaviyo’s Shopify setup page</a> says that note is what a reminder email is built from. The same page says the signup forms only work once this is switched on, so the program is also what shows the popup.</p>
<p>Meanwhile, the phone has its own list for that page. It has to fetch the layout, the candle photo, the price and the Add to cart button, and it can only do so much at once. <a href="https://shopify.dev/docs/storefronts/themes/best-practices/performance/audit-remove-third-party-scripts" target="_blank" rel="noopener">Shopify’s performance guide</a> says the browser has one main lane for drawing the page and running programs, and every app’s program competes for time in it.</p>
<p>So when <code>klaviyo.js</code> gets in first, the candle photo waits behind it. The shopper is looking at an empty box where the candle should be, while a program for a later email is starting up. That is the slowdown people mean when they ask about Klaviyo.</p>
<p>People who build websites call a program like this a third-party script, which only means code that comes from another company’s website rather than from your store.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/does-klaviyo-slow-down-shopify/photo-or-program.webp" srcset="/assets/blog/does-klaviyo-slow-down-shopify/photo-or-program-720.webp 720w, /assets/blog/does-klaviyo-slow-down-shopify/photo-or-program-1200.webp 1200w, /assets/blog/does-klaviyo-slow-down-shopify/photo-or-program.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="Two panels: the candle photo, price, and Add to cart button on one side, and Klaviyo's program, product note, and signup popup on the other" loading="lazy" decoding="async" width="1800" height="663"><figcaption>Both sides are worth having. Only the left one is why the shopper opened the link.</figcaption></figure>
<h2 id="why-you-keep-klaviyo-and-let-it-wait">Why you keep Klaviyo and let it wait</h2>
<p>The photo is how you sell the candle today. Klaviyo’s program is how you get a second go at it later. You need both, and they do not need to start at the same moment.</p>
<p>Think about what the popup is asking for. Nobody signs up for news about a candle they have not seen yet, so the form does its job better a few seconds in, once the photo is up and they have had a look. The Viewed Product note still gets made, as long as the program starts before they leave.</p>
<p>I know what some of you are thinking. Why not uninstall Klaviyo and be done with it? Because that also takes away the welcome email and the reminder, which are the reason you installed it. The photo can show up first either way, and only one of those ways keeps the emails.</p>
<p>There are two things you can leave alone. Pausing a campaign or a flow changes what lands in inboxes, not what the candle page downloads. Telling the popup to appear only on your homepage may not help either, because <a href="https://shopify.dev/docs/storefronts/themes/best-practices/performance/audit-remove-third-party-scripts" target="_blank" rel="noopener">Shopify’s guide</a> notes that email popups often load on every page even when they are set to show on only some.</p>
<p>What still has to be right is the order. The candle photo <strong>first</strong>, then Klaviyo’s program, then the popup.</p>
<aside class="callout callout-key" role="note"><p class="callout-title">Rule of thumb</p><div class="callout-body"><p>Keep Klaviyo. Let <code>klaviyo.js</code> start after the product photo is on screen, so the shopper sees the candle before the popup.</p></div></aside>
<h2 id="check-your-product-page-then-change-the-order">Check your product page, then change the order</h2>
<p>Let’s start with what the shopper sees. Open one of your product pages on your phone from a normal link, the way a customer would, rather than from the theme editor. Watch the first few seconds, and notice which arrives first, the photo or the popup, and whether the photo sits blank for a moment.</p>
<p>Next up, the list of files. On a computer, open the same page in Chrome, right-click anywhere and choose Inspect, which opens a panel beside the page. Click the Network tab, which lists every file the page downloads, tick Disable cache so you see what a first visit gets, and reload.</p>
<p>Type klaviyo in the filter box at the top of that list, and you will see <code>klaviyo.js</code> and a few other files from <code>static.klaviyo.com</code>. Clear the filter, click Img so the list shows only pictures, and find the candle photo. If Klaviyo’s files start well before the photo and the photo arrives late, the photo is waiting in line behind them.</p>
<figure class="figure"><img src="https://getwhoosh.ai/assets/blog/does-klaviyo-slow-down-shopify/check-the-product-page.webp" srcset="/assets/blog/does-klaviyo-slow-down-shopify/check-the-product-page-720.webp 720w, /assets/blog/does-klaviyo-slow-down-shopify/check-the-product-page-1200.webp 1200w, /assets/blog/does-klaviyo-slow-down-shopify/check-the-product-page.webp 1800w" sizes="(min-width: 784px) 704px, calc(100vw - 40px)" alt="Three steps: watch a product page open on your phone, open the list of files in Chrome, and compare when Klaviyo's files and the product photo arrive" loading="lazy" decoding="async" width="1800" height="753"><figcaption>One product page is enough to see the order things arrive in.</figcaption></figure>
<p>There are two ways to change that order. Shopify’s guide shows how to start a program like this only after the shopper scrolls, which is a small edit to the theme, and it is a good option if someone already looks after your code.</p>
<p>If you would rather not edit the theme, this is the one job Whoosh does here. Smart App Loading holds programs like <code>klaviyo.js</code> until the product photo is on screen, without copying your theme or uninstalling Klaviyo, and its built-in 50/50 test shows on your own store whether more people buy.</p>
<p>Smart App Loading is US$99 a month with a 7-day free trial. TileCloud’s published case study with Whoosh shows a 10% conversion lift.</p>
<p>If you already have a speed app, check which wait it moves before you add another one. The <a href="https://getwhoosh.ai/blog/shopify-speed-optimization-app/">guide to speed apps</a> sorts the listings by the wait each one fixes, and a popup finishing before the product is one of those waits.</p>
<p>Whichever way you go, test Klaviyo afterwards. <a href="https://help.klaviyo.com/hc/en-us/articles/4425956184731" target="_blank" rel="noopener">Klaviyo’s setup page</a> gives the check: add <code>?utm_email=you@example.com</code> to the end of your homepage address with your own email, reload, open the candle page, then search for your email in Klaviyo and look for Viewed Product on your profile.</p>
<p>Then do what a new shopper would. Open the popup on your phone, sign up with a spare address, and wait for the welcome email to arrive.</p>
<p>Now, when can you stop? Google measures this moment as Largest Contentful Paint, the time until the biggest thing on the screen appears, which on a product page is usually the photo. <a href="https://web.dev/articles/lcp" target="_blank" rel="noopener">Google’s page on it</a> wants that within 2.5 seconds, and the Core Web Vitals report in <a href="https://developers.google.com/search/docs/appearance/core-web-vitals" target="_blank" rel="noopener">Search Console</a> shows whether your real visitors get there.</p>
<p>You are done when <a href="https://web.dev/articles/vitals" target="_blank" rel="noopener">most real visits</a> see the photo in time, or when the file in front of the photo is no longer Klaviyo’s. If it is your reviews or chat app instead, the same fix applies. If the photo itself is the slow download, that is <a href="https://getwhoosh.ai/blog/shopify-image-optimization/">a different check on the photo file</a>, and our <a href="https://getwhoosh.ai/#preview">speed check</a> shows you which of the two you have.</p>
<p>This post first appeared on the <a href="https://getwhoosh.ai/blog/does-klaviyo-slow-down-shopify/">Whoosh Blog</a>.</p>]]></content:encoded>
    </item>
  </channel>
</rss>
