<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Digital Growth &#8211; scandiweb</title>
	<atom:link href="https://scandiweb.com/blog/category/digital-growth/feed/" rel="self" type="application/rss+xml" />
	<link>https://scandiweb.com/blog</link>
	<description>Success Stories &#124; scandiweb blog</description>
	<lastBuildDate>Fri, 30 Oct 2026 10:07:09 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.8</generator>

<image>
	<url>https://scandiweb.com/blog/wp-content/uploads/2022/08/6277b7d3d3ca4eb3c978a38c_favicon-1.png</url>
	<title>Digital Growth &#8211; scandiweb</title>
	<link>https://scandiweb.com/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Black Friday Code Freeze: 2026 Timeline, Load Testing, and Incident Plan</title>
		<link>https://scandiweb.com/blog/black-friday-code-freeze/</link>
		
		<dc:creator><![CDATA[Aigars Pavlovics]]></dc:creator>
		<pubDate>Thu, 29 Oct 2026 13:00:00 +0000</pubDate>
				<category><![CDATA[Digital Growth]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[24/7 support]]></category>
		<category><![CDATA[Black Friday]]></category>
		<category><![CDATA[code freeze]]></category>
		<category><![CDATA[cyber monday]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[ecommerce]]></category>
		<category><![CDATA[eCommerce operations]]></category>
		<category><![CDATA[load testing]]></category>
		<category><![CDATA[peak traffic]]></category>
		<category><![CDATA[site performance]]></category>
		<guid isPermaLink="false">https://scandiweb.com/blog/?p=26181</guid>

					<description><![CDATA[<p>Plan your Black Friday code freeze with 2026 dates, load testing targets, an incident runbook, on-call cover, and safe test orders.</p>
<p>The post <a rel="nofollow" href="https://scandiweb.com/blog/black-friday-code-freeze/">Black Friday Code Freeze: 2026 Timeline, Load Testing, and Incident Plan</a> appeared first on <a rel="nofollow" href="https://scandiweb.com/blog">scandiweb</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="lazyblock-related-BfCfz wp-block-lazyblock-related"><div class="related-services">
  <h3>Related Services</h3>
  <ul>
    
    <li>
      <a  href="https://scandiweb.com/ecommerce-support-services" target=_blank >
        eCommerce Support
      </a>
    </li>
    
    <li>
      <a  href="https://scandiweb.com/services/performance-optimization" target=_blank >
        Performance Optimization
      </a>
    </li>
    
    <li>
      <a  href="https://scandiweb.com/magento-support" target=_blank >
        Magento Support
      </a>
    </li>
    
  </ul>
</div>
</div>


<p class="wp-block-paragraph">If your team is still merging features in late October and someone has just asked when the code freeze starts, the answer for Black Friday 2026 is: new features stop on Monday, November 2, and the last planned deployment goes out on Friday, November 13. Black Friday falls on November 27 and Cyber Monday on November 30. Count back the time you need to load test, fix what breaks, and test again, and the window for risky changes closes in early November.</p>



<p class="wp-block-paragraph">The outage you&#8217;re trying to prevent rarely comes from a big release. One of our support clients launched a large campaign on a Friday, traffic climbed, and the whole site went down. Restarts didn&#8217;t help. The cause was a product label rule meant to cover the whole catalog except five products, set up by selecting every brand, and it made the platform fetch items in a loop. Nobody had deployed code that day.</p>



<p class="wp-block-paragraph">That&#8217;s why this guide treats Black Friday readiness as three engineering jobs: a code freeze that also covers configuration, a load test with a target you can defend, and an incident plan with named people on call. Marketing, merchandising, and promo planning are covered in our <a href="https://scandiweb.com/blog/black-friday-checklist/" target="_blank" rel="noopener">Black Friday and Cyber Monday checklist</a>.</p>



<h2 class="wp-block-heading">What is a code freeze, and what should it cover?</h2>



<p class="wp-block-paragraph">A code freeze is a period when a team stops deploying changes to production, so the live system stays in a known, tested state. For an online store before Black Friday, a code freeze should cover more than application code: configuration, extension and app updates, infrastructure changes, tracking scripts, and price or promotion rules can all take a store down, and none of them needs a developer to deploy.</p>



<p class="wp-block-paragraph">Software teams use the term in two ways. Before a release, a code freeze means no new features, only bug fixes. Before a peak, it means no changes to production at all unless an agreed process approves them. Some teams call the second one a change freeze, which is the more accurate name for eCommerce, because outages like the one above start with changes that never go through a code review.</p>



<p class="wp-block-paragraph">The freeze also protects your test results. A load test only describes the store you tested. Every change after it, even a small one, makes the result less true.</p>



<h3 class="wp-block-heading">What the freeze allows, and what it blocks</h3>



<p class="wp-block-paragraph">A freeze that blocks everything gets ignored by the third day. Agree in writing which changes are allowed, who approves them, and how they&#8217;re tested.</p>



<figure class="wp-block-table"><table><thead><tr><th>Change</th><th>During the freeze</th><th>How it goes live</th></tr></thead><tbody><tr><td>New features, refactoring, dependency upgrades</td><td>Blocked</td><td>After Cyber Monday</td></tr><tr><td>Extension, app, and plugin updates</td><td>Blocked</td><td>After Cyber Monday, unless it&#8217;s a security fix</td></tr><tr><td>Infrastructure, CDN, DNS, and hosting changes</td><td>Blocked</td><td>Only the agreed scale-up, on a scheduled date</td></tr><tr><td>Tag manager containers and third-party scripts</td><td>Blocked</td><td>Publish final versions before the freeze</td></tr><tr><td>Security patches and hotfixes for live bugs</td><td>Allowed</td><td>Emergency change process: staging test, approval, rollback ready</td></tr><tr><td>Catalog, price, and promotion rules</td><td>Allowed, with limits</td><td>Built and tested on staging, applied at an agreed time</td></tr><tr><td>CMS content, banners, and landing pages</td><td>Allowed</td><td>Through the CMS, with no new templates or scripts</td></tr></tbody></table><figcaption class="wp-element-caption">What a Black Friday code freeze blocks and what it allows</figcaption></figure>



<p class="wp-block-paragraph">Tag manager containers belong on the blocked list. A new marketing pixel is code running in every shopper&#8217;s browser, and a slow third-party script can hold up the checkout as effectively as a bad deploy.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/code-freeze-frozen-vs-allowed-changes.png" alt="Two columns listing changes blocked by the code freeze and changes allowed through an emergency change process" class="wp-image-26176" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/code-freeze-frozen-vs-allowed-changes.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/code-freeze-frozen-vs-allowed-changes-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/code-freeze-frozen-vs-allowed-changes-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/code-freeze-frozen-vs-allowed-changes-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/code-freeze-frozen-vs-allowed-changes-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/code-freeze-frozen-vs-allowed-changes-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/code-freeze-frozen-vs-allowed-changes-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">What a Black Friday code freeze blocks and what it allows through a process</figcaption></figure></div>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Quick takeaway</strong></p>  <p>The changes that break stores in November often come from the admin panel and the tag manager, with no deploy at all. If your freeze only stops the deployment pipeline, it covers the smaller risk.</p></div>



<h2 class="wp-block-heading">When should the code freeze start for Black Friday 2026?</h2>



<p class="wp-block-paragraph">For Black Friday 2026, start the feature freeze on Monday, November 2, and allow no major deployments after Friday, November 13, two weeks before Black Friday. That leaves two weeks for load testing and fixes before the strict freeze, and two weeks of stable production before the peak. Keep the freeze in place through Cyber Monday, November 30, and lift it no earlier than Tuesday, December 1.</p>



<p class="wp-block-paragraph">These dates match what our team has seen work for years. In a scandiweb Black Friday panel, Glebs Vrevskis described the usual pattern: &#8220;A common thing we see is code freeze starting from the first days of November, with no new features being released.&#8221; Reinis Groskops added that &#8220;the latest time to do any major deployments is probably 2 weeks before Black Friday.&#8221; The full <a href="https://scandiweb.com/blog/black-friday-how-not-to-f-up-q-and-a/" target="_blank" rel="noopener">Black Friday Q&amp;A with our team</a> covers the rest of their advice.</p>



<figure class="wp-block-table"><table><thead><tr><th>Date (2026)</th><th>Milestone</th><th>What happens</th></tr></thead><tbody><tr><td>Thu–Fri, Oct 29–30</td><td>Scope locked, load testing starts</td><td>Last features picked, everything else moves to December. First test round on a production-sized environment</td></tr><tr><td>Mon, Nov 2</td><td>Feature freeze</td><td>No new features. Bug fixes and test findings only</td></tr><tr><td>Fri, Nov 6</td><td>Capacity booked</td><td>Hosting scale-up requested (Adobe Commerce on cloud: 10 business days ahead is Nov 12 at the latest)</td></tr><tr><td>Fri, Nov 13</td><td>Strict freeze</td><td>Last planned deployment. After this, emergency changes only</td></tr><tr><td>Mon–Fri, Nov 16–20</td><td>Rehearsal week</td><td>Final verification test, runbook walk-through, on-call rota confirmed</td></tr><tr><td>Wed, Nov 25</td><td>Rules applied</td><td>Pre-tested price and promotion rules switched on in the evening</td></tr><tr><td>Thu, Nov 26 – Mon, Nov 30</td><td>Peak</td><td>War room, 24/7 on-call, hourly checks</td></tr><tr><td>Tue, Dec 1</td><td>Review and thaw</td><td>Post-peak review, then the release backlog opens again</td></tr></tbody></table><figcaption class="wp-element-caption">Code freeze timeline for Black Friday 2026</figcaption></figure>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/black-friday-code-freeze-timeline-2026.png" alt="Timeline of the 2026 Black Friday code freeze with feature freeze on November 2 and strict freeze on November 13" class="wp-image-26177" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/black-friday-code-freeze-timeline-2026.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/black-friday-code-freeze-timeline-2026-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/black-friday-code-freeze-timeline-2026-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/black-friday-code-freeze-timeline-2026-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/black-friday-code-freeze-timeline-2026-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/black-friday-code-freeze-timeline-2026-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/black-friday-code-freeze-timeline-2026-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Code freeze timeline for Black Friday 2026, from scope lock to review</figcaption></figure></div>



<p class="wp-block-paragraph">Two dates in the table are easy to miss. If you&#8217;re on Adobe Commerce on cloud infrastructure, <a href="https://experienceleague.adobe.com/en/docs/support-resources/adobe-support-tools-guide/adobe-commerce-support/adobe-commerce-holiday-readiness/holiday-readiness-overview" target="_blank" rel="noopener">Adobe recommends</a> requesting a temporary compute upsize at least 10 business days before a major promotion, and finishing all patching before the code freeze. Promotions don&#8217;t count as emergencies, and Adobe notes that capacity during Black Friday and Cyber Monday is limited, so book early. If you&#8217;re still on a release line close to end of support, check our <a href="https://scandiweb.com/blog/magento-end-of-life/" target="_blank" rel="noopener">Magento end-of-life guide</a> before the freeze, because a patch you can&#8217;t apply in November waits until December.</p>



<p class="wp-block-paragraph">The other date is November 25. Our support team recommends building price and promotion rules on staging, testing them there, and switching them on the evening before the sale, without a customer email going out at the same moment. On high-load stores, that gives the platform a night to reindex before the traffic arrives, and any problem shows up while there&#8217;s still time to fix it. It&#8217;s the lesson from the outage in the introduction: once the rule was rebuilt to exclude five SKUs, it applied in two to three minutes instead of taking the site down for about an hour, and the fix was worth $500,000 in extra sales for that client.</p>



<p class="wp-block-paragraph"><strong>Read more:</strong> <a href="https://scandiweb.com/blog/how-scandiweb-support-saved-sales-event/" target="_blank" rel="noopener">How scandiweb Support Saved a Client&#8217;s Sales Event</a></p>



<p class="wp-block-paragraph">If your sales start earlier, as many now do, move the whole calendar back by the same number of days. Date the freeze from the first day of heavy traffic, whatever the banner says.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Quick takeaway</strong></p>  <p>Set the freeze date from the load-testing plan. Two test rounds with fixes in between take about two weeks, so a store that starts testing in mid-November has already run out of time.</p></div>



<h2 class="wp-block-heading">Black Friday load testing: targets, scenarios, and pass criteria</h2>



<p class="wp-block-paragraph">eCommerce load testing for Black Friday means simulating your expected peak traffic, measured at the busiest minute, on an environment sized like production, and checking that shoppers can still search, add to cart, and pay within agreed response times. Set the target from your own data, script the full buying journey including checkout, and run at least two rounds with fixes in between.</p>



<h3 class="wp-block-heading">Can the site take 5× traffic?</h3>



<p class="wp-block-paragraph">It depends on what the 5 multiplies. Five times an average day is often below a real Black Friday peak. On one Black Friday we supported, visits were up 10,955% on an average day, and concurrent visitors went from a couple of hundred to more than 17,000 as the first campaigns went out.</p>



<p class="wp-block-paragraph">Build the target from numbers you already have:</p>



<ol class="wp-block-list">
<li><strong>Find last year&#8217;s peak minute.</strong> Take the busiest hour from GA4 or your server logs, then look for the minute-level spikes inside it. Email sends and campaign launches create bursts that an hourly average hides.</li>


<li><strong>Apply this year&#8217;s forecast.</strong> Multiply by the growth the business expects and add any new traffic sources, such as a bigger email list or paid budget.</li>


<li><strong>Translate it into load.</strong> Express the target as concurrent sessions, page requests per second, and orders per minute. Orders per minute is the number that matters most, because checkout is the most expensive journey to serve.</li>


<li><strong>Add headroom.</strong> Test at the forecast peak, then at double it, then keep raising the load until something breaks, so you know where the ceiling is and what fails first.</li>

</ol>



<p class="wp-block-paragraph">Black Friday traffic is also different from normal traffic. Most days, shoppers browse cached category pages. After the last deploy before the freeze, <a href="https://scandiweb.com/blog/magento-cache-warmer/" target="_blank" rel="noopener">warm the cache</a> for your top pages so peak traffic doesn&#8217;t start on cold ones. On Black Friday, they add to cart and check out, and those pages aren&#8217;t cached, so the same number of visitors puts far more load on the application and the database.</p>



<h3 class="wp-block-heading">Which scenarios to test</h3>



<p class="wp-block-paragraph">A test that hammers the homepage measures your CDN, and not much else. Script the journeys that make money and the background jobs that run at the same time:</p>



<figure class="wp-block-table"><table><thead><tr><th>Scenario</th><th>Share of simulated users</th><th>Why it matters</th></tr></thead><tbody><tr><td>Browse category and product pages</td><td>50–60%</td><td>Checks caching, images, and search under load</td></tr><tr><td>Search and filtered navigation</td><td>15–20%</td><td>Search and faceted filters often skip the page cache</td></tr><tr><td>Add to cart and view cart</td><td>15–20%</td><td>Uncached, writes to the database</td></tr><tr><td>Checkout with payment</td><td>5–10%</td><td>The slowest journey, plus calls to payment, tax, and shipping services</td></tr><tr><td>Log in and view account or orders</td><td>5%</td><td>Session and customer data under load</td></tr><tr><td>Background: order export, stock sync, imports, cron</td><td>Running throughout</td><td>Shows whether back-office jobs slow the storefront</td></tr><tr><td>Back office: staff processing orders in the admin</td><td>A realistic number of users</td><td>Admin queries compete with shoppers for the same database</td></tr></tbody></table><figcaption class="wp-element-caption">Load testing scenarios and a starting traffic split</figcaption></figure>



<p class="wp-block-paragraph">Point payments at a sandbox or a stub. A load test that sends thousands of real authorizations to your payment provider may trip its fraud checks, and nobody wants to explain that on November 20.</p>



<h3 class="wp-block-heading">Pass criteria that make the result useful</h3>



<p class="wp-block-paragraph">Agree the pass criteria before the first run, so the result is a clear pass or fail. The thresholds below are a starting point to adapt, not a standard:</p>



<figure class="wp-block-table"><table><thead><tr><th>Measure</th><th>Example pass criterion at forecast peak</th></tr></thead><tbody><tr><td>Orders per minute</td><td>Sustained at the forecast peak for at least 30 minutes</td></tr><tr><td>Checkout and cart response time</td><td>95th percentile under 2 seconds per step</td></tr><tr><td>Error rate</td><td>Under 1% of requests, and zero failed orders that the store accepted</td></tr><tr><td>Apdex (Adobe Commerce on cloud, New Relic)</td><td>0.85 or higher, Adobe&#8217;s own target</td></tr><tr><td>Database and application CPU</td><td>Headroom left at the forecast peak, not pinned at 100%</td></tr><tr><td>Queues (orders, emails, stock updates)</td><td>Drain as fast as they fill, with no growing backlog</td></tr></tbody></table><figcaption class="wp-element-caption">Example pass criteria for a Black Friday load test</figcaption></figure>



<p class="wp-block-paragraph">The last row is the one teams forget. On the Black Friday above, the servers held, but orders arrived faster than the order queue could process them, and confirmation emails would have been delayed by days. The fix was a script that moved orders into separate batches on a dedicated instance. A queue-depth check in the load test would have found it earlier.</p>



<p class="wp-block-paragraph"><strong>Read more:</strong> <a href="https://scandiweb.com/blog/scaling-up-to-accommodate-a-40000-increase-in-sales/" target="_blank" rel="noopener">Scaling Up to Accommodate a 40000% Increase in Sales</a></p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/ecommerce-load-testing-ramp-forecast-peak.png" alt="Chart of a load test ramping from forecast peak to double and then to failure, with checkout response time against a 2-second limit" class="wp-image-26178" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/ecommerce-load-testing-ramp-forecast-peak.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ecommerce-load-testing-ramp-forecast-peak-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ecommerce-load-testing-ramp-forecast-peak-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ecommerce-load-testing-ramp-forecast-peak-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ecommerce-load-testing-ramp-forecast-peak-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ecommerce-load-testing-ramp-forecast-peak-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ecommerce-load-testing-ramp-forecast-peak-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">A stepped eCommerce load test, from forecast peak to the break point</figcaption></figure></div>



<h3 class="wp-block-heading">Where to run the load test</h3>



<p class="wp-block-paragraph">Run the main rounds on an environment with the same size, configuration, and CDN setup as production. A staging server with half the CPU tells you little about Black Friday.</p>



<p class="wp-block-paragraph">How you test depends on the platform:</p>



<ul class="wp-block-list">
<li><strong>Adobe Commerce on cloud:</strong> test on a production-sized environment, watch the results in New Relic, and request the temporary upsize you need for the peak. Adobe&#8217;s checklist also covers read replicas, indexers set to Update on Schedule, and asynchronous order processing.</li>


<li><strong>Self-hosted Magento or headless:</strong> you own every layer, so the test has to cover the web servers, database, cache, search engine, message queue, and CDN. Agree any test against production with your host first, and run it at night.</li>


<li><strong>Shopify and Shopify Plus:</strong> Shopify runs and scales the platform, so your test surface is everything you added, such as a headless storefront, custom apps, checkout extensions, and the middleware that connects Shopify to your ERP. Ask Shopify before you point a load generator at the live storefront.</li>

</ul>



<p class="wp-block-paragraph">If the test exposes a slow storefront, our <a href="https://scandiweb.com/blog/magento-2-performance-optimization-with-js-bundling/" target="_blank" rel="noopener">guide to speeding up Magento</a> and <a href="https://scandiweb.com/blog/shopify-performance-optimization/" target="_blank" rel="noopener">Shopify performance playbook</a> cover the usual fixes. For drops and limited releases where demand can exceed any capacity you&#8217;d buy, a <a href="https://scandiweb.com/blog/the-waiting-room-virtual-queuing-for-ecommerce/" target="_blank" rel="noopener">virtual waiting room</a> keeps checkout working for the shoppers already inside.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Quick takeaway</strong></p>  <p>A load test that passes on the first run usually tested too little. Plan for the first round to find the bottleneck, the second to confirm the fix, and the third to find the ceiling.</p></div>



<h3 class="wp-block-heading">What to do when the test finds the ceiling</h3>



<p class="wp-block-paragraph">The ceiling is the traffic level where response times climb and errors start. You can move it before Black Friday in two ways: add capacity, so more servers share the work, or make each request cheaper, so the same servers handle more shoppers.</p>



<p class="wp-block-paragraph">Adding capacity is the quicker lever on most hosting. On Shopify, the platform handles this part for you. On Adobe Commerce on cloud, it is the temporary upsize in the timeline above. On self-hosted Magento, it means more web servers behind the load balancer, and our guide to <a href="https://scandiweb.com/blog/server-autoscaling-in-magento-2/" target="_blank" rel="noopener">server autoscaling in Magento 2</a> explains how to add them automatically. Extra servers cost money for as long as they run, and the database still has to keep up with all of them.</p>



<p class="wp-block-paragraph">Making each request cheaper raises the ceiling without new hardware. Many Black Friday requests reach Magento uncached, such as filtered category pages, searches and the first visits after a cache flush, and Magento builds each of those pages on the server. <a href="https://scandiweb.com/solutions/magento/expedio" target="_blank" rel="noopener">Expedio</a> makes that page build at least 2x faster, so the same servers handle 3x the traffic before response times start to rise. The <a href="https://scandiweb.com/blog/expedio-benchmark/" target="_blank" rel="noopener">Expedio benchmark</a> shows how we measured it on one merchant&#8217;s Hyvä store.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/magento-to-shopify-migration-expedio-magento-2x-faster.png" alt="The Expedio page on scandiweb.com with the headline Magento. 2x faster. and buttons to get Expedio or try the demo" class="wp-image-25972" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/magento-to-shopify-migration-expedio-magento-2x-faster.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/magento-to-shopify-migration-expedio-magento-2x-faster-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/magento-to-shopify-migration-expedio-magento-2x-faster-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/magento-to-shopify-migration-expedio-magento-2x-faster-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/magento-to-shopify-migration-expedio-magento-2x-faster-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/magento-to-shopify-migration-expedio-magento-2x-faster-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/magento-to-shopify-migration-expedio-magento-2x-faster-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Expedio makes Magento at least 2x faster without changing your theme or data</figcaption></figure></div>



<p class="wp-block-paragraph">Treat Expedio like any other release. It installs as a module without changing your theme or data, but it still needs a load test, so put it in before the strict freeze on November 13. If that&#8217;s too tight, plan it for the next peak.</p>




<h2 class="wp-block-heading">The incident plan: runbook, roles, and on-call rotation</h2>



<p class="wp-block-paragraph">An eCommerce incident plan for Black Friday is a short document that says who is on call, how an incident is declared, who decides, and what the first action is for each likely failure. It should name people, list phone numbers for every outside provider, define severity levels, and include a tested rollback, so that at 9 p.m. on Black Friday nobody has to work out the process while the checkout is down.</p>



<p class="wp-block-paragraph">The order of steps matters more than the detail. During an incident, restore sales first, through a rollback, a disabled extension, or a switched payment method. Find the root cause afterward.</p>



<h3 class="wp-block-heading">Roles to name before the peak</h3>



<p class="wp-block-paragraph">Each role needs a named person and a backup for every shift:</p>



<ul class="wp-block-list">
<li><strong>Incident lead:</strong> declares the incident, sets the severity, and keeps the timeline. This person coordinates and doesn&#8217;t debug.</li>


<li><strong>On-call developer:</strong> investigates and applies the fix or rollback.</li>


<li><strong>Infrastructure or hosting contact:</strong> scales, restarts, or fails over servers, and talks to the host.</li>


<li><strong>Business owner:</strong> decides on trade-offs, such as pausing a campaign email or switching off a payment method.</li>


<li><strong>Communications:</strong> posts updates to the team every 30 minutes and decides what customers see, such as a site banner.</li>

</ul>



<h3 class="wp-block-heading">On-call rotation from Thanksgiving to Cyber Monday</h3>



<p class="wp-block-paragraph">Write the on-call rotation down, with names, shifts, and phone numbers, and keep a copy outside Slack, because the person you need may be offline. For the peak weekend, plan for 24/7 cover with handovers at fixed times, a second person on call for severity 1 incidents, and no one on call for more than 12 hours in a row.</p>



<p class="wp-block-paragraph">List the outside contacts in the runbook too: hosting, CDN, payment provider, ERP and warehouse integrations, search, and your agency, each with an emergency number and the account ID they&#8217;ll ask for. If you&#8217;re agreeing response times with an agency for the first time, our guide to <a href="https://scandiweb.com/blog/website-maintenance-cost/">support SLA tiers and 24/7 cover</a> explains what to ask for.</p>



<h3 class="wp-block-heading">Playbooks for the failures you can predict</h3>



<p class="wp-block-paragraph">Most Black Friday website crashes follow a few patterns. Write a first action for each one before the peak:</p>



<figure class="wp-block-table"><table><thead><tr><th>Failure</th><th>First signal</th><th>First action</th></tr></thead><tbody><tr><td>Checkout or payments failing</td><td>Payment success rate drops, checkout errors rise</td><td>Switch to a backup payment method, check the provider&#8217;s status page</td></tr><tr><td>Site slow or down under load</td><td>Response time and error rate climb</td><td>Scale up, switch non-essential extensions and recommendations off, enable the waiting room</td></tr><tr><td>A promo rule misfires</td><td>Wrong prices, or load spikes right after a rule change</td><td>Disable the rule, restore the tested version</td></tr><tr><td>Stock sync or ERP integration stops</td><td>Orders oversell, export queue grows</td><td>Pause the affected products, switch the sync to batch mode</td></tr><tr><td>Order or email queue backs up</td><td>Queue depth grows, confirmation emails delayed</td><td>Add workers or move processing to a separate instance</td></tr><tr><td>Bot traffic or card testing</td><td>Traffic spike with no orders, many failed payments</td><td>Turn on CDN bot rules and rate limits, add a checkout challenge</td></tr></tbody></table><figcaption class="wp-element-caption">Incident playbooks for predictable Black Friday failures</figcaption></figure>



<p class="wp-block-paragraph">Each playbook needs a kill switch: a configuration flag or admin setting that turns the risky feature off without a deploy. Test every one of them during rehearsal week.</p>



<h3 class="wp-block-heading">What to watch on the dashboard</h3>



<p class="wp-block-paragraph">Put the measures that show lost revenue on one screen, compared with the forecast for that hour:</p>



<ul class="wp-block-list">
<li>Orders per minute against the forecast</li>


<li>Payment success rate by method</li>


<li>Checkout and cart error rate</li>


<li>Server response time and error rate</li>


<li>Queue depth for orders, emails, and stock updates</li>


<li>Purchase events arriving in GA4 and your ad platforms</li>

</ul>



<p class="wp-block-paragraph">The last line catches a quiet failure. If purchase events stop arriving, the ad platforms keep spending on the busiest days of the year with no conversion data. If your tracking runs through a <a href="https://scandiweb.com/blog/server-side-tracking/" target="_blank" rel="noopener">server-side tracking setup</a>, add the server container&#8217;s error rate to the same screen.</p>



<p class="wp-block-paragraph">Practice the plan once before it&#8217;s needed. In rehearsal week, simulate one incident, such as a failed payment provider on staging, and time how long it takes from the alert to the workaround.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/black-friday-incident-runbook-roles-escalation.png" alt="Escalation path from a checkout alert to the on-call developer, incident lead, business owner, hosting contact and payment provider" class="wp-image-26179" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/black-friday-incident-runbook-roles-escalation.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/black-friday-incident-runbook-roles-escalation-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/black-friday-incident-runbook-roles-escalation-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/black-friday-incident-runbook-roles-escalation-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/black-friday-incident-runbook-roles-escalation-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/black-friday-incident-runbook-roles-escalation-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/black-friday-incident-runbook-roles-escalation-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">How an incident is escalated during the Black Friday peak</figcaption></figure></div>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Quick takeaway</strong></p>  <p>The incident lead and the person fixing the problem should be two different people. When one person does both, nobody updates the business, and nobody decides whether to pause the email that is still sending traffic to a broken checkout.</p></div>



<h2 class="wp-block-heading">Test orders on production during peak</h2>



<p class="wp-block-paragraph">Yes, you can place test orders on production during the peak, and you should, as long as they follow agreed rules. A small number of real test orders each morning of the peak and after every approved change is the most direct proof that checkout, payment, stock, and order export still work end to end. Agree who places them, how they&#8217;re marked, and how they&#8217;re cancelled and refunded.</p>



<figure class="wp-block-table"><table><thead><tr><th>Method</th><th>Best for</th><th>Watch for</th></tr></thead><tbody><tr><td>Real card, small order, then cancel and refund</td><td>Confirming the live payment path end to end</td><td>Processor fees, and the order reaching the warehouse unless it&#8217;s flagged</td></tr><tr><td>Hidden test product or test customer group</td><td>Order export, emails, and ERP sync</td><td>It must stay hidden from search, feeds, and sitemaps</td></tr><tr><td>Payment provider test mode</td><td>Staging, not live stores</td><td>Shopify says not to switch Shopify Payments test mode on in a store that&#8217;s in production</td></tr><tr><td>Shopify Bogus Gateway</td><td>Shopify test stores</td><td>Other card providers have to be deactivated first, which isn&#8217;t practical on a live store</td></tr></tbody></table><figcaption class="wp-element-caption">Ways to place test orders on a live store</figcaption></figure>



<p class="wp-block-paragraph">Mark every test order clearly, for example with a test customer email and an order note, and tell the warehouse and finance teams which orders to ignore. Exclude them from reporting, or your peak-day numbers will be slightly wrong in every dashboard.</p>



<h2 class="wp-block-heading">FAQ about the Black Friday code freeze</h2>



<h3 class="wp-block-heading">What is a code freeze?</h3>



<p class="wp-block-paragraph">A code freeze is a set period when no changes are deployed to a production system, so it stays in a tested, known state. Before Black Friday, eCommerce teams use a code freeze to protect the store during the peak. A good one also covers configuration, extension updates, tag manager changes, and infrastructure, with an emergency process for security fixes.</p>



<h3 class="wp-block-heading">When should the code freeze start for Black Friday?</h3>



<p class="wp-block-paragraph">For Black Friday 2026, on November 27, start a feature freeze on November 2 and make the last planned deployment on November 13, two weeks before the peak. Use the time in between for load testing and fixes. If your sales start earlier in November, move each date back by the same number of days.</p>



<h3 class="wp-block-heading">How long should a Black Friday code freeze last?</h3>



<p class="wp-block-paragraph">Most stores keep the strict freeze for about two to three weeks: from two weeks before Black Friday until the day after Cyber Monday. For 2026, that means November 13 to December 1. Stores with heavy December trade often keep a lighter freeze until their last Christmas delivery date.</p>



<h3 class="wp-block-heading">Can we deploy a fix during the code freeze?</h3>



<p class="wp-block-paragraph">Yes, through an emergency change process. Security patches (such as the October 2026 <a href="https://scandiweb.com/blog/php2shell/">PHP2Shell fix</a>) and fixes for bugs that hurt sales can go live during the freeze if they&#8217;re tested on staging, approved by a named person, deployed at a quiet hour, and have a rollback ready. Everything else waits until the freeze lifts.</p>



<h3 class="wp-block-heading">Can the site take 5× traffic?</h3>



<p class="wp-block-paragraph">Only a load test can answer that, and only once you define what 5× means. Base the target on last year&#8217;s busiest minute, multiplied by this year&#8217;s forecast, then test at that level, at double it, and up to the break point. Five times an average day is often less than a real Black Friday peak.</p>



<h3 class="wp-block-heading">Should we load test on production?</h3>



<p class="wp-block-paragraph">Run the main load tests on an environment that matches production in size and configuration. Test production itself only with your hosting provider&#8217;s agreement, at a low-traffic hour, with payments pointed at a sandbox. On Shopify, check with Shopify before running load against the live storefront.</p>



<h3 class="wp-block-heading">Can we place test orders on production?</h3>



<p class="wp-block-paragraph">Yes, with rules. Place a few real test orders each morning of the peak and after any approved change, using a small real payment you cancel and refund, or a hidden test product. Mark the orders clearly, tell the warehouse and finance teams, and exclude them from reporting. Don&#8217;t switch payment test modes on in a live store.</p>



<h3 class="wp-block-heading">Who should be on call during Black Friday?</h3>



<p class="wp-block-paragraph">At minimum, an incident lead, an on-call developer, a hosting or infrastructure contact, and a business owner who can pause campaigns or switch payment methods. Cover the full Thanksgiving to Cyber Monday window around the clock, name a backup for each shift, and keep phone numbers for every outside provider in the runbook.</p>



<h2 class="wp-block-heading">Plan the code freeze this week</h2>



<p class="wp-block-paragraph">A Black Friday code freeze works when it starts from the load-testing plan, covers configuration as well as code, and ends with a team that knows who answers the phone. For 2026, that means locking scope this week, testing from late October, freezing features on November 2, and keeping production stable from November 13 through Cyber Monday. Write the runbook now, while there&#8217;s time to rehearse it.</p>



<script type="application/ld+json">
{
 "@context": "https://schema.org",
 "@type": "FAQPage",
 "mainEntity": [
  {
   "@type": "Question",
   "name": "What is a code freeze?",
   "acceptedAnswer": {
    "@type": "Answer",
    "text": "A code freeze is a set period when no changes are deployed to a production system, so it stays in a tested, known state. Before Black Friday, eCommerce teams use a code freeze to protect the store during the peak. A good one also covers configuration, extension updates, tag manager changes, and infrastructure, with an emergency process for security fixes."
   }
  },
  {
   "@type": "Question",
   "name": "When should the code freeze start for Black Friday?",
   "acceptedAnswer": {
    "@type": "Answer",
    "text": "For Black Friday 2026, on November 27, start a feature freeze on November 2 and make the last planned deployment on November 13, two weeks before the peak. Use the time in between for load testing and fixes. If your sales start earlier in November, move each date back by the same number of days."
   }
  },
  {
   "@type": "Question",
   "name": "How long should a Black Friday code freeze last?",
   "acceptedAnswer": {
    "@type": "Answer",
    "text": "Most stores keep the strict freeze for about two to three weeks: from two weeks before Black Friday until the day after Cyber Monday. For 2026, that means November 13 to December 1. Stores with heavy December trade often keep a lighter freeze until their last Christmas delivery date."
   }
  },
  {
   "@type": "Question",
   "name": "Can we deploy a fix during the code freeze?",
   "acceptedAnswer": {
    "@type": "Answer",
    "text": "Yes, through an emergency change process. Security patches and fixes for bugs that hurt sales can go live during the freeze if they're tested on staging, approved by a named person, deployed at a quiet hour, and have a rollback ready. Everything else waits until the freeze lifts."
   }
  },
  {
   "@type": "Question",
   "name": "Can the site take 5× traffic?",
   "acceptedAnswer": {
    "@type": "Answer",
    "text": "Only a load test can answer that, and only once you define what 5× means. Base the target on last year's busiest minute, multiplied by this year's forecast, then test at that level, at double it, and up to the break point. Five times an average day is often less than a real Black Friday peak."
   }
  },
  {
   "@type": "Question",
   "name": "Should we load test on production?",
   "acceptedAnswer": {
    "@type": "Answer",
    "text": "Run the main load tests on an environment that matches production in size and configuration. Test production itself only with your hosting provider's agreement, at a low-traffic hour, with payments pointed at a sandbox. On Shopify, check with Shopify before running load against the live storefront."
   }
  },
  {
   "@type": "Question",
   "name": "Can we place test orders on production?",
   "acceptedAnswer": {
    "@type": "Answer",
    "text": "Yes, with rules. Place a few real test orders each morning of the peak and after any approved change, using a small real payment you cancel and refund, or a hidden test product. Mark the orders clearly, tell the warehouse and finance teams, and exclude them from reporting. Don't switch payment test modes on in a live store."
   }
  },
  {
   "@type": "Question",
   "name": "Who should be on call during Black Friday?",
   "acceptedAnswer": {
    "@type": "Answer",
    "text": "At minimum, an incident lead, an on-call developer, a hosting or infrastructure contact, and a business owner who can pause campaigns or switch payment methods. Cover the full Thanksgiving to Cyber Monday window around the clock, name a backup for each shift, and keep phone numbers for every outside provider in the runbook."
   }
  }
 ]
}
</script>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><style> p.box { border: 1px solid black; padding-top: 30px; padding-right: 30px; padding-bottom: 30px; padding-left: 30px; } </style> <p class="box"><em>Not sure your store will hold at the peak? </em><a href="https://scandiweb.com/contact" target="_blank" rel="noreferrer noopener"><em>Talk to our team about load testing and on-call cover</em></a><em> before the freeze starts.</em></p></p>
<p>The post <a rel="nofollow" href="https://scandiweb.com/blog/black-friday-code-freeze/">Black Friday Code Freeze: 2026 Timeline, Load Testing, and Incident Plan</a> appeared first on <a rel="nofollow" href="https://scandiweb.com/blog">scandiweb</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>We Ranked 5,548 Baltic Brands for AI Search: Meet the Winners</title>
		<link>https://scandiweb.com/blog/baltic-ai-brand-ranking-winners/</link>
		
		<dc:creator><![CDATA[Lina Ivanova]]></dc:creator>
		<pubDate>Wed, 28 Oct 2026 16:04:56 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Digital Growth]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[AEO]]></category>
		<category><![CDATA[AI search optimization]]></category>
		<category><![CDATA[answer engine optimization]]></category>
		<category><![CDATA[AnswerRank]]></category>
		<category><![CDATA[Baltic AI Brand Ranking]]></category>
		<category><![CDATA[Baltic Brand Forum]]></category>
		<category><![CDATA[chatgpt]]></category>
		<category><![CDATA[perplexity]]></category>
		<guid isPermaLink="false">https://scandiweb.com/blog/?p=26463</guid>

					<description><![CDATA[<p>scandiweb's Baltic AI brand ranking scored 5,548 brands by how often ChatGPT, Gemini and Perplexity recommend them. See the top 10 and country winners.</p>
<p>The post <a rel="nofollow" href="https://scandiweb.com/blog/baltic-ai-brand-ranking-winners/">We Ranked 5,548 Baltic Brands for AI Search: Meet the Winners</a> appeared first on <a rel="nofollow" href="https://scandiweb.com/blog">scandiweb</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="lazyblock-related-BaltR wp-block-lazyblock-related"><div class="related-services">
  <h3>Related Services</h3>
  <ul>
    
    <li>
      <a  href="https://scandiweb.com/solutions/aeo-rankings" target=_blank >
        Baltic AI Brand Ranking
      </a>
    </li>
    
    <li>
      <a  href="https://scandiweb.com/services/ai-search-optimization" target=_blank >
        AI Search Optimization
      </a>
    </li>
    
    <li>
      <a  href="https://scandiweb.com/services/ai-content-strategy-for-ecommerce" target=_blank >
        AI Content Strategy
      </a>
    </li>
    
  </ul>
</div>
</div>


<p class="wp-block-paragraph">When a buyer asks ChatGPT, Gemini or Perplexity which bank, airline or pharmacy to choose, the answer names a short list of brands, and the order of that list decides who gets chosen. Knowing where your brand stands in those answers is the first step to being recommended more often.</p>



<p class="wp-block-paragraph">To see where Baltic brands stand, we built the Baltic AI brand ranking. We asked the three assistants 3,419 buyer questions over a month and scored 5,548 companies in 113 industries across Latvia, Estonia and Lithuania, using AnswerRank. Lina Ivanova, our Head of Traffic Acquisition, presented the results at Baltic Brand Forum 2026 in Riga and announced the winners on the main stage.</p>



<p class="wp-block-paragraph">Banks, an airline, a bookstore and a fuel retailer are among this year&#8217;s winners and finalists, and one brand came out on top in three of the four rankings.</p>




<h2 class="wp-block-heading">The top 10 most AI recommended brands in the Baltics</h2>



<p class="wp-block-paragraph">Circle K leads the Baltic list with a score of 92.6, followed by Swedbank at 88.1 and Revolut at 87.8. The Baltic list only includes brands AI names in all three countries. A company that ChatGPT recommends in Latvia alone appears in the Latvian ranking instead. Two banks, a fuel retailer, a car rental company and an airline make up the top five.</p>



<figure class="wp-block-table"><table><thead><tr><th>#</th><th>Company</th><th>Industry</th><th>LV</th><th>EE</th><th>LT</th><th>Score</th></tr></thead><tbody><tr><td>1</td><td>Circle K</td><td>Fuel Retail</td><td>91.5</td><td>93.3</td><td>93.2</td><td>92.6</td></tr><tr><td>2</td><td>Swedbank</td><td>Banking</td><td>89.8</td><td>84.8</td><td>87.8</td><td>88.1</td></tr><tr><td>3</td><td>Revolut</td><td>Digital Banking</td><td>88.4</td><td>83.4</td><td>91.6</td><td>87.8</td></tr><tr><td>4</td><td>SIXT</td><td>Car Rental</td><td>84.0</td><td>89.2</td><td>81.0</td><td>84.7</td></tr><tr><td>5</td><td>airBaltic</td><td>Airlines</td><td>80.0</td><td>86.8</td><td>83.8</td><td>83.5</td></tr><tr><td>6</td><td>DPD</td><td>Parcel Delivery</td><td>88.9</td><td>90.9</td><td>–</td><td>83.3</td></tr><tr><td>7</td><td>Bolt</td><td>Taxi</td><td>87.2</td><td>83.8</td><td>89.0</td><td>82.3</td></tr><tr><td>8</td><td>ERGO</td><td>Insurance</td><td>78.6</td><td>81.2</td><td>86.4</td><td>82.1</td></tr><tr><td>9</td><td>Red Bull</td><td>Energy Drinks</td><td>78.5</td><td>84.3</td><td>82.7</td><td>81.9</td></tr><tr><td>10</td><td>adidas</td><td>Sportswear Manufacturing</td><td>87.5</td><td>70.5</td><td>87.5</td><td>81.8</td></tr></tbody></table><figcaption class="wp-element-caption">Top 10 brands in the Baltic AI Brand Ranking (scores out of 100)</figcaption></figure>



<p class="wp-block-paragraph">DPD has no Lithuania score in the published table, so its LT cell shows a dash.</p>



<p class="wp-block-paragraph">The list continues past these ten, and every industry has its own page with results per country. You can <a href="https://scandiweb.com/solutions/aeo-rankings" target="_blank" rel="noopener">see the full Baltic AI Brand Ranking</a> and search it for any company.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/baltic-ai-brand-ranking-top-10-chart.png" alt="Bar chart of the top 10 brands in the Baltic AI Brand Ranking, led by Circle K at 92.6" class="wp-image-26459" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/baltic-ai-brand-ranking-top-10-chart.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/baltic-ai-brand-ranking-top-10-chart-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/baltic-ai-brand-ranking-top-10-chart-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/baltic-ai-brand-ranking-top-10-chart-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/baltic-ai-brand-ranking-top-10-chart-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/baltic-ai-brand-ranking-top-10-chart-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/baltic-ai-brand-ranking-top-10-chart-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">The top 10 brands in the Baltic AI Brand Ranking, by score out of 100</figcaption></figure></div>



<h2 class="wp-block-heading">Winners and finalists in Latvia, Estonia and Lithuania</h2>



<p class="wp-block-paragraph">Circle K won in Latvia and Lithuania. Rahva Raamat, a bookstore, won in Estonia with 93.5, the highest score among the four winners. The winner of each ranking is the brand ChatGPT, Gemini and Perplexity recommend most, and the finalists hold places 2 to 5. The country lists also include brands AI names in only one or two countries, so the finalists differ from the Baltic top 10.</p>



<h3 class="wp-block-heading">Latvia</h3>



<p class="wp-block-paragraph">Circle K won Latvia with 91.5. The finalists follow.</p>



<ul class="wp-block-list">
<li>2nd place: Jānis Roze, Bookstore, 90.2</li>


<li>3rd place: Swedbank, Banking, 89.8</li>


<li>4th place: Stockmann, Department Store, 89.5</li>


<li>5th place: Tet, IPTV, 89.2</li>

</ul>



<h3 class="wp-block-heading">Estonia</h3>



<p class="wp-block-paragraph">Rahva Raamat won Estonia with 93.5. The finalists follow.</p>



<ul class="wp-block-list">
<li>2nd place: Circle K, Fuel Retail, 93.3</li>


<li>3rd place: DPD, Parcel Delivery, 90.9</li>


<li>4th place: Benu, Pharmacy, 89.7</li>


<li>5th place: Selver, Online Grocery Delivery, 89.4</li>

</ul>



<h3 class="wp-block-heading">Lithuania</h3>



<p class="wp-block-paragraph">Circle K won Lithuania with 93.2. The finalists follow.</p>



<ul class="wp-block-list">
<li>2nd place: Revolut, Digital Banking, 91.6</li>


<li>3rd place: Pigu, eCommerce Platform, 91.1</li>


<li>4th place: Maxima, Grocery / Supermarket, 90.7</li>


<li>5th place: Verslo Žinios, Business News, 90.6</li>

</ul>



<p class="wp-block-paragraph">Two things stand out in the country results. Circle K won three of the four rankings and finished second in Estonia, 0.2 points behind Rahva Raamat. Bookstores also do well: Rahva Raamat won Estonia, Jānis Roze is second in Latvia and Pegasas leads the Lithuanian bookstore category with 86.5. You can see <a href="https://scandiweb.com/solutions/aeo-rankings/winners" target="_blank" rel="noopener">all winners and finalists</a>, including the company AI names first in each of the 113 industries, on the winners page.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="1114" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/lina-ivanova-ai-ranking-winners-announcement.png" alt="Lina Ivanova and the event host on the Baltic Brand Forum stage in front of the Baltic Brand Forum screen" class="wp-image-26481" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/lina-ivanova-ai-ranking-winners-announcement.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/lina-ivanova-ai-ranking-winners-announcement-300x200.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/lina-ivanova-ai-ranking-winners-announcement-1024x682.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/lina-ivanova-ai-ranking-winners-announcement-150x100.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/lina-ivanova-ai-ranking-winners-announcement-768x512.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/lina-ivanova-ai-ranking-winners-announcement-1536x1023.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/lina-ivanova-ai-ranking-winners-announcement-1600x1066.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Lina Ivanova and the host announcing the AI ranking winners on stage at Baltic Brand Forum in Riga</figcaption></figure></div>



<h2 class="wp-block-heading">How the Baltic AI Brand Ranking was measured</h2>



<p class="wp-block-paragraph">We ran the study in <a href="https://scandiweb.com/blog/answerrank-brand-visibility-ai-search-leaderboard/" target="_blank" rel="noopener">AnswerRank</a>, our AI search monitoring tool. Over a month, AnswerRank put the same buyer questions to ChatGPT, Gemini and Perplexity for each industry in Latvia, Estonia and Lithuania, 3,419 questions across 113 industries, and recorded every company named in the answers. For each company it tracks how often the answers mention it, how they describe it and where in the answer it appears. A brand only appears in the ranking if AI named it, and the questions behind each industry are listed on that industry&#8217;s page of the ranking.</p>



<h3 class="wp-block-heading">Three measures in one score</h3>



<p class="wp-block-paragraph">Each company gets one score out of 100, built from three measures.</p>



<figure class="wp-block-table"><table><thead><tr><th>Measure</th><th>What it means</th><th>Weight</th></tr></thead><tbody><tr><td>Visibility</td><td>Share of answers that name the brand</td><td>Counts most</td></tr><tr><td>Sentiment</td><td>How favorably the answers describe the brand</td><td>Second</td></tr><tr><td>Average position</td><td>Where the brand appears in the answer, 1 = first</td><td>Separates close scores</td></tr></tbody></table><figcaption class="wp-element-caption">The three measures behind the AI brand score</figcaption></figure>



<p class="wp-block-paragraph">The ranking is independent and built by scandiweb. Baltic Brand Forum does not operate the ranking, and it is separate from the forum&#8217;s own Baltic Brand Awards, which are based on Norstat&#8217;s Brand Capital research.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/ai-brand-score-visibility-sentiment-position.png" alt="Diagram of visibility, sentiment and average position combining into one AI brand score out of 100" class="wp-image-26460" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/ai-brand-score-visibility-sentiment-position.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ai-brand-score-visibility-sentiment-position-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ai-brand-score-visibility-sentiment-position-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ai-brand-score-visibility-sentiment-position-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ai-brand-score-visibility-sentiment-position-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ai-brand-score-visibility-sentiment-position-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ai-brand-score-visibility-sentiment-position-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">How the AI brand score combines visibility, sentiment and position</figcaption></figure></div>



<h2 class="wp-block-heading">Why AI recommendations matter for your brand</h2>



<p class="wp-block-paragraph">When a buyer asks an assistant which bank or pharmacy to use, the answer is a short list, and the order of that list decides who gets seen. Across our industry rankings, the brand named first appears in 67% of answers on average. The brand in fifth place appears in 22%. First place is close to the default answer, while fifth place is an occasional mention.</p>



<p class="wp-block-paragraph">The ranking page breaks results down by industry and by country, and the same question often gets a different answer in each market. Maxima is the grocery chain AI names first in Latvia and Lithuania, while Prisma leads in Estonia. In parcel delivery, Omniva leads Latvia, DPD leads Estonia and Venipak leads Lithuania. A brand that is well placed in one country needs its own check in the other two.</p>



<p class="wp-block-paragraph">Visibility in AI answers is the subject of answer engine optimization, or AEO. If the term is new to you, read our post on <a href="https://scandiweb.com/blog/what-is-answer-engine-optimization-aeo/" target="_blank" rel="noopener">what answer engine optimization is</a> first. The short version is that assistants build answers from the pages and third-party sources they can read, and a brand can change what those sources say about it.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Quick takeaway</strong></p>  <p>If ChatGPT, Gemini or Perplexity leave your brand out of an answer, the buyer who asked never sees it as an option. Being named at all is the first thing to check, before position or sentiment.</p></div>



<h2 class="wp-block-heading">Announced on stage at Baltic Brand Forum</h2>



<p class="wp-block-paragraph">scandiweb was an official partner of Baltic Brand Forum 2026, held on September 24–25, 2026 at Riga Circus under the theme &#8220;Stand Out&#8221;. Lina Ivanova, our Head of Traffic Acquisition, spoke on the main stage with the talk &#8220;When Buyers Ask AI What to Buy, Is Your Brand in the Answer?&#8221; and announced the winners of the AI ranking from that stage.</p>



<p class="wp-block-paragraph">Brands that heard their name in the hall can find their full industry results on the ranking page.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="1115" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/lina-ivanova-speaking-baltic-brand-forum.png" alt="Lina Ivanova on stage at Baltic Brand Forum in front of a slide on the battle for brand visibility" class="wp-image-26468" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/lina-ivanova-speaking-baltic-brand-forum.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/lina-ivanova-speaking-baltic-brand-forum-300x200.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/lina-ivanova-speaking-baltic-brand-forum-1024x683.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/lina-ivanova-speaking-baltic-brand-forum-150x100.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/lina-ivanova-speaking-baltic-brand-forum-768x512.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/lina-ivanova-speaking-baltic-brand-forum-1536x1024.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/lina-ivanova-speaking-baltic-brand-forum-1600x1067.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Lina Ivanova speaking about AI search on the main stage at Baltic Brand Forum in Riga</figcaption></figure></div>



<h2 class="wp-block-heading">How to move your brand up in AI answers</h2>



<p class="wp-block-paragraph">AI search optimization builds on SEO. Assistants that search the web read pages that search engines can find, so the technical work you already do for Google still counts. Two more things need attention on top of it: the full-sentence questions buyers ask and the third-party sources AI quotes. Our guide on <a href="https://scandiweb.com/solutions/aeo-rankings/how-to-rank-in-ai-search" target="_blank" rel="noopener">how to rank in AI search</a> covers each step in detail. The short version follows.</p>



<ol class="wp-block-list">
<li>Find the questions buyers ask, such as which bank in Lithuania has the lowest fees.</li>


<li>Check where AI places you today by searching the ranking for your company and noting your visibility, sentiment, average position and the competitors named ahead of you.</li>


<li>Answer those questions on your own site, covering what you sell, where you deliver and what it costs, with one page per market in its own language.</li>


<li>Get mentioned in the sources AI reads, including review sites, comparison articles, directories and news coverage.</li>


<li>Make your site readable for AI crawlers, with key content in HTML, structured data in place and a robots.txt that does not block GPTBot, OAI-SearchBot, PerplexityBot or Google-Extended.</li>


<li>Keep your facts the same everywhere, so your company name, address and product details match across your site, Google Business Profile, social profiles and directories.</li>


<li>Work on what AI says about you by answering reviews, fixing the problems customers keep mentioning and correcting outdated facts on third-party pages.</li>


<li>Measure the same questions every month, because AI answers change as the assistants update their sources.</li>

</ol>



<p class="wp-block-paragraph">For the measurement in step 8, see our post on <a href="https://scandiweb.com/blog/tracking-brand-mentions-in-llm-ai-generated-answers/" target="_blank" rel="noopener">tracking brand mentions in AI-generated answers</a>.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Quick takeaway</strong></p>  <p>Open your robots.txt and check that it does not block GPTBot, OAI-SearchBot, PerplexityBot or Google-Extended. It is the quickest item on the list to verify.</p></div>



<h2 class="wp-block-heading">Where does your brand stand?</h2>



<p class="wp-block-paragraph">Search the <a href="https://scandiweb.com/solutions/aeo-rankings" target="_blank" rel="noopener">Baltic AI Brand Ranking</a> for your company name. The result shows your visibility, sentiment and average position, and the competitors named ahead of you. If your brand is missing from the Baltic list, check the country rankings first, since they include brands named in fewer than three countries. If it is still not there, use the <a href="https://scandiweb.com/solutions/aeo-rankings/dont-see-your-brand" target="_blank" rel="noopener">Don&#8217;t see your brand?</a> page.</p>



<h2 class="wp-block-heading">FAQ</h2>



<h3 class="wp-block-heading">What is the Baltic AI Brand Ranking?</h3>



<p class="wp-block-paragraph">It is an independent ranking of 5,548 companies in 113 industries across Latvia, Estonia and Lithuania, ordered by how often ChatGPT, Gemini and Perplexity recommend them. scandiweb built it and gathered the data with AnswerRank, asking 3,419 buyer questions over a month. Each company gets one score out of 100 based on visibility, sentiment and average position.</p>



<h3 class="wp-block-heading">Which brand does AI recommend most in the Baltics?</h3>



<p class="wp-block-paragraph">Circle K, with a Baltic score of 92.6. Swedbank is second at 88.1 and Revolut third at 87.8. By country, Circle K also won Latvia with 91.5 and Lithuania with 93.2, while Rahva Raamat won Estonia with 93.5. Each of the 113 industries has its own leader per country, listed on the winners page.</p>



<h3 class="wp-block-heading">How is the AI brand score calculated?</h3>



<p class="wp-block-paragraph">Visibility is the share of answers that mention the company. Sentiment is how favorably the answers describe it. Average position is where the company appears in the answer, with 1 meaning first. The score rolls the three into one number out of 100. Visibility is weighted most, sentiment second, and position separates brands whose scores are close.</p>



<h3 class="wp-block-heading">Is the ranking connected to the Baltic Brand Awards?</h3>



<p class="wp-block-paragraph">No. The Baltic AI Brand Ranking is independent, built by scandiweb and announced at Baltic Brand Forum, where scandiweb was an official partner. The forum&#8217;s Baltic Brand Awards are a separate program based on Norstat&#8217;s Brand Capital research. A brand can win one and not appear in the other, so the two should not be read as a single result.</p>



<h3 class="wp-block-heading">Why is my brand not in the ranking?</h3>



<p class="wp-block-paragraph">There are four common reasons. AI did not name your brand for your industry&#8217;s questions. Your brand is listed under another name, as Rimi Eesti Food is in Estonia. Your brand is named in only one or two countries, which keeps it off the Baltic list but still in the country rankings. Or your industry was not among the 113 tested.</p>



<h3 class="wp-block-heading">How long does it take to move up in AI answers?</h3>



<p class="wp-block-paragraph">There is no fixed timeline. Each assistant refreshes its sources at its own pace, so a change on your site or in a third-party source shows up in ChatGPT, Gemini and Perplexity at different times. That is why the last step in our guide is to measure the same questions every month and compare the results.</p>



<h2 class="wp-block-heading">What the ranking means for your brand</h2>



<p class="wp-block-paragraph">The Baltic AI brand ranking gives you a measured answer to a question most brand teams have only guessed at: whether ChatGPT, Gemini and Perplexity name you when a buyer in Latvia, Estonia or Lithuania asks what to choose. Circle K, Swedbank and Revolut lead the Baltic list, Rahva Raamat leads Estonia, and 113 industries have their own leaders in each country. The gap between first and fifth place, 67% of answers against 22%, is the number to keep in mind. Congratulations again to the winners and finalists. For everyone else, the eight steps above are where to start, and the ranking page is where to check your position today.</p>



<script type="application/ld+json">{"@context": "https://schema.org", "@type": "Article", "headline": "We Ranked 5,548 Baltic Brands for AI Search: Meet the Winners", "author": {"@type": "Person", "name": "Lina Ivanova", "jobTitle": "Head of Traffic Acquisition"}, "publisher": {"@type": "Organization", "name": "scandiweb", "url": "https://scandiweb.com"}, "about": {"@type": "Dataset", "name": "Baltic AI Brand Ranking", "url": "https://scandiweb.com/solutions/aeo-rankings"}, "mainEntityOfPage": "https://scandiweb.com/blog/baltic-ai-brand-ranking-winners/"}</script>
<script type="application/ld+json">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "What is the Baltic AI Brand Ranking?", "acceptedAnswer": {"@type": "Answer", "text": "It is an independent ranking of 5,548 companies in 113 industries across Latvia, Estonia and Lithuania, ordered by how often ChatGPT, Gemini and Perplexity recommend them. scandiweb built it and gathered the data with AnswerRank, asking 3,419 buyer questions over a month. Each company gets one score out of 100 based on visibility, sentiment and average position."}}, {"@type": "Question", "name": "Which brand does AI recommend most in the Baltics?", "acceptedAnswer": {"@type": "Answer", "text": "Circle K, with a Baltic score of 92.6. Swedbank is second at 88.1 and Revolut third at 87.8. By country, Circle K also won Latvia with 91.5 and Lithuania with 93.2, while Rahva Raamat won Estonia with 93.5. Each of the 113 industries has its own leader per country, listed on the winners page."}}, {"@type": "Question", "name": "How is the AI brand score calculated?", "acceptedAnswer": {"@type": "Answer", "text": "Visibility is the share of answers that mention the company. Sentiment is how favorably the answers describe it. Average position is where the company appears in the answer, with 1 meaning first. The score rolls the three into one number out of 100. Visibility is weighted most, sentiment second, and position separates brands whose scores are close."}}, {"@type": "Question", "name": "Is the ranking connected to the Baltic Brand Awards?", "acceptedAnswer": {"@type": "Answer", "text": "No. The Baltic AI Brand Ranking is independent, built by scandiweb and announced at Baltic Brand Forum, where scandiweb was an official partner. The forum's Baltic Brand Awards are a separate program based on Norstat's Brand Capital research. A brand can win one and not appear in the other, so the two should not be read as a single result."}}, {"@type": "Question", "name": "Why is my brand not in the ranking?", "acceptedAnswer": {"@type": "Answer", "text": "There are four common reasons. AI did not name your brand for your industry's questions. Your brand is listed under another name, as Rimi Eesti Food is in Estonia. Your brand is named in only one or two countries, which keeps it off the Baltic list but still in the country rankings. Or your industry was not among the 113 tested."}}, {"@type": "Question", "name": "How long does it take to move up in AI answers?", "acceptedAnswer": {"@type": "Answer", "text": "There is no fixed timeline. Each assistant refreshes its sources at its own pace, so a change on your site or in a third-party source shows up in ChatGPT, Gemini and Perplexity at different times. That is why the last step in our guide is to measure the same questions every month and compare the results."}}]}</script>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><style> p.box { border: 1px solid black; padding-top: 30px; padding-right: 30px; padding-bottom: 30px; padding-left: 30px; } </style> <p class="box"><em> </em><a href="https://scandiweb.com/contact" target="_blank" rel="noreferrer noopener"><em>Get a measurement of where AI places your brand</em></a><em>, and we will show you which questions it is missing from.</em></p></p>
<p>The post <a rel="nofollow" href="https://scandiweb.com/blog/baltic-ai-brand-ranking-winners/">We Ranked 5,548 Baltic Brands for AI Search: Meet the Winners</a> appeared first on <a rel="nofollow" href="https://scandiweb.com/blog">scandiweb</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Faceted Navigation SEO: Which Filter Pages to Index and Which to Block</title>
		<link>https://scandiweb.com/blog/faceted-navigation-seo/</link>
		
		<dc:creator><![CDATA[Lina Ivanova]]></dc:creator>
		<pubDate>Thu, 22 Oct 2026 14:00:00 +0000</pubDate>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[canonical tag]]></category>
		<category><![CDATA[crawl budget]]></category>
		<category><![CDATA[eCommerce SEO]]></category>
		<category><![CDATA[faceted navigation]]></category>
		<category><![CDATA[indexing]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[robotstxt]]></category>
		<category><![CDATA[Shopify]]></category>
		<category><![CDATA[technical SEO]]></category>
		<guid isPermaLink="false">https://scandiweb.com/blog/?p=26193</guid>

					<description><![CDATA[<p>Faceted navigation SEO for eCommerce: which filter pages to index, which to block, and how to set both up on Magento and Shopify.</p>
<p>The post <a rel="nofollow" href="https://scandiweb.com/blog/faceted-navigation-seo/">Faceted Navigation SEO: Which Filter Pages to Index and Which to Block</a> appeared first on <a rel="nofollow" href="https://scandiweb.com/blog">scandiweb</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="lazyblock-related-FcNav wp-block-lazyblock-related"><div class="related-services">
  <h3>Related Services</h3>
  <ul>
    
    <li>
      <a  href="https://scandiweb.com/seo-services" target=_blank >
        eCommerce SEO
      </a>
    </li>
    
    <li>
      <a  href="https://scandiweb.com/magento-seo-services" target=_blank >
        Magento SEO
      </a>
    </li>
    
    <li>
      <a  href="https://scandiweb.com/shopify-services/development" target=_blank >
        Shopify Development
      </a>
    </li>
    
  </ul>
</div>
</div>


<p class="wp-block-paragraph">If your developer says the filter pages are wasting crawl budget and someone in marketing wants every filtered URL indexed for long-tail traffic, you&#8217;re probably waiting to find out which of them is right. Faceted navigation SEO usually gets argued as a choice between those two camps: block every filter URL, or let Google have them all.</p>



<p class="wp-block-paragraph">Neither works on a real catalog. One category with six filters can produce over half a million URL combinations, and almost none of them match anything a shopper types. A few do, and &#8220;black leather ankle boots&#8221; alone gets about 1,200 searches a month in the US. The job is to find those few, give them proper pages, and keep Google away from everything else, on Magento, Shopify, or any other platform.</p>



<h2 class="wp-block-heading">What faceted navigation SEO decides</h2>



<p class="wp-block-paragraph">Faceted navigation SEO, sometimes called faceted search SEO, is the set of rules that decides which filter combinations on your category pages search engines may crawl and which they may index. Filters for color, size, brand, or price each add a parameter or path to the URL, and filters combine. The SEO work is choosing the small set of filtered pages that deserve to rank and keeping crawlers out of the rest.</p>



<p class="wp-block-paragraph">Those are two separate decisions. Crawling is whether Googlebot fetches the URL at all. Indexing is whether the page can appear in search results. robots.txt controls the first, while canonical tags and noindex act on the second, and mixing them up causes many of the problems we find in store audits.</p>



<p class="wp-block-paragraph">The scale is what makes it urgent. Take one category with six filters: 12 colors, 10 sizes, 20 brands, 5 price bands, 6 materials, and 4 sort orders. If a shopper can pick one value per filter, that category alone has about 630,000 possible URLs. Allow two colors at once, or let the parameters appear in any order, and the number keeps growing. Google&#8217;s own guidance on faceted navigation says filters can generate &#8220;infinite URL spaces&#8221;, and that crawlers often fetch many of these URLs before they recognize them as low value.</p>



<h2 class="wp-block-heading">Crawl waste vs long-tail opportunity</h2>



<p class="wp-block-paragraph">Both arguments in your team are about real effects. Filter URLs do use up crawling that could go to new products, and some filter combinations do match searches your main categories can&#8217;t win. The answer is to measure each side on your own store before choosing.</p>



<h3 class="wp-block-heading">Are filter pages wasting crawl budget?</h3>



<p class="wp-block-paragraph">They can be, once enough filter URLs are open to crawlers. Google&#8217;s crawl budget guide is written for sites with more than a million pages that change weekly, sites with 10,000+ pages that change daily, and sites with many URLs in &#8220;Discovered – currently not indexed&#8221;. A store with layered navigation can land in that last group with only a few thousand products, because the filters multiply the URL count far past the catalog size.</p>



<p class="wp-block-paragraph">Three checks tell you whether it&#8217;s happening on your store:</p>



<ol class="wp-block-list">
<li>In Search Console, open Settings and then the Crawl stats report. Compare the number of daily requests with the number of products and categories you sell, and look for filter parameters in the example URLs under each response type</li>


<li>In the Page indexing report, a large and growing &#8220;Discovered – currently not indexed&#8221; count full of filter URLs means Google keeps putting off crawling them. Our guide to <a href="https://scandiweb.com/blog/duplicate-without-user-selected-canonical/" target="_blank" rel="noopener">Search Console statuses like duplicate without user-selected canonical</a> explains how to read each status</li>


<li>In your server logs, group Googlebot requests by URL pattern. If filter and sort URLs take a bigger share of requests than product pages, crawling is going to the wrong place</li>

</ol>



<p class="wp-block-paragraph">The cost shows up as slower discovery. New products and price changes take longer to reach search, because Googlebot is busy with URLs like ?color=black&amp;size=9&amp;sort=price_asc.</p>



<h3 class="wp-block-heading">Where the long-tail demand is</h3>



<p class="wp-block-paragraph">The opportunity is also real, but it shrinks fast as filters stack up. Here is the US search volume ladder for one footwear category, from Ahrefs in October 2026:</p>



<ul class="wp-block-list">
<li>ankle boots: 27,000 searches a month</li>


<li>black ankle boots: 5,400</li>


<li>black leather ankle boots: 1,200</li>


<li>black leather ankle boots size 8: 0</li>

</ul>



<p class="wp-block-paragraph">The same pattern repeats in other categories. &#8220;Mens linen shirts&#8221; gets 8,200 searches and &#8220;blue linen shirt men&#8221; gets 300. &#8220;Green velvet sofa&#8221; gets 3,300. One attribute on top of a category often carries real demand, a second one sometimes does, and size, price, or availability on top of that almost never does.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-search-demand-ladder.png" alt="Bar chart of faceted navigation SEO demand: ankle boots 27,000, black 5,400, black leather 1,200, plus size 8 zero searches" class="wp-image-26189" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-search-demand-ladder.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-search-demand-ladder-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-search-demand-ladder-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-search-demand-ladder-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-search-demand-ladder-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-search-demand-ladder-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-search-demand-ladder-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Search demand drops sharply as filters stack on a category page</figcaption></figure></div>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>The two camps are usually arguing about different URLs. Crawl waste comes from deep combinations nobody searches for, and the long-tail value comes from shallow ones, so one rule can satisfy both.</p></div>



<h2 class="wp-block-heading">The decision rule: which filter combinations deserve an indexable URL</h2>



<p class="wp-block-paragraph">A filter combination deserves an indexable URL when people search for it as a phrase, the parent category doesn&#8217;t already answer that search, enough products stay on the page, it adds no more than one or two filters to the category, and you can give it a stable page of its own. Every combination that fails any of these tests stays out of the index, and most should stay out of the crawl.</p>



<p class="wp-block-paragraph">Run each candidate through the five tests in order. The first two decide most cases.</p>



<ol class="wp-block-list">
<li>Search demand: check the phrase a shopper would type, such as &#8220;black leather ankle boots&#8221;, in a keyword tool for your main market. Pick one threshold for the whole catalog, for example 50 searches a month, and apply it the same way to every candidate</li>


<li>Different intent from the parent: someone searching &#8220;green velvet sofa&#8221; wants green velvet sofas and would be let down by the full sofa category. Someone searching &#8220;sofas under $1,000&#8221; is usually happy on the sofa category with a price filter. Color, material, style, brand, and use case tend to pass. Size, price, and availability tend to fail</li>


<li>Enough products, consistently: the page needs enough products to fill at least the first screen, in a range that doesn&#8217;t empty out every few weeks. A filter page that drops to zero products turns into a soft 404</li>


<li>One or two filters deep: a category plus one attribute, or plus two at most, like brand and type. Three or more filters almost never pass test 1</li>


<li>A stable page you can own: one clean URL, its own title, H1, and short intro copy, and links from the parent category. If your platform can only produce the combination as a parameter URL whose order changes, build a dedicated page for it instead</li>

</ol>



<p class="wp-block-paragraph">Everything that fails goes into one of two groups. Single filters with no demand can stay crawlable with a canonical tag pointing to the category, as long as their number stays small. Deeper combinations, sort orders, page-size options, and price ranges should be blocked from crawling.</p>



<figure class="wp-block-table"><table><thead><tr><th>Filter type</th><th>Example</th><th>What to do</th></tr></thead><tbody><tr><td>Category plus one high-demand attribute</td><td>black leather ankle boots</td><td>Give it its own indexable page</td></tr><tr><td>Category plus two attributes with demand</td><td>Nike running shoes for women</td><td>Own page, only if it passes all five tests</td></tr><tr><td>Single filter with no search demand</td><td>in stock only, 4 stars and up</td><td>Canonical to the category, or block</td></tr><tr><td>Two or more filters with no demand</td><td>black, size 8, under $100</td><td>Block in robots.txt</td></tr><tr><td>Sort order, page size, grid or list view</td><td>price low to high, 48 per page</td><td>Block in robots.txt</td></tr><tr><td>Combination with no products</td><td>red boots in size 15</td><td>Return a 404</td></tr><tr><td>Internal search results</td><td>/search?q=boots</td><td>Block in robots.txt</td></tr></tbody></table><figcaption class="wp-element-caption">Faceted navigation SEO decision table: what to do with each type of filter URL</figcaption></figure>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-decision-rule-flow.png" alt="Decision flow for faceted navigation SEO with five tests leading to index, canonical to category, or block in robots.txt" class="wp-image-26190" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-decision-rule-flow.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-decision-rule-flow-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-decision-rule-flow-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-decision-rule-flow-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-decision-rule-flow-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-decision-rule-flow-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-decision-rule-flow-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Five tests decide which filter combinations get an indexable URL</figcaption></figure></div>



<h3 class="wp-block-heading">Should filtered URLs be indexed?</h3>



<p class="wp-block-paragraph">Only the few that pass all five tests, and usually as dedicated pages. Next to the number of possible filter URLs, that list is short. Leaving the rest out of the index doesn&#8217;t cost traffic, because nobody searches for them, and it keeps the category pages as the clear target for their head terms. Our <a href="https://scandiweb.com/blog/duplicate-content-seo-ecommerce-complete-guide/" target="_blank" rel="noopener">duplicate content guide</a> covers what happens when thousands of near-identical filter pages compete with the category instead.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Write the list of indexable combinations down and give it an owner. Without a list, every new filter the merchandising team adds becomes a crawl and index decision that nobody made.</p></div>



<h2 class="wp-block-heading">Index, noindex, canonical or robots.txt: what each does to filter URLs</h2>



<p class="wp-block-paragraph">Use robots.txt to stop crawling of filter URLs you never want in search, a canonical tag for small sets of single-filter pages that should pass their signals to the category, and a self-referencing canonical on the pages you chose to index. Noindex is rarely the right tool for faceted navigation, because Google still has to crawl a page to see the tag.</p>



<figure class="wp-block-table"><table><thead><tr><th>Method</th><th>Stops crawling</th><th>Stops indexing</th><th>Passes signals to the category</th><th>Best use</th></tr></thead><tbody><tr><td>robots.txt disallow</td><td><span style="display:inline-block;padding:4px 8px;background-color:#e7e9f8;color:#3f4aaf;border-radius:4px;font-weight:600;">Yes</span></td><td><span style="display:inline-block;padding:4px 8px;background-color:#d4edda;color:#1e7e34;border-radius:4px;font-weight:600;">Generally no</span></td><td><span style="display:inline-block;padding:4px 8px;background-color:#d4edda;color:#1e7e34;border-radius:4px;font-weight:600;">No</span></td><td>Deep combinations, sort and view parameters</td></tr><tr><td>Canonical tag to the category</td><td>Only over time</td><td><span style="display:inline-block;padding:4px 8px;background-color:#e7e9f8;color:#3f4aaf;border-radius:4px;font-weight:600;">Likely yes</span></td><td><span style="display:inline-block;padding:4px 8px;background-color:#e7e9f8;color:#3f4aaf;border-radius:4px;font-weight:600;">Yes</span></td><td>A small set of single-filter URLs</td></tr><tr><td>Meta robots noindex</td><td><span style="display:inline-block;padding:4px 8px;background-color:#d4edda;color:#1e7e34;border-radius:4px;font-weight:600;">No</span></td><td><span style="display:inline-block;padding:4px 8px;background-color:#e7e9f8;color:#3f4aaf;border-radius:4px;font-weight:600;">Yes</span></td><td><span style="display:inline-block;padding:4px 8px;background-color:#d4edda;color:#1e7e34;border-radius:4px;font-weight:600;">No</span></td><td>Rarely, for pages that must stay crawlable</td></tr><tr><td>Nofollow on filter links</td><td>Only if every link has it</td><td><span style="display:inline-block;padding:4px 8px;background-color:#d4edda;color:#1e7e34;border-radius:4px;font-weight:600;">No</span></td><td><span style="display:inline-block;padding:4px 8px;background-color:#d4edda;color:#1e7e34;border-radius:4px;font-weight:600;">No</span></td><td>A support measure, never the main control</td></tr><tr><td>404 for empty combinations</td><td>Over time</td><td><span style="display:inline-block;padding:4px 8px;background-color:#e7e9f8;color:#3f4aaf;border-radius:4px;font-weight:600;">Yes</span></td><td><span style="display:inline-block;padding:4px 8px;background-color:#d4edda;color:#1e7e34;border-radius:4px;font-weight:600;">No</span></td><td>Filters that return no products</td></tr><tr><td>Filters without a URL change</td><td><span style="display:inline-block;padding:4px 8px;background-color:#e7e9f8;color:#3f4aaf;border-radius:4px;font-weight:600;">Yes</span></td><td><span style="display:inline-block;padding:4px 8px;background-color:#e7e9f8;color:#3f4aaf;border-radius:4px;font-weight:600;">Yes</span></td><td><span style="display:inline-block;padding:4px 8px;background-color:#d4edda;color:#1e7e34;border-radius:4px;font-weight:600;">No</span></td><td>Facets you never want as pages</td></tr></tbody></table><figcaption class="wp-element-caption">What robots.txt, canonical tags, noindex and other methods do to filter URLs</figcaption></figure>



<p class="wp-block-paragraph">A few details from Google&#8217;s documentation matter here. A URL blocked in robots.txt can still be indexed without its content if other pages link to it. Google says a canonical tag on filter URLs may reduce crawling of them over time, but it calls robots.txt the more effective long-term control. Its crawl budget guide is direct about noindex: Google &#8220;will still request, but then drop the page&#8221;, so noindex saves no crawling at all.</p>



<h3 class="wp-block-heading">Combinations that send mixed signals</h3>



<p class="wp-block-paragraph">A broken faceted navigation setup often has the right tools in the wrong combination.</p>



<ul class="wp-block-list">
<li>A robots.txt block plus noindex: Google can&#8217;t crawl the page, so it never sees the noindex</li>


<li>Noindex plus a canonical to the category: one tag says drop the page, the other says merge it into the category. Google advises against noindex for canonicalization, so use the canonical alone</li>


<li>A canonical to the category on a filter URL that&#8217;s in your sitemap or main menu: your internal signals point at the filter URL while the tag points away from it, and Google may ignore the tag</li>


<li>Blocking filter URLs that are already indexed: they can stay in the index without content. If you need them gone first, allow crawling with noindex until they drop out, then add the robots.txt rule</li>

</ul>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Once a filter URL is blocked in robots.txt, its canonical and noindex tags have no effect, because Google never reads the page. Decide crawling first, then indexing.</p></div>



<h2 class="wp-block-heading">How to build a filter page worth indexing</h2>



<p class="wp-block-paragraph">A filter combination that passed the five tests needs to work like a real category page. Otherwise Google may treat it as a near-duplicate of the parent and index the parent instead.</p>



<ol class="wp-block-list">
<li>A clean, stable URL. A path such as /boots/black-leather-ankle-boots is easiest to keep stable. If you use parameters, keep one fixed order and the standard &#8220;&amp;&#8221; separator, as Google recommends</li>


<li>A self-referencing canonical tag, never one pointing to the parent category</li>


<li>Its own title, H1, and meta description built on the phrase people search, such as &#8220;Black Leather Ankle Boots&#8221;</li>


<li>A short intro that helps shoppers choose between the products shown, with a few sentences on materials, fit, or care</li>


<li>Internal links from the parent category, for example a row of popular styles above or below the product grid, plus breadcrumbs back to the category</li>


<li>A place in the XML sitemap next to your regular categories</li>


<li>A plan for when stock runs out. Keep the page live with related products while the range is seasonal, and return a 404 or redirect to the parent if it&#8217;s gone for good</li>

</ol>



<p class="wp-block-paragraph">Filter UX still matters for shoppers on every other combination. Our guide to <a href="https://scandiweb.com/blog/best-practices-for-product-listing-pages/" target="_blank" rel="noopener">product listing page best practices</a> covers filter order, labels, and mobile layouts.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Links from the parent category matter as much as the copy. Google counts a sitemap entry as a weak signal, so a filter page that only the sitemap points to gives Google little reason to rank it over its parent.</p></div>



<h2 class="wp-block-heading">Magento and Adobe Commerce implementation notes</h2>



<p class="wp-block-paragraph">By default, Magento adds each filter to the category URL as a query parameter with a numeric option ID, so a filtered page looks like /women/boots.html?color=49&amp;material=148. That makes the parameters easy to block with robots.txt and hard to turn into pages worth indexing. The usual setup has three parts.</p>



<h3 class="wp-block-heading">Canonical tags for filtered category URLs</h3>



<p class="wp-block-paragraph">Go to Stores &gt; Settings &gt; Configuration &gt; Catalog &gt; Catalog &gt; Search Engine Optimization and set &#8220;Use Canonical Link Meta Tag For Categories&#8221; to Yes. Filtered URLs then point their canonical to the clean category URL. Adobe recommends enabling the canonical tag for both categories and products.</p>



<h3 class="wp-block-heading">robots.txt rules for filter parameters</h3>



<p class="wp-block-paragraph">Add your rules under Content &gt; Design &gt; Configuration, in the Search Engine Robots section for the right scope. A typical starting set blocks filter, sort, and toolbar parameters:</p>



<pre class="wp-block-code"><code>User-agent: *
Disallow: /*?*color=
Disallow: /*?*material=
Disallow: /*?*price=
Disallow: /*?*product_list_order=
Disallow: /*?*product_list_dir=
Disallow: /*?*product_list_limit=
Disallow: /*?*product_list_mode=</code></pre>



<p class="wp-block-paragraph">Replace the attribute codes with the filterable attributes your store uses, and check the live URLs first. Headless frontends, AJAX filters, and search services such as Adobe&#8217;s Live Search can produce different parameters. Our guide to the <a href="https://scandiweb.com/blog/seo-crash-course-magento-robotstxt/" target="_blank" rel="noopener">Magento 2 robots.txt setup</a> lists the system paths that belong in the same file.</p>



<h3 class="wp-block-heading">Indexable filter pages as categories</h3>



<p class="wp-block-paragraph">Build each combination that passed the five tests as a category. Create a subcategory such as &#8220;Black Leather Ankle Boots&#8221; under Boots, with its own URL key, meta title, meta description, and description, and assign the products. On Adobe Commerce, the Visual Merchandiser can fill the category automatically with &#8220;Match products by rule&#8221;, using attribute conditions such as color and material. Adobe notes the rule is applied when the category is saved, and products that no longer match are removed. Link the new category from Boots, so shoppers and Google reach it from the parent.</p>



<p class="wp-block-paragraph">How to choose filterable attributes, set up anchor categories, and speed up filtering with AJAX or Hyvä is covered in our guide to <a href="https://scandiweb.com/blog/layered-navigation-causing-problems-deal-with-it/" target="_blank" rel="noopener">Magento layered navigation setup</a>.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-magento-shopify-defaults.png" alt="Comparison of Magento and Shopify default faceted navigation SEO settings for filter URLs, canonical tags and robots.txt" class="wp-image-26191" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-magento-shopify-defaults.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-magento-shopify-defaults-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-magento-shopify-defaults-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-magento-shopify-defaults-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-magento-shopify-defaults-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-magento-shopify-defaults-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/faceted-navigation-seo-magento-shopify-defaults-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Magento and Shopify handle filter URLs differently out of the box</figcaption></figure></div>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>On Magento, the indexable version of a filter is a category with its own URL key. The filtered URL keeps its canonical to the parent, so the two pages don&#8217;t compete for the same search.</p></div>



<h2 class="wp-block-heading">Shopify implementation notes</h2>



<p class="wp-block-paragraph">Shopify&#8217;s defaults already handle two of the three outcomes from the decision rule: canonical and block. We checked them on Shopify&#8217;s own Dawn demo store in October 2026. Storefront filters, which you set up in the admin or the Search &amp; Discovery app, add parameters such as ?filter.v.option.color=Black or ?filter.p.vendor=Nike to the collection URL, and a store can have up to 25 filters.</p>



<h3 class="wp-block-heading">What Shopify&#8217;s default robots.txt blocks</h3>



<p class="wp-block-paragraph">The standard file disallows sorted collection URLs, combined tag URLs, and any collection URL with two or more filter parameters:</p>



<pre class="wp-block-code"><code>Disallow: /collections/*sort_by*
Disallow: /collections/*+*
Disallow: /collections/*filter*&amp;*filter*
Disallow: /*/collections/*sort_by*
Disallow: /*/collections/*+*
Disallow: /*/collections/*filter*&amp;*filter*</code></pre>



<p class="wp-block-paragraph">A URL with a single filter stays crawlable. On the Dawn theme, that single-filter URL and even a two-filter one carry a canonical tag pointing to the unfiltered collection. So out of the box, single filters are canonicalized to the collection and combinations are blocked. Custom themes can change the canonical, so check yours with the URL Inspection tool.</p>



<p class="wp-block-paragraph">The second set of lines covers language and market subfolders. If you sell in several countries through <a href="https://scandiweb.com/blog/shopify-markets/">Shopify Markets subfolders</a>, each subfolder repeats the whole filter space, so any rule you add needs the same pair.</p>



<h3 class="wp-block-heading">Indexable filter pages as collections</h3>



<p class="wp-block-paragraph">Shopify has no admin setting that turns a filter URL into an indexable page, and the theme&#8217;s canonical points it at the collection anyway. Build each combination that passed the five tests as its own automated collection, with conditions such as product type equals Boots and a tag or metafield for black leather. It gets its own handle, title, description, and place in the sitemap, and you link to it from the parent collection.</p>



<h3 class="wp-block-heading">Adding your own rules in robots.txt.liquid</h3>



<p class="wp-block-paragraph">To block single filters with no search value, such as availability or price, edit the robots.txt.liquid template and add rules for those parameters. Keep Shopify&#8217;s default rules in the file. Our <a href="https://scandiweb.com/blog/shopify-seo-checklist/" target="_blank" rel="noopener">Shopify SEO checklist</a> covers the rest of the theme-level setup.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Shopify&#8217;s defaults already block most filter combinations. The usual gap on a Shopify store is the missing collections for the filter phrases people search.</p></div>



<h2 class="wp-block-heading">How to check faceted navigation after a release or migration</h2>



<p class="wp-block-paragraph">New filters, a theme update, or a replatforming project can undo a working setup in one deploy. Check four things after each one:</p>



<ol class="wp-block-list">
<li>Fetch the live robots.txt and test a few filter URLs against it. A staging file that blocks everything, or a filter rule lost in the deploy, are both common release mistakes</li>


<li>Inspect one filter URL and one indexable filter page with the URL Inspection tool, and compare the user-declared and Google-selected canonical</li>


<li>Watch &#8220;Indexed, though blocked by robots.txt&#8221; and &#8220;Discovered – currently not indexed&#8221; in the Page indexing report for new filter patterns over the following weeks</li>


<li>Check the Crawl stats report. A jump in daily requests right after the release usually means a new parameter became crawlable</li>

</ol>



<p class="wp-block-paragraph">Migrations need extra care because filter URLs change format between platforms. A Magento ?color=49 URL has no equivalent on Shopify, so every indexable filter page needs a matching page on the new platform and a 301 redirect in the redirect map, and the new robots.txt rules need to be live on launch day. Our <a href="https://scandiweb.com/blog/seo-migration-checklist/" target="_blank" rel="noopener">SEO migration checklist</a> covers the full redirect and launch process.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Before a migration, export the filter URLs that got organic clicks in the last year from Search Console. That list is the set of filter pages the new store has to rebuild and redirect.</p></div>



<p class="wp-block-paragraph">A <a href="https://scandiweb.com/blog/seo-technical-audit-why-and-when-you-need-to-perform-it/" target="_blank" rel="noopener">technical SEO audit</a> checks crawl rules, canonicals, and status codes across every template in one pass. It&#8217;s also where our <a href="https://scandiweb.com/seo-services" target="_blank" rel="noopener">eCommerce SEO team</a> starts when filter URLs outnumber the products on a store.</p>



<h2 class="wp-block-heading">Frequently asked questions about faceted navigation SEO</h2>



<h3 class="wp-block-heading">Are filter pages wasting crawl budget?</h3>



<p class="wp-block-paragraph">They can be, if search engines can crawl every filter combination. Check the Crawl Stats report in Search Console and your server logs for the share of Googlebot requests that go to filter and sort URLs. A growing &#8220;Discovered – currently not indexed&#8221; count full of filter URLs is another sign. Blocking combinations with no search value in robots.txt is the fix Google recommends.</p>



<h3 class="wp-block-heading">Should filtered URLs be indexed?</h3>



<p class="wp-block-paragraph">Only the ones people search for. A filter combination deserves an indexable URL when the phrase has search demand, the intent differs from the parent category, enough products stay on the page, it adds no more than one or two filters, and it has a stable page with its own title and copy. Everything else should stay out of the index.</p>



<h3 class="wp-block-heading">Should I use noindex or a canonical tag on filter pages?</h3>



<p class="wp-block-paragraph">Use a canonical tag pointing to the category for a small set of single-filter pages, and robots.txt for everything deeper. Noindex keeps a page out of search but saves no crawling, because Google still has to fetch the page to read the tag. Never combine noindex with a canonical to another URL, since the two send opposite signals.</p>



<h3 class="wp-block-heading">Is robots.txt or rel=canonical better for faceted navigation?</h3>



<p class="wp-block-paragraph">For filter combinations you never want in search, robots.txt is better, and Google calls it the more effective long-term control. A canonical tag still lets Google crawl the URLs and only reduces crawling over time. Use canonicals for the few single-filter pages that should pass their signals to the category, and robots.txt for the rest.</p>



<h3 class="wp-block-heading">Should sort and page-size URLs be indexed?</h3>



<p class="wp-block-paragraph">No. Sorting by price or showing 48 products per page changes the order and number of products, but the page targets the same search as the category. Block these parameters in robots.txt. Shopify&#8217;s default robots.txt already blocks sort_by URLs on collections, and on Magento you add rules for the product_list parameters yourself.</p>



<h3 class="wp-block-heading">How many filters can a page combine and still be worth indexing?</h3>



<p class="wp-block-paragraph">Usually one, sometimes two. Search demand drops fast as filters stack up. In the US, &#8220;black ankle boots&#8221; gets about 5,400 searches a month, &#8220;black leather ankle boots&#8221; about 1,200, and adding a size brings it to zero. Pages with three or more filters almost never have enough demand to justify their own URL.</p>



<h3 class="wp-block-heading">Do AJAX filters solve faceted navigation SEO?</h3>



<p class="wp-block-paragraph">They solve the crawl side, but they don&#8217;t help the long tail. If filters update the product grid without changing the URL, there are no filter URLs to crawl or index. That also means no filter page can rank, so you still need dedicated category or collection pages for the combinations people search for.</p>



<h3 class="wp-block-heading">What happens to filter pages when you migrate platforms?</h3>



<p class="wp-block-paragraph">Their URLs change, because every platform formats filters differently. List the filter pages that get organic traffic before the migration, build matching category or collection pages on the new platform, and 301 redirect the old URLs to them. Set the new robots.txt filter rules before launch, so the new store doesn&#8217;t open its full filter space to crawlers on day one.</p>



<h2 class="wp-block-heading">Faceted navigation SEO comes down to a short list</h2>



<p class="wp-block-paragraph">Faceted navigation SEO is mostly a list: the filter combinations that earn their own page, and a rule that blocks the rest. Build the list from search demand, give each entry a proper category or collection page, block deep combinations, sort orders, and price ranges in robots.txt, and recheck the setup after every release. Review the list each season too, because new filters and new ranges change which phrases have demand.</p>



<script type="application/ld+json">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "Are filter pages wasting crawl budget?", "acceptedAnswer": {"@type": "Answer", "text": "They can be, if search engines can crawl every filter combination. Check the Crawl Stats report in Search Console and your server logs for the share of Googlebot requests that go to filter and sort URLs. A growing \"Discovered – currently not indexed\" count full of filter URLs is another sign. Blocking combinations with no search value in robots.txt is the fix Google recommends."}}, {"@type": "Question", "name": "Should filtered URLs be indexed?", "acceptedAnswer": {"@type": "Answer", "text": "Only the ones people search for. A filter combination deserves an indexable URL when the phrase has search demand, the intent differs from the parent category, enough products stay on the page, it adds no more than one or two filters, and it has a stable page with its own title and copy. Everything else should stay out of the index."}}, {"@type": "Question", "name": "Should I use noindex or a canonical tag on filter pages?", "acceptedAnswer": {"@type": "Answer", "text": "Use a canonical tag pointing to the category for a small set of single-filter pages, and robots.txt for everything deeper. Noindex keeps a page out of search but saves no crawling, because Google still has to fetch the page to read the tag. Never combine noindex with a canonical to another URL, since the two send opposite signals."}}, {"@type": "Question", "name": "Is robots.txt or rel=canonical better for faceted navigation?", "acceptedAnswer": {"@type": "Answer", "text": "For filter combinations you never want in search, robots.txt is better, and Google calls it the more effective long-term control. A canonical tag still lets Google crawl the URLs and only reduces crawling over time. Use canonicals for the few single-filter pages that should pass their signals to the category, and robots.txt for the rest."}}, {"@type": "Question", "name": "Should sort and page-size URLs be indexed?", "acceptedAnswer": {"@type": "Answer", "text": "No. Sorting by price or showing 48 products per page changes the order and number of products, but the page targets the same search as the category. Block these parameters in robots.txt. Shopify's default robots.txt already blocks sort_by URLs on collections, and on Magento you add rules for the product_list parameters yourself."}}, {"@type": "Question", "name": "How many filters can a page combine and still be worth indexing?", "acceptedAnswer": {"@type": "Answer", "text": "Usually one, sometimes two. Search demand drops fast as filters stack up. In the US, \"black ankle boots\" gets about 5,400 searches a month, \"black leather ankle boots\" about 1,200, and adding a size brings it to zero. Pages with three or more filters almost never have enough demand to justify their own URL."}}, {"@type": "Question", "name": "Do AJAX filters solve faceted navigation SEO?", "acceptedAnswer": {"@type": "Answer", "text": "They solve the crawl side, but they don't help the long tail. If filters update the product grid without changing the URL, there are no filter URLs to crawl or index. That also means no filter page can rank, so you still need dedicated category or collection pages for the combinations people search for."}}, {"@type": "Question", "name": "What happens to filter pages when you migrate platforms?", "acceptedAnswer": {"@type": "Answer", "text": "Their URLs change, because every platform formats filters differently. List the filter pages that get organic traffic before the migration, build matching category or collection pages on the new platform, and 301 redirect the old URLs to them. Set the new robots.txt filter rules before launch, so the new store doesn't open its full filter space to crawlers on day one."}}]}</script>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><style> p.box { border: 1px solid black; padding-top: 30px; padding-right: 30px; padding-bottom: 30px; padding-left: 30px; } </style> <p class="box"><em>Not sure which of your filter pages belong in Google? </em><a href="https://scandiweb.com/contact" target="_blank" rel="noreferrer noopener"><em>Send us a category URL</em></a><em>, and we&#x27;ll show you which combinations to index and which to block.</em></p></p>
<p>The post <a rel="nofollow" href="https://scandiweb.com/blog/faceted-navigation-seo/">Faceted Navigation SEO: Which Filter Pages to Index and Which to Block</a> appeared first on <a rel="nofollow" href="https://scandiweb.com/blog">scandiweb</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>B2B Customer Onboarding: Getting Customers to Use Your New Portal</title>
		<link>https://scandiweb.com/blog/b2b-customer-onboarding/</link>
		
		<dc:creator><![CDATA[Olga Kimalana]]></dc:creator>
		<pubDate>Thu, 22 Oct 2026 09:37:00 +0000</pubDate>
				<category><![CDATA[Digital Growth]]></category>
		<category><![CDATA[UX Design]]></category>
		<category><![CDATA[b2b]]></category>
		<category><![CDATA[B2B eCommerce]]></category>
		<category><![CDATA[customer experience]]></category>
		<category><![CDATA[Onboarding]]></category>
		<category><![CDATA[retention]]></category>
		<guid isPermaLink="false">https://scandiweb.com/blog/?p=26055</guid>

					<description><![CDATA[<p>B2B customer onboarding starts at go-live. A 12-month plan to move offline buyers onto your portal, with rep tactics and metrics to track.</p>
<p>The post <a rel="nofollow" href="https://scandiweb.com/blog/b2b-customer-onboarding/">B2B Customer Onboarding: Getting Customers to Use Your New Portal</a> appeared first on <a rel="nofollow" href="https://scandiweb.com/blog">scandiweb</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="lazyblock-related-Kc7Ob wp-block-lazyblock-related"><div class="related-services">
  <h3>Related Services</h3>
  <ul>
    
    <li>
      <a  href="https://scandiweb.com/b2b-ecommerce-solutions" target=_blank >
        B2B eCommerce Solutions
      </a>
    </li>
    
    <li>
      <a  href="https://scandiweb.com/services/cro-ux" target=_blank >
        CX Optimization
      </a>
    </li>
    
    <li>
      <a  href="https://scandiweb.com/email-marketing-services" target=_blank >
        Email Marketing
      </a>
    </li>
    
  </ul>
</div>
</div>


<p class="wp-block-paragraph">If your B2B portal has been live for six months and your best customers still email their orders to the same rep, you are where most suppliers are after launch. The platform usually works. What&#8217;s missing is B2B customer onboarding, and in most companies nobody has been given that job.</p>



<p class="wp-block-paragraph">Suppliers also tend to overrate how far they have come. In a <a href="https://www.deloittedigital.com/content/dam/digital/nl/pdfs/2026/deloitte-digital-b2b-commerce-research-report.pdf" target="_blank" rel="noopener">Deloitte Digital survey</a> of 530 US B2B suppliers and 530 buyers, 72% of suppliers said their sales processes were mostly or highly automated. Only 47% of buyers said their purchasing processes were.</p>



<p class="wp-block-paragraph">Launch is day 0. The 12 months after it decide whether the portal replaces the phone or becomes one more channel your team maintains. This guide covers why existing customers don&#8217;t switch on their own, a five-stage onboarding plan from go-live to month 12, how to pay reps when their customers order online, and the numbers to report to leadership.</p>



<h2 class="wp-block-heading">What is B2B customer onboarding?</h2>



<p class="wp-block-paragraph">B2B customer onboarding is the work of moving existing business accounts from ordering by phone, email, EDI, or through a sales rep to ordering on your B2B customer portal. It covers account setup, the first online order, reasons to come back, and changes to how sales is paid. It runs for months after go-live, account by account.</p>



<p class="wp-block-paragraph">Most guides that rank for this term describe SaaS onboarding: getting a new user to their first &#8220;aha&#8221; moment in software, the topic of our <a href="https://scandiweb.com/blog/user-onboarding-best-practices/" target="_blank" rel="noopener">user onboarding best practices</a>. A supplier&#8217;s problem is different. Your customers already buy from you, and the old way of ordering still works for them.</p>



<figure class="wp-block-table"><table><thead><tr><th></th><th>SaaS customer onboarding</th><th>B2B eCommerce customer onboarding</th></tr></thead><tbody><tr><td>Who you onboard</td><td>New customers who just signed a contract</td><td>Existing accounts who already order from you</td></tr><tr><td>What you compete with</td><td>Doing nothing</td><td>The rep, the phone, email, and EDI</td></tr><tr><td>First value</td><td>First use of a feature</td><td>First order with the right prices and stock</td></tr><tr><td>Who has to change</td><td>The user</td><td>The buyer, the rep, and customer service</td></tr><tr><td>Typical length</td><td>Days to weeks</td><td>6–12 months across the account base</td></tr><tr><td>Success measure</td><td>Activation and retention</td><td>Share of each account&#8217;s orders placed online</td></tr></tbody></table><figcaption class="wp-element-caption">SaaS customer onboarding vs B2B eCommerce customer onboarding</figcaption></figure>



<p class="wp-block-paragraph">Our <a href="https://scandiweb.com/blog/b2b-ecommerce-trends/" target="_blank" rel="noopener">B2B eCommerce trends for 2027</a> put customer adoption among the biggest jobs suppliers face next year. This guide is the detailed plan for that job.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Your portal&#8217;s real competitor is the rep&#8217;s phone number. Time every onboarding step against a phone call, because buyers keep calling until a real order is faster online.</p></div>



<h2 class="wp-block-heading">Why B2B customers don&#8217;t use a new portal</h2>



<p class="wp-block-paragraph">B2B customers keep ordering offline after a portal launches for five common reasons: the old way still works, the portal&#8217;s prices or stock don&#8217;t match what the rep says, their account isn&#8217;t set up, products they buy are missing online, and their rep has no reason to send them there. These are the B2B eCommerce challenges we see most after go-live.</p>



<p class="wp-block-paragraph">Buyers do want to order on their own. <a href="https://www.gartner.com/en/newsroom/press-releases/2026-03-09-gartner-sales-survey-finds-67-percent-of-b2b-buyers-prefer-a-rep-free-experience" target="_blank" rel="noopener">Gartner found</a> that 67% of B2B buyers prefer a rep-free experience, and Deloitte found that 65% choose purchasing channels on ease of use. The same Deloitte research shows how far suppliers are from that: buyers were six times as likely as suppliers to describe the buying process as &#8220;mostly manual,&#8221; and three times as likely to say the supplier is difficult to do business with.</p>



<h3 class="wp-block-heading">The old way still works</h3>



<p class="wp-block-paragraph">A buyer who has emailed the same rep for years often gets a confirmed order back within the hour. Switching means a new login and searching for products they used to name in one line of an email. Unless the portal saves them time on their first order, they go back to email.</p>



<h3 class="wp-block-heading">Prices and stock don&#8217;t match</h3>



<p class="wp-block-paragraph">A portal price that differs from the rep&#8217;s quote or the invoice undoes weeks of onboarding. Buyers call to check, and soon they stop logging in. The fix is upstream: one source for contract pricing and stock, usually the ERP, read by the portal in real time. Our guide to <a href="https://scandiweb.com/blog/ecommerce-erp-integration/" target="_blank" rel="noopener">eCommerce ERP integration</a> covers the patterns.</p>



<h3 class="wp-block-heading">The account isn&#8217;t ready</h3>



<p class="wp-block-paragraph">Many launches send every customer the same invitation email and a password reset link. The buyer logs in to an empty account: no saved lists, no order history, no colleagues set up with the right approval rights. For larger customers, <a href="https://scandiweb.com/blog/ecommerce-sso-integration/" target="_blank" rel="noopener">single sign-on</a> removes the login problem altogether.</p>



<h3 class="wp-block-heading">Products are missing</h3>



<p class="wp-block-paragraph">Buyers won&#8217;t move a whole reorder to a portal that only carries part of what they buy. Wainbee, the largest distributor of Parker products in Canada, had only 10% of its 600,000+ products online because supplier data arrived in CSV and XLS files with no shared structure. A Pimcore PIM connected to its ERP and supplier feeds put the full catalog online.</p>



<p class="wp-block-paragraph"><strong>Read more:</strong> <a href="https://scandiweb.com/blog/case-study-unifying-product-information-with-pimcore-pim/" target="_blank" rel="noopener">Case Study: Unifying Product Information with Pimcore PIM</a></p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-wainbee-full-catalog.png" alt="Wainbee industrial distribution store with product categories shown on desktop and mobile screens" class="wp-image-26044" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-wainbee-full-catalog.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-wainbee-full-catalog-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-wainbee-full-catalog-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-wainbee-full-catalog-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-wainbee-full-catalog-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-wainbee-full-catalog-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-wainbee-full-catalog-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Wainbee put its full catalog of 600,000+ products online for B2B buyers</figcaption></figure></div>



<h3 class="wp-block-heading">The rep has no reason to help</h3>



<p class="wp-block-paragraph">If a rep&#8217;s commission depends on orders they place themselves, every order a customer places online looks like lost income. So reps keep taking orders by phone, and the portal numbers stay flat. The commission section below covers the fix.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Most adoption problems show up in the portal but start somewhere else: in the ERP, in the product data, or in the sales compensation plan.</p></div>



<h2 class="wp-block-heading">The 5 stages of the B2B customer onboarding process</h2>



<p class="wp-block-paragraph">An onboarding process that works for B2B suppliers runs in five stages: choose and prepare the first accounts before go-live, set up each account in the first 30 days, place first orders together with reps in months 2–3, give buyers reasons to come back in months 4–6, and make online the default for everyone in months 7–12. These B2B customer onboarding best practices come from the B2B projects we support after launch.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-12-month-plan.png" alt="Timeline with five stages: before go-live, days 1 to 30, months 2 to 3, months 4 to 6, and months 7 to 12" class="wp-image-26046" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-12-month-plan.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-12-month-plan-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-12-month-plan-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-12-month-plan-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-12-month-plan-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-12-month-plan-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-12-month-plan-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">The five stages of B2B customer onboarding, from go-live to month 12</figcaption></figure></div>



<h3 class="wp-block-heading">Stage 1: Pick the first accounts before go-live</h3>



<p class="wp-block-paragraph">Don&#8217;t launch to every customer at once. Pick 20 to 50 accounts for the first wave: customers who reorder often from a stable list, buyers who already use other suppliers&#8217; portals, and accounts whose reps are willing to help. Repeat orders are the easiest to move online, because the buyer already knows what they want.</p>



<p class="wp-block-paragraph">For each account, decide before launch who owns the move (usually the rep, with support from customer service), which buyers will log in, and what the first online order will be.</p>



<h3 class="wp-block-heading">Stage 2: Set up each account in the first 30 days</h3>



<p class="wp-block-paragraph">Treat each large account as its own small project. Before the buyer logs in for the first time, the account should already have:</p>



<ul class="wp-block-list">
<li>Its contract prices and payment terms, checked against the last three invoices</li>


<li>Every buyer and approver, with the right roles and spending limits</li>


<li>A saved list of the products they reorder most, built from their order history</li>


<li>Their past orders, so they can reorder from history instead of searching</li>

</ul>



<p class="wp-block-paragraph">Then run a short setup call with the buyer, ideally led by their rep. Thirty minutes on a shared screen does more than any welcome email. If you run Adobe Commerce, features such as company accounts, shared catalogs, requisition lists, and quick order cover most of this, as our overview of <a href="https://scandiweb.com/blog/top-9-adobe-commerce-b2b-features/" target="_blank" rel="noopener">Adobe Commerce B2B features</a> explains.</p>



<h3 class="wp-block-heading">Stage 3: Place the first orders together (months 2–3)</h3>



<p class="wp-block-paragraph">Ask reps to place the first online order with the buyer, either on a call or by logging in to the customer&#8217;s account and building the cart for them to approve. The buyer sees their own prices, stock, and history in the portal, and the rep stays part of the relationship.</p>



<p class="wp-block-paragraph">Macron, the teamwear and sports apparel brand, gave its team a &#8220;Shop as a Customer&#8221; feature on Adobe Commerce. Support staff log in under a partner&#8217;s account and help with bulk orders and complex configurations, using the same catalog and prices the partner sees. With SAP integration for live stock and flexible ordering by SKU, CSV upload, and reorder, Macron cut order creation time by 40%.</p>



<p class="wp-block-paragraph"><strong>Read more:</strong> <a href="https://scandiweb.com/blog/case-study-macron-adobe-commerce-b2b-platform/" target="_blank" rel="noopener">Case Study: Macron&#8217;s B2B Platform Evolution with Adobe Commerce</a></p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-rep-assisted-first-order.png" alt="B2B portal cart with a rep logged in as the customer, contract prices, stock status, and a send for approval button" class="wp-image-26048" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-rep-assisted-first-order.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-rep-assisted-first-order-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-rep-assisted-first-order-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-rep-assisted-first-order-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-rep-assisted-first-order-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-rep-assisted-first-order-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-rep-assisted-first-order-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">A rep builds the first order in the customer&#x27;s account for buyer approval</figcaption></figure></div>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>A first order placed together teaches the portal on a real purchase and shows the buyer that their rep is still their contact.</p></div>



<h3 class="wp-block-heading">Stage 4: Give buyers reasons to come back (months 4–6)</h3>



<p class="wp-block-paragraph">A portal that is only a cart gets used only when someone remembers to order. Give buyers reasons to log in between orders:</p>



<ul class="wp-block-list">
<li><strong>Reorder prompts.</strong> Send reminders when an account&#8217;s usual reorder date passes, based on its real order history, with a one-click link to the saved list.</li>


<li><strong>Order status and documents.</strong> Tracking, invoices, delivery notes, and certificates in the portal stop the &#8220;where is my order&#8221; calls.</li>


<li><strong>Self-service for routine requests.</strong> Returns, statement downloads, and user changes the buyer can do alone.</li>

</ul>



<p class="wp-block-paragraph">This is also where support costs start to fall. advancedlife, Australia&#8217;s national school photography specialist, replaced five legacy systems with one platform that includes a self-service portal for schools. Schools upload rosters, correct student data, and download images without contacting the support team. The platform went live in 14 weeks, before the busiest season, and support load dropped 95% after go-live.</p>



<p class="wp-block-paragraph"><strong>Read more:</strong> <a href="https://scandiweb.com/blog/school-photography-commerce-accelerator/" target="_blank" rel="noopener">School Photography Commerce: Production-Ready Platform in 14 Weeks</a></p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-advancedlife-ordering-platform.png" alt="advancedlife school photo ordering site on desktop and mobile with the four-step online ordering flow" class="wp-image-26049" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-advancedlife-ordering-platform.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-advancedlife-ordering-platform-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-advancedlife-ordering-platform-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-advancedlife-ordering-platform-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-advancedlife-ordering-platform-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-advancedlife-ordering-platform-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-advancedlife-ordering-platform-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">advancedlife cut support load by 95% after its new platform went live</figcaption></figure></div>



<p class="wp-block-paragraph">Reorder prompts work best as a lifecycle email program triggered by order data. Our <a href="https://scandiweb.com/email-marketing-services" target="_blank" rel="noopener">email marketing</a> team builds these flows on top of the portal&#8217;s order history.</p>



<h3 class="wp-block-heading">Stage 5: Make online the default (months 7–12)</h3>



<p class="wp-block-paragraph">By month 7 the first waves are ordering online and the long tail is still on the phone. Now change the defaults:</p>



<ul class="wp-block-list">
<li>Customer service enters phone and email orders into the portal on the customer&#8217;s account, so history and saved lists build up there.</li>


<li>New customers open accounts on the portal from day one.</li>


<li>Small accounts below a set order value get portal-only ordering, with a phone line for exceptions.</li>


<li>Paper order forms and spreadsheet price lists are retired.</li>

</ul>



<p class="wp-block-paragraph">Don&#8217;t force your largest accounts. Some will keep EDI or move to punchout from their procurement system, and that still counts as digital. Deloitte found that 92% of buyers who use EDI today plan to shift partly or fully to other channels such as eCommerce or procurement systems. Later, some orders may come from AI agents through protocols such as Google&#8217;s <a href="https://scandiweb.com/blog/universal-commerce-protocol/" target="_blank" rel="noopener">Universal Commerce Protocol</a>, and they will need the same account prices the portal shows.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>When customer service keeps entering phone orders into the portal, every account builds a usable order history there, even before its buyers log in.</p></div>



<h2 class="wp-block-heading">How to pay sales reps when customers order online</h2>



<p class="wp-block-paragraph">Pay reps on all of their accounts&#8217; revenue, whatever channel the order comes through. If commission only counts orders the rep places, every online order costs the rep money, and they will steer customers back to the phone. Once channel no longer affects pay, reps can treat the portal as a tool that frees their time for new business.</p>



<p class="wp-block-paragraph">Three commission models work in practice:</p>



<ol class="wp-block-list">
<li><strong>Account-based commission.</strong> The rep earns on every order from their accounts, online or offline. This is the simplest fix and usually the first one to make.</li>


<li><strong>Adoption targets on top.</strong> A quarterly bonus for raising each account&#8217;s share of online orders, for example from 20% to 60% over two quarters.</li>


<li><strong>New business weighting.</strong> A higher rate on revenue from new accounts, so time saved on order entry goes into finding new customers.</li>

</ol>



<p class="wp-block-paragraph">Agree on the model before go-live. Reps who learn the new rules after the launch have already decided what the portal means for them.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Your compensation plan is part of the B2B eCommerce project. If it stays the same, expect the order channels to stay the same too.</p></div>



<h2 class="wp-block-heading">How to measure B2B customer onboarding</h2>



<p class="wp-block-paragraph">Measure B2B customer onboarding by the share of each account&#8217;s orders placed online, tracked monthly per account. Add how many invited buyers placed a first order, how many reorder online, and how much time order entry and support take. Logins and traffic alone hide the accounts that never moved.</p>



<figure class="wp-block-table"><table><thead><tr><th>Metric</th><th>What it shows</th><th>Where to find it</th></tr></thead><tbody><tr><td>Online share of orders, per account</td><td>Whether the account has really moved</td><td>ERP order source field</td></tr><tr><td>First online order rate</td><td>Whether setup and the first order work</td><td>Portal accounts vs orders</td></tr><tr><td>Repeat online orders within 90 days</td><td>Whether the first order turned into a habit</td><td>Portal order history</td></tr><tr><td>Returning visitors</td><td>Whether buyers come back between orders</td><td>Analytics</td></tr><tr><td>Order entry time</td><td>Staff hours freed up</td><td>Customer service time tracking</td></tr><tr><td>Support contacts per order</td><td>Whether self-service works</td><td>Help desk</td></tr></tbody></table><figcaption class="wp-element-caption">Metrics to track B2B customer onboarding per account</figcaption></figure>



<p class="wp-block-paragraph">Report these per account. A few large accounts ordering almost everything online can make the total look healthy while two hundred small accounts still order by phone, and each group needs a different next step. Macron&#8217;s results show what to look for: returning visitors grew 32.8% after its new platform launched, and order creation time fell 40%.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-adoption-dashboard.png" alt="Dashboard table of B2B accounts with online order share, first order status, and rep owner, some flagged in red" class="wp-image-26052" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-adoption-dashboard.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-adoption-dashboard-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-adoption-dashboard-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-adoption-dashboard-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-adoption-dashboard-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-adoption-dashboard-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-customer-onboarding-adoption-dashboard-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Track B2B customer onboarding per account, not as one site-wide average</figcaption></figure></div>



<p class="wp-block-paragraph">If you are not sure where accounts drop off, a <a href="https://scandiweb.com/blog/b2b-ecommerce-customer-experience-audit/" target="_blank" rel="noopener">B2B customer experience audit</a> maps each step from login to reorder and shows which ones lose buyers.</p>



<h2 class="wp-block-heading">FAQ about B2B customer onboarding</h2>



<h3 class="wp-block-heading">How long does B2B customer onboarding take?</h3>



<p class="wp-block-paragraph">In our experience, most suppliers need 6 to 12 months to move the bulk of their accounts online. The first wave of 20 to 50 accounts can be ordering online within the first three months. The long tail of small and infrequent buyers takes longer, and some large accounts move to EDI or punchout instead of the portal.</p>



<h3 class="wp-block-heading">Who should own customer adoption after a B2B portal launch?</h3>



<p class="wp-block-paragraph">One named person should own adoption across all accounts, usually the head of eCommerce or a digital sales manager, with reps owning their own accounts. Without a single owner, adoption falls between the eCommerce team, which built the portal, and sales, which owns the customer, and neither group reports on it.</p>



<h3 class="wp-block-heading">How do you get B2B customers to order online instead of calling?</h3>



<p class="wp-block-paragraph">Make the first online order faster than calling. Load each account&#8217;s prices, buyers, and reorder list before they log in, have the rep place the first order with them, and send reorder reminders based on their order history. Keep prices and stock in the portal identical to the rep&#8217;s quote, or customers will call to check.</p>



<h3 class="wp-block-heading">What should a B2B customer portal include on day one?</h3>



<p class="wp-block-paragraph">On day one, a B2B customer portal needs contract prices, live stock, saved reorder lists, order history, quick order by SKU, and user roles with approvals. Order tracking, invoices, and document downloads give buyers reasons to log in between orders. Features beyond that can wait until the first accounts are ordering online.</p>



<h3 class="wp-block-heading">Should B2B suppliers force customers to order online?</h3>



<p class="wp-block-paragraph">Not at first. Forcing large accounts usually pushes them to a competitor or to email. Start with the accounts most likely to switch, make online ordering easier than the old way, and only make it the default for small accounts once the portal has proven itself, keeping a phone line for exceptions.</p>



<h3 class="wp-block-heading">What are the biggest B2B eCommerce challenges after launch?</h3>



<p class="wp-block-paragraph">The biggest B2B eCommerce challenges after launch are customer adoption, prices and stock that don&#8217;t match the ERP, incomplete product data, and sales compensation that rewards offline orders. Platform features are rarely the blocker. Most stalled portals work technically but have no plan or owner for moving existing customers online.</p>



<h2 class="wp-block-heading">B2B customer onboarding is the second half of the project</h2>



<p class="wp-block-paragraph">B2B customer onboarding turns a working portal into a channel your customers use. Plan it before launch, set up accounts one by one, let reps place the first orders, give buyers reasons to come back, and change pay so reps gain when customers order online. Then measure the online share of orders per account every month. If you want help finding new buyers as well, our guide to <a href="https://scandiweb.com/blog/b2b-seo/" target="_blank" rel="noopener">B2B SEO</a> covers that side.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><style> p.box { border: 1px solid black; padding-top: 30px; padding-right: 30px; padding-bottom: 30px; padding-left: 30px; } </style> <p class="box"><em>Portal live but the phone still ringing? </em><a href="https://scandiweb.com/contact" target="_blank" rel="noreferrer noopener"><em>Tell us where your accounts are stuck</em></a><em>, and we&#x27;ll help you plan the next 12 months of adoption.</em></p></p>
<p>The post <a rel="nofollow" href="https://scandiweb.com/blog/b2b-customer-onboarding/">B2B Customer Onboarding: Getting Customers to Use Your New Portal</a> appeared first on <a rel="nofollow" href="https://scandiweb.com/blog">scandiweb</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The B2B Buyer Journey in 2027: How Buyers Use AI and Sales Reps</title>
		<link>https://scandiweb.com/blog/b2b-buyer-journey/</link>
		
		<dc:creator><![CDATA[Glebs Vrevsky]]></dc:creator>
		<pubDate>Wed, 21 Oct 2026 13:23:00 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Digital Growth]]></category>
		<category><![CDATA[b2b]]></category>
		<category><![CDATA[B2B eCommerce]]></category>
		<category><![CDATA[customer experience]]></category>
		<category><![CDATA[Customer Journey]]></category>
		<category><![CDATA[ERP]]></category>
		<category><![CDATA[PIM]]></category>
		<category><![CDATA[sales]]></category>
		<guid isPermaLink="false">https://scandiweb.com/blog/?p=26056</guid>

					<description><![CDATA[<p>The B2B buyer journey in 2027: six stages, where AI and sales reps fit, and what suppliers must keep consistent to win the order.</p>
<p>The post <a rel="nofollow" href="https://scandiweb.com/blog/b2b-buyer-journey/">The B2B Buyer Journey in 2027: How Buyers Use AI and Sales Reps</a> appeared first on <a rel="nofollow" href="https://scandiweb.com/blog">scandiweb</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="lazyblock-related-Bj6vR wp-block-lazyblock-related"><div class="related-services">
  <h3>Related Services</h3>
  <ul>
    
    <li>
      <a  href="https://scandiweb.com/b2b-ecommerce-solutions" target=_blank >
        B2B eCommerce Solutions
      </a>
    </li>
    
    <li>
      <a  href="https://scandiweb.com/integrations" target=_blank >
        eCommerce Integrations
      </a>
    </li>
    
    <li>
      <a  href="https://scandiweb.com/services/ai-search-optimization" target=_blank >
        AI Search Optimization
      </a>
    </li>
    
  </ul>
</div>
</div>


<p class="wp-block-paragraph">If your sales team keeps hearing &#8220;we already looked you up in ChatGPT&#8221; on the first call, or your reps spend more time correcting what buyers read than selling, the B2B buyer journey has changed under them. In a Gartner survey of 645 B2B buyers, 67% said they prefer a rep-free experience. In the same survey, 69% said they prefer to check AI-generated insights with a sales rep.</p>



<p class="wp-block-paragraph">Those two numbers describe the same buyer. They research alone, with AI tools and supplier websites, and they bring in a person when they need to know the answer is right. The rep&#8217;s job moves from explaining the product to confirming what the buyer already found: the price, the lead time, and the fit for their application.</p>



<p class="wp-block-paragraph">This guide walks through the six stages of that journey, who is in the buying group, where AI and reps each fit, and what a manufacturer or distributor has to keep consistent so that the website, the AI answer, the rep, and the invoice tell the buyer the same thing.</p>



<h2 class="wp-block-heading">What is the B2B buyer journey in 2027?</h2>



<p class="wp-block-paragraph">The B2B buyer journey is the path a business buyer, or more often a buying group, takes from noticing a problem to placing an order and reordering. In 2027 most of that path happens before a supplier hears from the buyer. AI assistants and search build the shortlist, supplier websites provide the evidence, and sales reps come in to validate the choice and close it.</p>



<p class="wp-block-paragraph">Gartner describes the B2B buying journey as six buying jobs: identifying the problem, exploring solutions, building requirements, selecting a supplier, validating the choice, and creating consensus inside the buying group. Buyers loop back between them. A plant manager can be halfway through supplier selection when finance asks for a different budget, and the group goes back to requirements.</p>



<p class="wp-block-paragraph">For a manufacturer or distributor, the journey continues after the first order. A first order from a new account is often small. The value is in the next fifty orders, and those are won or lost in the portal, the ERP, and the account team long after the first sale.</p>



<h2 class="wp-block-heading">The 6 stages of the B2B buyer journey</h2>



<p class="wp-block-paragraph">The six stages of the B2B buyer journey are problem definition, research and shortlist, evaluation by the buying group, validation, purchase and approval, and reorder. AI tools now do most of the work in the first two stages. Sales reps matter most in validation and in getting the purchase approved.</p>



<figure class="wp-block-table"><table><thead><tr><th>Stage</th><th>What the buyer does</th><th>Where AI fits</th><th>Where the rep fits</th><th>What the supplier must provide</th></tr></thead><tbody><tr><td>1. Problem definition</td><td>Names the problem and the budget</td><td>Explains options and terms</td><td>Frames complex problems</td><td>Content by problem and application</td></tr><tr><td>2. Research and shortlist</td><td>Builds a list of 3–4 suppliers</td><td>Names suppliers, compares specs</td><td>Rarely involved</td><td>Public specs, documents, coverage</td></tr><tr><td>3. Evaluation</td><td>Each role checks its part</td><td>Summarizes specs and terms</td><td>Answers technical questions</td><td>Datasheets, certifications, case studies</td></tr><tr><td>4. Validation</td><td>Checks AI answers with a person</td><td>The claim being checked</td><td>Confirms price, stock, and fit</td><td>Rep access to the buyer&#8217;s data</td></tr><tr><td>5. Purchase and approval</td><td>Procurement negotiates and approves</td><td>Drafts comparisons</td><td>Builds the quote, handles terms</td><td>Accurate quotes, contract prices, terms</td></tr><tr><td>6. Reorder and expansion</td><td>Reorders and adds products</td><td>Automates repeat orders</td><td>Grows the account</td><td>Portal with prices, history, invoices</td></tr></tbody></table><figcaption class="wp-element-caption">The 6 stages of the B2B buyer journey and where AI and reps fit</figcaption></figure>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-six-stages-ai-and-reps.png" alt="Diagram of the six stages of the B2B buyer journey showing where AI tools and sales reps each fit" class="wp-image-26045" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-six-stages-ai-and-reps.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-six-stages-ai-and-reps-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-six-stages-ai-and-reps-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-six-stages-ai-and-reps-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-six-stages-ai-and-reps-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-six-stages-ai-and-reps-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-six-stages-ai-and-reps-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Where AI and sales reps each do the work across the six stages</figcaption></figure></div>



<h3 class="wp-block-heading">1. Problem definition</h3>



<p class="wp-block-paragraph">The journey starts when someone in the business names a problem, such as a packing line that keeps stopping or a new product that needs a component the current supplier doesn&#8217;t stock. Today that person often asks an AI assistant to explain the options before speaking to anyone.</p>



<p class="wp-block-paragraph">Gartner found that reps are still the most important source of information when buyers define a business problem. That applies mostly to complex problems, where the buyer doesn&#8217;t yet know what to ask. Your website helps at this stage with content organized by problem and application, such as &#8220;how to cut changeover time on a filling line,&#8221; linked to the products that solve it.</p>



<h3 class="wp-block-heading">2. Research and shortlist</h3>



<p class="wp-block-paragraph">Research has changed more than any other stage. Buyers ask ChatGPT, Gemini, or Google which suppliers make what they need, ship to their region, and hold the right certifications. The answer becomes the shortlist. <a href="https://www.businesswire.com/news/home/20251112018032/en" target="_blank" rel="noopener">6sense found</a> that 94% of buying groups rank their preferred vendors before first contact, and they buy from that favorite 77% of the time.</p>



<p class="wp-block-paragraph">Suppliers get on that list through what AI tools and search engines can read: open product pages, full specs, coverage and certification details, and mentions on sites those tools trust. Our guide to <a href="https://scandiweb.com/blog/b2b-seo/" target="_blank" rel="noopener">B2B SEO in 2027</a> covers how to rank on Google and get recommended by AI for this stage.</p>



<h3 class="wp-block-heading">3. Evaluation by the buying group</h3>



<p class="wp-block-paragraph">Once the shortlist exists, each member of the buying group checks the part they are responsible for. Engineering reads the datasheet. Quality checks the certifications. Finance compares total cost. Sustainability asks for material and origin data, which EU rules such as the <a href="https://scandiweb.com/blog/digital-product-passport/" target="_blank" rel="noopener">digital product passport</a> are turning into a requirement.</p>



<p class="wp-block-paragraph">Each of them may run their own AI query, on their own schedule, and get a slightly different answer. A supplier whose data is complete and identical everywhere gives every member the same facts.</p>



<h3 class="wp-block-heading">4. Validation</h3>



<p class="wp-block-paragraph">Validation is the stage where buyers bring in a person. Gartner found that 69% of B2B buyers prefer to validate AI-generated insights with a sales rep. The questions are specific: is this the current price for our account, can you deliver 400 units by the 15th, and is this part compatible with the pump we already run?</p>



<p class="wp-block-paragraph">The rep wins this stage by answering quickly, with numbers that match what the buyer already saw. A rep who has to check three systems and call the warehouse gives the buyer a reason to doubt everything else.</p>



<p class="wp-block-paragraph">Many industrial buyers start this stage by phone. Wainbee, an engineering systems distributor in Canada with 14 locations, has many customers who call or write before they buy. When we rebuilt its Google Ads account, we added tracking for phone calls and other contacts the customer starts, so the team could see which searches led to a conversation. In six months, contact form submissions grew 320% and phone calls 21%, while the cost per conversion fell 60.6%.</p>



<p class="wp-block-paragraph"><strong>Read more:</strong> <a href="https://scandiweb.com/blog/ppc-case-study-more-leads-with-less-costs/" target="_blank" rel="noopener">PPC Case Study: 320% More Leads in 6 Months with Less Costs</a></p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-wainbee-first-contact.png" alt="Wainbee engineering systems distributor website shown on desktop and mobile screens" class="wp-image-26047" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-wainbee-first-contact.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-wainbee-first-contact-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-wainbee-first-contact-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-wainbee-first-contact-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-wainbee-first-contact-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-wainbee-first-contact-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-wainbee-first-contact-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Wainbee tracks the calls and forms that start most of its B2B deals</figcaption></figure></div>



<h3 class="wp-block-heading">5. Purchase and approval</h3>



<p class="wp-block-paragraph">Procurement usually leads this stage. They want the quote, the contract price, the payment terms, and the PO process to work without surprises, and they compare the final offer against what the buyer saw online.</p>



<p class="wp-block-paragraph">This is where a broken handoff costs the most. If the quote doesn&#8217;t match the web price, or the portal can&#8217;t take a PO with net terms, the buyer&#8217;s internal approval stalls. B2B platforms such as Adobe Commerce include company accounts with buyer roles, approval rules, and negotiable quotes for this stage. Our list of <a href="https://scandiweb.com/blog/top-9-adobe-commerce-b2b-features/" target="_blank" rel="noopener">Adobe Commerce B2B features</a> shows what comes built in.</p>



<h3 class="wp-block-heading">6. Reorder and expansion</h3>



<p class="wp-block-paragraph">After the first order, the journey turns into a loop. Buyers want to reorder in a few clicks, see their contract prices, track deliveries, and download invoices without asking anyone. Some of those reorders will be placed by software: procurement systems, punchout, and, over time, AI agents using protocols such as the <a href="https://scandiweb.com/blog/universal-commerce-protocol/" target="_blank" rel="noopener">Universal Commerce Protocol</a>.</p>



<p class="wp-block-paragraph">The rep&#8217;s job here is the account. They spot the categories the customer buys elsewhere and bring them in. The first order is day 0 of the relationship, and most of the revenue comes after it.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Two stages of the journey now happen almost entirely without you: problem research and the shortlist. The rep&#8217;s first real chance to change the outcome comes at validation, so that conversation has to be fast and exact.</p></div>



<h2 class="wp-block-heading">Who is in the B2B buying group</h2>



<p class="wp-block-paragraph">A B2B buying group is everyone who shapes a purchase decision. <a href="https://www.forrester.com/press-newsroom/forrester-2026-the-state-of-business-buying/" target="_blank" rel="noopener">Forrester&#8217;s 2026 State of Business Buying</a> report puts the typical group at 13 internal stakeholders and nine external influencers, such as consultants, peers, and analysts. The number grows for complex or strategic purchases.</p>



<p class="wp-block-paragraph">In an industrial purchase, the internal group usually includes engineering or maintenance, operations, quality, procurement, and finance, and sometimes sustainability and IT. Procurement carries real weight: Forrester found procurement professionals are decision-makers in 53% of business buying cycles.</p>



<p class="wp-block-paragraph">Buyers also test before they commit. More than 60% of business buyers now use a trial, and 78% of those spending $10 million or more do. For a distributor, a trial often means a sample order, a pilot site, or a first small PO.</p>



<p class="wp-block-paragraph">Every member of the group needs to find their answer without calling. Here is what each role usually checks:</p>



<ul class="wp-block-list">
<li><strong>Engineering and maintenance:</strong> specs, drawings, compatibility, and substitutes.</li>


<li><strong>Quality:</strong> certifications, test reports, and standards.</li>


<li><strong>Procurement:</strong> contract prices, lead times, and the PO and invoice process.</li>


<li><strong>Finance:</strong> total cost, payment terms, and credit.</li>


<li><strong>Sustainability:</strong> material, origin, and carbon data.</li>


<li><strong>IT:</strong> punchout and integration with procurement systems and the ERP.</li>

</ul>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Thirteen people rarely read the same page. Plan product pages and documents for each role in the buying group, because the person who blocks the deal is often one your rep never met.</p></div>



<h2 class="wp-block-heading">How AI changes B2B buying behavior</h2>



<p class="wp-block-paragraph">AI changes B2B buying behavior mainly at the research stage. In Gartner&#8217;s survey, 45% of buyers used generative AI in a recent purchase, mostly to research vendors and products, alongside an average of seven information sources. Buyers use it for speed, and they still check its answers with people.</p>



<p class="wp-block-paragraph">Buyers also doubt AI and reps about equally. In the same survey, 51% said they are more likely to get misleading information from generative AI, and 49% said the same about sales reps. Buyers treat both as sources that can be wrong. They use AI because it is fast and available at 11 p.m., and reps because a rep can be held to an answer.</p>



<p class="wp-block-paragraph">Forrester&#8217;s 2026 research found the same pattern: AI answer engines are now the starting point for business buyers, but they often deliver incomplete or unreliable information, so buyers look for validation from trusted sources.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-ai-vs-rep-trust.png" alt="Gartner 2026 survey figures on how B2B buyers trust generative AI and sales reps" class="wp-image-26050" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-ai-vs-rep-trust.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-ai-vs-rep-trust-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-ai-vs-rep-trust-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-ai-vs-rep-trust-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-ai-vs-rep-trust-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-ai-vs-rep-trust-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-ai-vs-rep-trust-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">B2B buyers doubt AI and reps about equally, then use reps to check the AI</figcaption></figure></div>



<p class="wp-block-paragraph">For suppliers, that creates two jobs. Make sure the AI answer about you is right, by publishing complete and consistent product data. Then make sure the person the buyer calls can confirm it in one conversation. To see what AI tools say about you today, our guide to <a href="https://scandiweb.com/blog/tracking-brand-mentions-in-llm-ai-generated-answers/" target="_blank" rel="noopener">tracking brand mentions in LLMs</a> shows a repeatable method, and our <a href="https://scandiweb.com/services/ai-search-optimization" target="_blank" rel="noopener">AI search optimization</a> team runs the same check across hundreds of buyer prompts.</p>



<h2 class="wp-block-heading">What the B2B sales rep does now</h2>



<p class="wp-block-paragraph">The B2B sales rep in 2027 mainly validates what buyers have already found and manages the account after the first order. Buyers come to the rep with research already done and ask them to confirm price, availability, and technical fit, to help win internal approval, and to finalize the order.</p>



<p class="wp-block-paragraph">Gartner names four moments where reps remain the most important information source: defining the business problem, identifying a preferred supplier, securing internal support, and finalizing the purchase. Robert Blaisdell, VP Analyst at Gartner, warned sales leaders not to read the preference for digital self-service as &#8220;a signal that sellers matter less.&#8221; Gartner&#8217;s advice is to stop adding reps to every stage and bring them in where they add the most.</p>



<p class="wp-block-paragraph">The validator job needs four things many B2B sellers don&#8217;t have yet:</p>



<ul class="wp-block-list">
<li><strong>The customer&#8217;s view.</strong> The rep sees the same prices, stock, and order history the buyer sees in the portal.</li>


<li><strong>Live data.</strong> Stock and lead times come straight from the ERP during the call.</li>


<li><strong>One price logic.</strong> A rep&#8217;s quote uses the same contract price rules as the website.</li>


<li><strong>The research trail.</strong> The rep knows which products and pages the account viewed before calling, from the CRM and web analytics.</li>

</ul>



<p class="wp-block-paragraph">Macron, the teamwear and sportswear brand, solved the first of these on Adobe Commerce. Its &#8220;Shop as a Customer&#8221; feature lets Macron&#8217;s team log in under a partner&#8217;s account and help with bulk orders and complex configurations, using the prices and catalog that partner sees. Macron serves distributors, sports clubs, and retailers in more than 150 countries, and the platform is integrated with its SAP ERP. Order creation time fell 40%.</p>



<p class="wp-block-paragraph"><strong>Read more:</strong> <a href="https://scandiweb.com/blog/case-study-macron-adobe-commerce-b2b-platform/" target="_blank" rel="noopener">Case Study: Macron&#8217;s B2B Platform Evolution with Adobe Commerce</a></p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>A rep who sees exactly what the customer sees can validate in one call. A rep working from a different price list creates the inconsistency that makes buyers switch suppliers.</p></div>



<h2 class="wp-block-heading">What suppliers must keep consistent across the journey</h2>



<p class="wp-block-paragraph">Suppliers must keep product data, prices, stock, lead times, and terms the same everywhere a buyer meets them: the website, AI answers, the rep&#8217;s quote, the portal, and the invoice. McKinsey&#8217;s 2026 B2B Pulse survey of nearly 4,000 decision-makers names inconsistent information as a leading reason buyers switch suppliers.</p>



<p class="wp-block-paragraph"><a href="https://www.mckinsey.com/capabilities/growth-marketing-and-sales/our-insights/the-surprising-economics-of-b2b-growth-the-new-survival-threshold-and-what-it-takes-to-thrive" target="_blank" rel="noopener">McKinsey</a> also found that buyers use around ten channels during a purchase. Each channel is a chance for a different number. Most inconsistencies have the same cause: the fact is stored in more than one system, or typed by hand into a quote.</p>



<figure class="wp-block-table"><table><thead><tr><th>Fact</th><th>Where buyers see it</th><th>Where it should come from</th></tr></thead><tbody><tr><td>Specs and compatibility</td><td>Product pages, AI answers, datasheets</td><td>PIM</td></tr><tr><td>Contract price</td><td>Portal, rep quote, invoice</td><td>ERP price rules</td></tr><tr><td>Stock and lead time</td><td>Product page, checkout, rep call</td><td>ERP or warehouse system, live</td></tr><tr><td>Payment terms and credit</td><td>Checkout, quote, invoice</td><td>ERP customer record</td></tr><tr><td>Certifications and documents</td><td>Product pages, tenders, AI answers</td><td>PIM or DAM</td></tr><tr><td>Order history</td><td>Portal, rep view, account review</td><td>ERP, through the commerce platform</td></tr></tbody></table><figcaption class="wp-element-caption">Which system each buyer-facing fact should come from</figcaption></figure>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-one-source-of-facts.png" alt="Diagram of ERP and PIM data feeding the website, AI answers, sales rep quotes, the portal, and invoices" class="wp-image-26051" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-one-source-of-facts.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-one-source-of-facts-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-one-source-of-facts-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-one-source-of-facts-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-one-source-of-facts-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-one-source-of-facts-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/b2b-buyer-journey-one-source-of-facts-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Every place a buyer checks a fact should read it from the same system</figcaption></figure></div>



<p class="wp-block-paragraph">The fix is usually integration work. Connect the PIM and the ERP to the storefront, the rep tools, and the feeds AI tools read, so every channel reads from one source. Our guides to <a href="https://scandiweb.com/blog/ecommerce-erp-integration/" target="_blank" rel="noopener">eCommerce ERP integration</a> and <a href="https://scandiweb.com/blog/pim-ecommerce-integration-what-you-need-to-know/" target="_blank" rel="noopener">PIM and eCommerce integration</a> explain how to scope both.</p>



<p class="wp-block-paragraph"><strong>Test for your team:</strong> ask ChatGPT for the lead time and price range of your three bestsellers, then ask a rep, then check the portal. Every answer that differs is a question a buyer will ask too.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>A buyer can catch a mismatch in any fact that appears in two places. Count how many systems store your contract prices: each extra one is another chance for the quote and the invoice to differ.</p></div>



<h2 class="wp-block-heading">How to map your B2B buyer journey</h2>



<p class="wp-block-paragraph">To map your B2B buyer journey, start from real deals. Interview recent customers, list the roles in each buying group, record which sources each role used at each stage, and mark where your website, AI answers, and reps gave different information. Then fix the stage where the most deals stall.</p>



<ol class="wp-block-list">
<li><strong>Pick ten recent deals, won and lost.</strong> Ask each customer how they found you, who was involved, and what made them get in touch.</li>


<li><strong>Name the roles.</strong> Write down who in each buying group checked what, using the six stages above.</li>


<li><strong>Ask AI what your buyers ask it.</strong> Run your buyers&#8217; real questions in ChatGPT, Gemini, and Perplexity, and record whether you are named and whether the facts are right.</li>


<li><strong>Trace each fact to its source.</strong> For price, stock, lead time, and specs, find the system it comes from on the website, in quotes, and on invoices.</li>


<li><strong>Find where deals stall.</strong> CRM data on time in stage and lost reasons shows where the journey breaks.</li>


<li><strong>Fix one stage at a time.</strong> Start with the stage that loses the most revenue, which is usually validation or reorder.</li>

</ol>



<p class="wp-block-paragraph">If you are deciding what to fund first next year, our guide to <a href="https://scandiweb.com/blog/b2b-ecommerce-trends/" target="_blank" rel="noopener">B2B eCommerce trends for 2027</a> covers which gaps to close first, and our <a href="https://scandiweb.com/b2b-ecommerce-solutions" target="_blank" rel="noopener">B2B eCommerce solutions</a> page shows how we approach the work after go-live.</p>



<h2 class="wp-block-heading">FAQ about the B2B buyer journey</h2>



<h3 class="wp-block-heading">What are the stages of the B2B buyer journey?</h3>



<p class="wp-block-paragraph">The B2B buyer journey has six stages: problem definition, research and shortlist, evaluation by the buying group, validation, purchase and approval, and reorder. Buyers often loop back to an earlier stage when the group&#8217;s needs change. In 2027, AI tools handle much of the research and shortlist, and sales reps matter most at validation and approval.</p>



<h3 class="wp-block-heading">Do B2B buyers still want to talk to sales reps?</h3>



<p class="wp-block-paragraph">Yes, at specific moments. Gartner found that 67% of B2B buyers prefer a rep-free experience, and 69% prefer to validate AI-generated insights with a sales rep. Buyers want to research and reorder on their own, then talk to a rep to confirm price, availability, and technical fit, and to get internal approval for larger orders.</p>



<h3 class="wp-block-heading">How do B2B buyers use AI in the buying journey?</h3>



<p class="wp-block-paragraph">B2B buyers use AI mostly to research suppliers and products. In a 2026 Gartner survey, 45% had used generative AI in a recent purchase, alongside about seven other information sources. Buyers ask AI tools to explain options, name suppliers, and compare specs, then check the answers with a sales rep or the supplier&#8217;s website.</p>



<h3 class="wp-block-heading">How many people are in a B2B buying group?</h3>



<p class="wp-block-paragraph">Forrester&#8217;s 2026 research puts the typical B2B buying decision at 13 internal stakeholders and nine external influencers, and the number grows for complex purchases. In manufacturing and distribution, the group usually includes engineering, operations, quality, procurement, and finance. Procurement professionals are decision-makers in 53% of buying cycles.</p>



<h3 class="wp-block-heading">How is the B2B buyer journey different from B2C?</h3>



<p class="wp-block-paragraph">A B2B purchase involves a buying group instead of one shopper, longer evaluation, contract prices and payment terms, and procurement approval. It also continues after the first order through reorders. A B2C journey usually ends at checkout and depends on one person&#8217;s decision, while a B2B journey depends on many people agreeing on the same facts.</p>



<h3 class="wp-block-heading">What does a B2B sales rep do?</h3>



<p class="wp-block-paragraph">A B2B sales rep helps business customers choose, buy, and reorder products. In 2027 that job is shifting toward validation: confirming the price, stock, and fit that buyers already researched online or with AI, helping them win internal approval, and growing the account after the first order. Reps need access to the same data the customer sees.</p>



<h2 class="wp-block-heading">The B2B buyer journey in 2027 runs on one set of facts</h2>



<p class="wp-block-paragraph">The B2B buyer journey in 2027 starts with AI and search and ends with a rep, a quote, and a portal that the buyer comes back to. Buyers move between those sources freely and check one against another. Suppliers keep winning orders when their website, AI answers, reps, and invoices all show the same price, stock, and specs. Start by tracing where each of those facts comes from, then give your reps the same view of the account that the customer has.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><style> p.box { border: 1px solid black; padding-top: 30px; padding-right: 30px; padding-bottom: 30px; padding-left: 30px; } </style> <p class="box"><em>Hearing &quot;we already compared you in ChatGPT&quot; from new buyers? </em><a href="https://scandiweb.com/contact" target="_blank" rel="noreferrer noopener"><em>Tell us where your deals stall today</em></a><em>, and we&#x27;ll show you which part of the journey to fix first.</em></p></p>
<p>The post <a rel="nofollow" href="https://scandiweb.com/blog/b2b-buyer-journey/">The B2B Buyer Journey in 2027: How Buyers Use AI and Sales Reps</a> appeared first on <a rel="nofollow" href="https://scandiweb.com/blog">scandiweb</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Why GA4 Doesn&#8217;t Match Your Orders: Unassigned Traffic, (not set), and Missing Sales</title>
		<link>https://scandiweb.com/blog/ga4-unassigned-traffic/</link>
		
		<dc:creator><![CDATA[Andres Reitsnik]]></dc:creator>
		<pubDate>Wed, 21 Oct 2026 11:00:00 +0000</pubDate>
				<category><![CDATA[Data Analytics]]></category>
		<category><![CDATA[Digital Growth]]></category>
		<category><![CDATA[Data Tracking]]></category>
		<category><![CDATA[ecommerce data analytics]]></category>
		<category><![CDATA[GA4]]></category>
		<category><![CDATA[GA4 unassigned traffic]]></category>
		<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[Google Analytics 4]]></category>
		<category><![CDATA[Google Consent Mode]]></category>
		<category><![CDATA[Google Tag Manager]]></category>
		<guid isPermaLink="false">https://scandiweb.com/blog/?p=26062</guid>

					<description><![CDATA[<p>GA4 unassigned traffic, (not set) and missing orders explained: which gaps are normal, what to fix, and a monthly check against your store.</p>
<p>The post <a rel="nofollow" href="https://scandiweb.com/blog/ga4-unassigned-traffic/">Why GA4 Doesn&#8217;t Match Your Orders: Unassigned Traffic, (not set), and Missing Sales</a> appeared first on <a rel="nofollow" href="https://scandiweb.com/blog">scandiweb</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="lazyblock-related-Ga4Ut wp-block-lazyblock-related"><div class="related-services">
  <h3>Related Services</h3>
  <ul>
    
    <li>
      <a  href="https://scandiweb.com/services/analytics" target=_blank >
        Analytics
      </a>
    </li>
    
    <li>
      <a  href="https://scandiweb.com/ga4-migration-consultancy" target=_blank >
        GA4 Migration and Setup
      </a>
    </li>
    
    <li>
      <a  href="https://scandiweb.com/services/google-analytics-4-support" target=_blank >
        GA4 Support
      </a>
    </li>
    
  </ul>
</div>
</div>


<p class="wp-block-paragraph">If your store backend shows more orders than GA4 again this month, or if the Unassigned row in your traffic report keeps growing, you&#8217;re probably asking one question: is this a tracking problem, or are we really selling less?</p>



<p class="wp-block-paragraph">GA4 unassigned traffic, (not set) values, and missing purchases usually point at the same few causes: consent, blocked tags, payment pages that send shoppers back as referrals, purchase events that fire twice or not at all, and bots. Below, we go through each cause and how to confirm it in your own reports. The guide ends with a monthly check that compares GA4 with your order database, so the next gap gets caught in weeks.</p>



<h2 class="wp-block-heading">Is the gap between GA4 and your orders normal?</h2>



<p class="wp-block-paragraph">GA4 will never match your order database exactly, and it isn&#8217;t meant to. The backend records every paid order. GA4 records the purchases it was allowed to see and managed to receive. A stable gap is normal. A gap that suddenly grows, sits on one payment method, or comes with a jump in GA4 unassigned traffic usually means something in the tracking broke.</p>



<h3 class="wp-block-heading">Gaps you should expect</h3>



<p class="wp-block-paragraph">Some orders never reach GA4 by design.</p>



<ul class="wp-block-list">
<li>Shoppers who decline analytics cookies, when consent mode blocks the Google tag</li>


<li>Browsers and extensions that block requests to Google Analytics</li>


<li>Phone, marketplace, and manually created orders that never pass through the website</li>


<li>Orders completed on a payment provider&#8217;s page when the shopper never comes back to the confirmation page</li>

</ul>



<p class="wp-block-paragraph">Other differences come from how each system counts. GA4 reports in the property&#8217;s time zone, so orders placed near midnight can land on a different day than in the backend. Standard GA4 properties also keep processing data for 24–48 hours, so yesterday&#8217;s numbers may still change. And refunds or cancellations only reduce GA4 revenue if your store sends a refund event.</p>



<h3 class="wp-block-heading">Signs the gap is a tracking problem</h3>



<figure class="wp-block-table"><table><thead><tr><th>What you see</th><th>What it usually means</th></tr></thead><tbody><tr><td>The gap jumps after a theme, checkout, or app release</td><td>The purchase tag or dataLayer changed</td></tr><tr><td>GA4 shows more purchases than the backend</td><td>Purchase events fire twice, often on confirmation page reloads</td></tr><tr><td>The gap sits on one payment method</td><td>Shoppers don&#8217;t return from that provider&#8217;s page</td></tr><tr><td>paypal.com or a bank domain appears as a referral</td><td>Payment domains are missing from the unwanted referrals list</td></tr><tr><td>Unassigned or (not set) share grows month over month</td><td>Tags fire in the wrong order, or UTM values don&#8217;t match channel rules</td></tr><tr><td>Revenue matches but order counts don&#8217;t</td><td>Transaction IDs are missing or reused</td></tr></tbody></table><figcaption class="wp-element-caption">Signs that a GA4 gap is a tracking problem, and what each one usually means</figcaption></figure>



<p class="wp-block-paragraph">If the gap opened right after a replatform, start with tracking before you look at rankings. The traffic-drop triage in our <a href="https://scandiweb.com/blog/seo-migration-checklist/" target="_blank" rel="noopener">SEO migration checklist</a> puts the same check first.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-order-gap-causes.png" alt="Waterfall chart comparing store backend orders with GA4 purchases, with bars for consent, blocked tags, payment redirects and duplicates" class="wp-image-26057" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-order-gap-causes.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-order-gap-causes-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-order-gap-causes-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-order-gap-causes-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-order-gap-causes-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-order-gap-causes-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-order-gap-causes-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Where orders fall out between your store backend and GA4</figcaption></figure></div>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Watch how the gap moves from month to month. If consent costs you around 15% of orders every month, that&#8217;s your baseline. If the gap jumps from 8% to 20% in one week, look for a broken tag.</p></div>



<h2 class="wp-block-heading">What is unassigned traffic in GA4?</h2>



<p class="wp-block-paragraph">Unassigned traffic in GA4 is traffic that GA4 couldn&#8217;t place in any default channel. Google defines Unassigned as &#8220;the value Analytics uses when there are no other channel rules that match the event data.&#8221; It usually appears when a UTM source or medium doesn&#8217;t match any channel rule, or when events reach GA4 without the session or user details that attribution needs.</p>



<p class="wp-block-paragraph">Direct is a separate channel with its own rule: the source has to be exactly &#8220;(direct)&#8221; with no medium. A session lands in Unassigned when GA4 got a source it couldn&#8217;t match to any rule, or got no usable source at all.</p>



<h3 class="wp-block-heading">Common causes of GA4 unassigned traffic</h3>



<p class="wp-block-paragraph">The most common cause is campaign tagging. GA4 puts a session in Email only when the source or medium is &#8220;email&#8221;, &#8220;e-mail&#8221;, &#8220;e_mail&#8221; or &#8220;e mail&#8221;, so a link tagged utm_medium=newsletter matches no rule and lands in Unassigned. Medium values like &#8220;banner&#8221; or &#8220;influencer&#8221;, or a campaign name typed into the medium field, end up in the same place.</p>



<p class="wp-block-paragraph">The other causes are technical.</p>



<ul class="wp-block-list">
<li>Purchase or lead events sent from your server through the Measurement Protocol, without the browser&#8217;s client ID and session ID, can&#8217;t be joined to a session</li>


<li>Custom events that fire before the Google tag&#8217;s config command can&#8217;t be tied to a session properly, and Google lists this as a cause of both unassigned and (not set) values</li>


<li>A cookie prefix that differs between pages, or a cross-domain linker that changes the client ID, splits one visit into short sessions that GA4 can&#8217;t attribute</li>

</ul>



<h3 class="wp-block-heading">How to fix unassigned traffic in GA4</h3>



<p class="wp-block-paragraph">Start by finding out what is inside the Unassigned row. In Reports, open Acquisition, then Traffic acquisition, and change the primary dimension to Session source / medium while filtering for Unassigned. Each row points to a cause.</p>



<ol class="wp-block-list">
<li>Readable source and medium values, such as &#8220;klaviyo / newsletter&#8221;, mean your UTM naming doesn&#8217;t match GA4&#8217;s rules. Agree a naming convention with the marketing team and fix the links at the source. A custom channel group can relabel these sessions in reports, but the links stay wrong until someone retags them.</li>


<li>&#8220;(not set) / (not set)&#8221; usually means missing session data. Check that the Google tag fires first, on the Initialization trigger in Google Tag Manager, before any event tags.</li>


<li>Unassigned traffic that rises around purchase or lead events usually comes from server-side events. Send the client ID and session ID with every Measurement Protocol event.</li>

</ol>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-acquisition-report.png" alt="GA4 traffic acquisition table with the unassigned channel highlighted and a panel of source and medium values behind it" class="wp-image-26058" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-acquisition-report.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-acquisition-report-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-acquisition-report-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-acquisition-report-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-acquisition-report-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-acquisition-report-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-acquisition-report-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">The source / medium values inside the Unassigned row show what to fix</figcaption></figure></div>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Check the campaign links before you touch the tags. A one-page UTM naming guide for everyone who builds links, agencies included, often clears more of the Unassigned row than a developer can.</p></div>



<h2 class="wp-block-heading">What does (not set) mean in GA4?</h2>



<p class="wp-block-paragraph">(not set) in GA4 means a dimension had no value: GA4 received the data without a piece of information it expected. The same label appears in many reports, and the cause depends on which dimension shows it, so check the dimension before changing any tags.</p>



<ul class="wp-block-list">
<li>In Session source / medium, (not set) means the session has no session_start event, and Google&#8217;s fix is to fire the Google tag on the &#8220;Initialization &#8211; All pages&#8221; trigger in Google Tag Manager</li>


<li>In Landing page, it means the session has no page_view event, which happens when a session starts with another event, such as a purchase sent from a server</li>


<li>In Google Ads dimensions, it means the Ads account isn&#8217;t linked to GA4 or auto-tagging is off</li>


<li>In a newly registered custom parameter, it can show for the first 24 hours</li>

</ul>



<p class="wp-block-paragraph">Consent settings can also cause (not set). Google notes that calling the consent default command again when a shopper changes their choice, instead of the update command, can drop the session_start event. Sending events marked as denied after the shopper has accepted cookies does the same. If your consent banner went live around the time (not set) appeared, check how it sends consent changes. Our guide to <a href="https://scandiweb.com/blog/google-consent-mode-v2/" target="_blank" rel="noopener">Google Consent Mode v2</a> covers the setup itself.</p>



<h2 class="wp-block-heading">Why GA4 is missing transactions</h2>



<p class="wp-block-paragraph">When GA4 shows fewer purchases than your backend, the cause is usually one of three things: the shopper didn&#8217;t come back from the payment page, consent or a blocker stopped the tag, or the purchase event fired wrongly. Check them in that order, because the first one leaves the clearest trace in your reports.</p>



<h3 class="wp-block-heading">Payment redirects and self-referrals</h3>



<p class="wp-block-paragraph">Many payment flows send the shopper away from your store: PayPal, Klarna, bank transfer pages, or a bank&#8217;s 3-D Secure check. Two things can go wrong.</p>



<p class="wp-block-paragraph">The shopper pays but closes the tab before the confirmation page loads, so the purchase event never fires. The order exists in the backend and is missing from GA4.</p>



<p class="wp-block-paragraph">Or the shopper returns, and GA4 treats the payment domain as a new referral. The purchase then gets credited to paypal.com instead of the ad or email that brought the shopper in. To stop that, add every payment and 3-D Secure domain to the unwanted referrals list in the GA4 data stream settings. GA4 allows up to 50 conditions per stream. The list only works going forward, so sessions already credited to those domains stay as they are.</p>



<p class="wp-block-paragraph">For the orders that never reach the confirmation page, the only full fix is to <a href="https://scandiweb.com/blog/server-side-tracking/">send the purchase from your server</a> when the order is created, through the Measurement Protocol, with the shopper&#8217;s client ID and session ID attached. Without those IDs, the purchase shows up in GA4 as unassigned.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-missing-transactions-payment-redirect.png" alt="Diagram of a checkout leaving the store for a payment page and returning, with the points where GA4 loses or misattributes the purchase" class="wp-image-26059" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-missing-transactions-payment-redirect.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-missing-transactions-payment-redirect-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-missing-transactions-payment-redirect-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-missing-transactions-payment-redirect-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-missing-transactions-payment-redirect-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-missing-transactions-payment-redirect-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-missing-transactions-payment-redirect-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Where payment redirects lose purchases and create self-referrals in GA4</figcaption></figure></div>



<h3 class="wp-block-heading">Consent, ad blockers, and short cookies</h3>



<p class="wp-block-paragraph">Shoppers who decline analytics cookies, or browse with a blocker, don&#8217;t send observed purchases to GA4. That gap is real and permanent. With advanced consent mode, GA4 can model some of the missing behavior, but only once the property passes Google&#8217;s thresholds: at least 1,000 events a day with analytics consent denied for 7 days, and at least 1,000 daily users who accepted on 7 of the last 28 days. Smaller stores often never qualify.</p>



<p class="wp-block-paragraph">Safari also <a href="https://scandiweb.com/blog/ready-for-cookieless-future/">limits cookies set by JavaScript to seven days</a>. A shopper who comes back after two weeks looks like a new user, and the earlier campaign gets no credit for the sale. The order still reaches GA4, but the campaign that won it shows up as Direct.</p>



<p class="wp-block-paragraph">How much consent costs you depends on your markets and your banner. Compare the gap for EU countries with the gap for countries where you don&#8217;t show a banner, and you&#8217;ll see the size of it. The <a href="https://scandiweb.com/blog/google-consent-mode-v2/" target="_blank" rel="noopener">consent mode guide</a> explains the basic and advanced options.</p>



<h3 class="wp-block-heading">Purchase events that fire twice or not at all</h3>



<p class="wp-block-paragraph">GA4 removes duplicate purchases when they share the same transaction ID, but only for the same user and only on web data streams. That covers most confirmation page reloads. These four problems get through anyway.</p>



<ul class="wp-block-list">
<li>An empty transaction ID: Google says GA4 deduplicates every purchase sent with transaction_id=&#8221;&#8221;, so they collapse into one and you undercount</li>


<li>Two tags for one purchase, such as a platform app and a Google Tag Manager tag, where only one of them sends the transaction ID</li>


<li>A cart ID or quote ID sent in place of the order number, which makes different orders look like duplicates</li>


<li>A purchase tag that fires on page load before the order data is in the dataLayer, so it sends no value or no items</li>

</ul>



<p class="wp-block-paragraph">Test this with real orders. Place orders with each payment method in GA4&#8217;s DebugView and compare the transaction ID, value, and currency with the backend. Our guide to <a href="https://scandiweb.com/blog/data-tracking-setup-datalayer/" target="_blank" rel="noopener">dataLayer QA</a> covers the checks for each eCommerce event.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Export a month of GA4 transaction IDs and match them against backend order numbers. The orders that are missing tell you more than the totals do: if most of them used one payment method, you&#8217;ve found the leak.</p></div>



<h2 class="wp-block-heading">How to spot and filter bot traffic in GA4</h2>



<p class="wp-block-paragraph">GA4 removes traffic from known bots and spiders automatically, using Google&#8217;s research and the IAB&#8217;s International Spiders and Bots List. You can&#8217;t turn this off, and you can&#8217;t see how much it removed. Bots that aren&#8217;t on the list still get through, and they often appear as sudden spikes in Direct, Unassigned, or Referral traffic.</p>



<p class="wp-block-paragraph">GA4 bot traffic usually follows a pattern you can see in an exploration.</p>



<ul class="wp-block-list">
<li>A spike in sessions with no matching rise in orders or add-to-carts</li>


<li>Average engagement time close to zero and an engagement rate far below normal</li>


<li>Most sessions from one city, often near a data center, or from one unusual screen resolution</li>


<li>One landing page, or a hostname that isn&#8217;t your store</li>

</ul>



<p class="wp-block-paragraph">Once you&#8217;ve confirmed a spike, you have three options. For reporting, build a segment or a report filter that excludes the pattern, which hides it without deleting anything. For future data, GA4&#8217;s data filters cover internal traffic, developer traffic, and traffic from other hostnames. Those filters are permanent and only apply from the day you activate them, so test them on a copy of the report first. For the bots themselves, block them at your CDN or firewall, before they reach the store.</p>



<p class="wp-block-paragraph">Bots don&#8217;t only inflate traffic. Card-testing bots also create real failed or fraudulent orders in your backend, which makes the GA4 gap look worse than it is. Our guide to <a href="https://scandiweb.com/blog/magento-fraud-prevention/" target="_blank" rel="noopener">Magento fraud prevention</a> explains how to spot card testing.</p>



<h2 class="wp-block-heading">A monthly GA4 reconciliation routine</h2>



<p class="wp-block-paragraph">A monthly reconciliation compares GA4 with your order database on the same terms, so you know your normal gap and spot a new one within weeks. Once the exports are scheduled, it&#8217;s a short monthly job.</p>



<ol class="wp-block-list">
<li>Export last month&#8217;s paid orders from the backend, without test orders, and with the order number, payment method, country, and total</li>


<li>Export GA4 purchases for the same month with transaction ID, payment method if you send it, country, and purchase revenue</li>


<li>Set both exports to the same time zone and currency before comparing</li>


<li>Calculate the capture rate: GA4 purchases divided by backend orders</li>


<li>Match transaction IDs to order numbers and list the missing orders by payment method and country</li>


<li>Check for transaction IDs that appear more than once in GA4</li>


<li>Record the share of Unassigned and (not set) sessions, and note any traffic spikes</li>


<li>Compare everything with the last three months, next to a log of site releases and changes to the consent banner or payment methods</li>

</ol>



<p class="wp-block-paragraph">On Magento, the order export can be scheduled, so step 1 runs on its own. Our guide to <a href="https://scandiweb.com/blog/how-to-export-orders-magento-2/" target="_blank" rel="noopener">exporting orders in Magento 2</a> shows the options.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-monthly-reconciliation-sheet.png" alt="Spreadsheet comparing monthly backend orders with GA4 purchases, capture rate and unassigned share, with one month flagged" class="wp-image-26060" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-monthly-reconciliation-sheet.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-monthly-reconciliation-sheet-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-monthly-reconciliation-sheet-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-monthly-reconciliation-sheet-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-monthly-reconciliation-sheet-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-monthly-reconciliation-sheet-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/ga4-unassigned-traffic-monthly-reconciliation-sheet-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">A monthly GA4 reconciliation sheet shows when the gap changes</figcaption></figure></div>



<p class="wp-block-paragraph">When the capture rate moves by more than a few points from its three-month average, treat it as a tracking incident first. Most of the time, the cause is in the release log from the same week.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Add a column for the release log to the reconciliation sheet. When the capture rate drops, the cause is usually listed a row above it, as a theme update or a new checkout app.</p></div>



<h2 class="wp-block-heading">Frequently asked questions about GA4 unassigned traffic</h2>



<h3 class="wp-block-heading">Why is GA4 showing unassigned traffic?</h3>



<p class="wp-block-paragraph">GA4 shows unassigned traffic when it can&#8217;t match a session&#8217;s source and medium to any default channel rule. The most common cause is UTM tagging that doesn&#8217;t follow GA4&#8217;s naming, such as utm_medium=newsletter instead of email. Server-side events without a client ID and session ID, and tags that fire before the Google tag&#8217;s config command, also create unassigned sessions.</p>



<h3 class="wp-block-heading">What does (not set) mean in Google Analytics 4?</h3>



<p class="wp-block-paragraph">(not set) means GA4 received data without a value for that dimension. For session source / medium, the session is missing its session_start event. For landing page, the session has no page_view event. For Google Ads dimensions, the Ads account isn&#8217;t linked. The fix depends on the dimension, so check which report shows it before changing tags.</p>



<h3 class="wp-block-heading">Why doesn&#8217;t GA4 revenue match Shopify or Magento?</h3>



<p class="wp-block-paragraph">GA4 revenue rarely matches Shopify or Magento because the store records every paid order, while GA4 only records purchases it is allowed to see. Declined consent, blocked tags, shoppers who don&#8217;t return from payment pages, time zone differences, and refunds that aren&#8217;t sent to GA4 all widen the gap. A stable gap is normal, and a sudden change points to a tracking fault.</p>



<h3 class="wp-block-heading">Does GA4 filter bot traffic automatically?</h3>



<p class="wp-block-paragraph">Yes, GA4 automatically excludes known bots and spiders using Google&#8217;s research and the IAB International Spiders and Bots List. You can&#8217;t turn it off or see how much traffic it removed. Bots that aren&#8217;t on the list still get through, so spikes with near-zero engagement time need a segment, a data filter, or blocking at your CDN or firewall.</p>



<h3 class="wp-block-heading">How do I stop PayPal from showing as a referral in GA4?</h3>



<p class="wp-block-paragraph">Add paypal.com, and every other payment or 3-D Secure domain your checkout uses, to the unwanted referrals list in your GA4 web data stream settings. GA4 then ignores those domains as traffic sources when shoppers return to your store. The change only applies to new data, so sessions already credited to PayPal stay in past reports.</p>



<h3 class="wp-block-heading">How much difference between GA4 and backend orders is normal?</h3>



<p class="wp-block-paragraph">There is no single normal figure, because it depends on your markets, consent banner, and payment methods. Stores that show a consent banner to EU shoppers can expect a bigger gap than stores without one. What matters is that the gap stays stable from month to month. Track the capture rate each month and investigate when it moves by more than a few points.</p>



<h2 class="wp-block-heading">Tracking problem or real drop: how to tell</h2>



<p class="wp-block-paragraph">GA4 unassigned traffic, (not set) values, and missing orders are almost always tracking questions before they are sales questions. Check the gap against your own baseline, look inside the Unassigned row, follow the missing orders by payment method, and filter out bots before anyone cuts a budget. If the capture rate holds steady while orders fall in both systems, the drop is real, and the conversation can move on to demand and pricing.</p>



<script type="application/ld+json">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "Why is GA4 showing unassigned traffic?", "acceptedAnswer": {"@type": "Answer", "text": "GA4 shows unassigned traffic when it can't match a session's source and medium to any default channel rule. The most common cause is UTM tagging that doesn't follow GA4's naming, such as utm_medium=newsletter instead of email. Server-side events without a client ID and session ID, and tags that fire before the Google tag's config command, also create unassigned sessions."}}, {"@type": "Question", "name": "What does (not set) mean in Google Analytics 4?", "acceptedAnswer": {"@type": "Answer", "text": "(not set) means GA4 received data without a value for that dimension. For session source / medium, the session is missing its session_start event. For landing page, the session has no page_view event. For Google Ads dimensions, the Ads account isn't linked. The fix depends on the dimension, so check which report shows it before changing tags."}}, {"@type": "Question", "name": "Why doesn't GA4 revenue match Shopify or Magento?", "acceptedAnswer": {"@type": "Answer", "text": "GA4 revenue rarely matches Shopify or Magento because the store records every paid order, while GA4 only records purchases it is allowed to see. Declined consent, blocked tags, shoppers who don't return from payment pages, time zone differences, and refunds that aren't sent to GA4 all widen the gap. A stable gap is normal, and a sudden change points to a tracking fault."}}, {"@type": "Question", "name": "Does GA4 filter bot traffic automatically?", "acceptedAnswer": {"@type": "Answer", "text": "Yes, GA4 automatically excludes known bots and spiders using Google's research and the IAB International Spiders and Bots List. You can't turn it off or see how much traffic it removed. Bots that aren't on the list still get through, so spikes with near-zero engagement time need a segment, a data filter, or blocking at your CDN or firewall."}}, {"@type": "Question", "name": "How do I stop PayPal from showing as a referral in GA4?", "acceptedAnswer": {"@type": "Answer", "text": "Add paypal.com, and every other payment or 3-D Secure domain your checkout uses, to the unwanted referrals list in your GA4 web data stream settings. GA4 then ignores those domains as traffic sources when shoppers return to your store. The change only applies to new data, so sessions already credited to PayPal stay in past reports."}}, {"@type": "Question", "name": "How much difference between GA4 and backend orders is normal?", "acceptedAnswer": {"@type": "Answer", "text": "There is no single normal figure, because it depends on your markets, consent banner, and payment methods. Stores that show a consent banner to EU shoppers can expect a bigger gap than stores without one. What matters is that the gap stays stable from month to month. Track the capture rate each month and investigate when it moves by more than a few points."}}]}</script>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><style> p.box { border: 1px solid black; padding-top: 30px; padding-right: 30px; padding-bottom: 30px; padding-left: 30px; } </style> <p class="box"><em>Not sure whether your GA4 gap is tracking or real? </em><a href="https://scandiweb.com/contact" target="_blank" rel="noreferrer noopener"><em>Send us your last month&#x27;s numbers</em></a><em>, and we&#x27;ll show you where the orders go missing.</em></p></p>
<p>The post <a rel="nofollow" href="https://scandiweb.com/blog/ga4-unassigned-traffic/">Why GA4 Doesn&#8217;t Match Your Orders: Unassigned Traffic, (not set), and Missing Sales</a> appeared first on <a rel="nofollow" href="https://scandiweb.com/blog">scandiweb</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>eCommerce Website Maintenance Cost: What a Support Retainer Should Include</title>
		<link>https://scandiweb.com/blog/website-maintenance-cost/</link>
		
		<dc:creator><![CDATA[Aigars Pavlovics]]></dc:creator>
		<pubDate>Tue, 20 Oct 2026 13:00:00 +0000</pubDate>
				<category><![CDATA[Digital Growth]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[24/7 support]]></category>
		<category><![CDATA[ecommerce]]></category>
		<category><![CDATA[eCommerce budgeting]]></category>
		<category><![CDATA[eCommerce operations]]></category>
		<category><![CDATA[Magento Support]]></category>
		<category><![CDATA[magento upgrade]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Support]]></category>
		<category><![CDATA[website maintenance]]></category>
		<guid isPermaLink="false">https://scandiweb.com/blog/?p=26074</guid>

					<description><![CDATA[<p>Website maintenance cost for online stores runs $300 to $5,000+ a month. Learn what drives it, what a retainer covers, and when 24/7 pays.</p>
<p>The post <a rel="nofollow" href="https://scandiweb.com/blog/website-maintenance-cost/">eCommerce Website Maintenance Cost: What a Support Retainer Should Include</a> appeared first on <a rel="nofollow" href="https://scandiweb.com/blog">scandiweb</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="lazyblock-related-WmCst wp-block-lazyblock-related"><div class="related-services">
  <h3>Related Services</h3>
  <ul>
    
    <li>
      <a  href="https://scandiweb.com/services/support" target=_blank >
        eCommerce Support
      </a>
    </li>
    
    <li>
      <a  href="https://scandiweb.com/services/performance-optimization" target=_blank >
        Performance Optimization
      </a>
    </li>
    
    <li>
      <a  href="https://scandiweb.com/services/enterprise-architecture" target=_blank >
        Enterprise Architecture
      </a>
    </li>
    
  </ul>
</div>
</div>


<p class="wp-block-paragraph">If your support invoice came in higher this month and nothing new went live, or if you&#8217;re about to sign a retainer and can&#8217;t tell whether 40 hours is too many, the answer to your website maintenance cost question is in the hours. You scroll down the invoice: an emergency security patch, a payment extension that broke after an update, a Saturday call about checkout errors, and six lines called &#8220;minor changes.&#8221; Each line looks reasonable. The total doesn&#8217;t.</p>



<p class="wp-block-paragraph">Most price guides won&#8217;t help much, because they&#8217;re written for brochure sites and add up domains, hosting, and SSL certificates. For an online store, those are rounding errors. This guide follows the hours instead: where they go, which ones belong in a retainer, what 24/7 cover adds, and how to check them on an invoice.</p>



<h2 class="wp-block-heading">How much does website maintenance cost for an online store?</h2>



<p class="wp-block-paragraph">Website maintenance cost for an online store runs from a few hundred dollars a month for a small store on a hosted platform to several thousand dollars a month for a custom or self-hosted store, and more for enterprise stores with 24/7 cover. Published guides from GoDaddy, Network Solutions, and Hostinger put eCommerce sites between $300 and $5,000 a month. Most of that bill is developer time.</p>



<figure class="wp-block-table"><table><thead><tr><th>Source</th><th>Monthly range</th><th>What the estimate covers</th></tr></thead><tbody><tr><td>GoDaddy</td><td>$300–$1,000</td><td>eCommerce websites</td></tr><tr><td>Network Solutions</td><td>$300–$2,000+</td><td>eCommerce websites</td></tr><tr><td>Hostinger</td><td>$750–$5,000</td><td>eCommerce websites</td></tr><tr><td>scandiweb Magento pricing guide</td><td>About $330–$4,200+</td><td>Magento (Adobe Commerce) maintenance and support, $4,000–$50,000+ a year</td></tr><tr><td>GoDaddy</td><td>$2,000–$25,000+</td><td>Enterprise websites</td></tr></tbody></table><figcaption class="wp-element-caption">Published monthly website maintenance cost ranges for eCommerce sites</figcaption></figure>



<p class="wp-block-paragraph">Treat these as signposts. None of the vendor guides explains its method, and each one mixes hosting, content writing, and development into the same total. A better way to estimate your own number is to count hours.</p>



<p class="wp-block-paragraph">A support retainer is mostly developer, DevOps, and QA time. Network Solutions puts technical support at $50 to $200 an hour. The examples below use a round $100 an hour, and the hours are there to show the arithmetic, not as benchmarks:</p>



<figure class="wp-block-table"><table><thead><tr><th>Example store</th><th>Monthly hours</th><th>What the hours cover</th><th>Monthly cost at $100/hour</th></tr></thead><tbody><tr><td>Small store on a hosted platform</td><td>10</td><td>Patches, monitoring, and a few fixes</td><td>$1,000</td></tr><tr><td>Mid-size store with a custom theme</td><td>40</td><td>The above, plus regular small improvements</td><td>$4,000</td></tr><tr><td>Self-hosted store with ERP and PIM integrations</td><td>120</td><td>Active development and on-call cover</td><td>$12,000</td></tr><tr><td>Enterprise or multi-store setup</td><td>200+</td><td>A dedicated team across several stores</td><td>$20,000+</td></tr></tbody></table><figcaption class="wp-element-caption">Example monthly support costs at $100 an hour (illustrative hours, not benchmarks)</figcaption></figure>



<p class="wp-block-paragraph">Swap in your agency&#8217;s rate and your real hours, and you have a number you can defend in a budget meeting. Our <a href="https://scandiweb.com/blog/magento-pricing/" target="_blank" rel="noopener">Magento pricing guide</a> shows how maintenance fits into total cost of ownership over five years.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/website-maintenance-cost-ecommerce-published-ranges.png" alt="Range chart comparing monthly eCommerce website maintenance cost estimates from GoDaddy, Network Solutions and Hostinger" class="wp-image-26069" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/website-maintenance-cost-ecommerce-published-ranges.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/website-maintenance-cost-ecommerce-published-ranges-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/website-maintenance-cost-ecommerce-published-ranges-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/website-maintenance-cost-ecommerce-published-ranges-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/website-maintenance-cost-ecommerce-published-ranges-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/website-maintenance-cost-ecommerce-published-ranges-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/website-maintenance-cost-ecommerce-published-ranges-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Published monthly website maintenance cost ranges for eCommerce sites</figcaption></figure></div>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>A low monthly fee with five included hours turns expensive the first month you need fifteen, because the extra ten are billed at the overage rate. Compare the hours behind two quotes before you compare the totals.</p></div>



<h2 class="wp-block-heading">What drives the monthly number</h2>



<p class="wp-block-paragraph">Five things set the monthly number for eCommerce website maintenance: security patching and platform upgrades, monitoring and hosting operations, incident response, small features and fixes, and the extensions and integrations that break when anything else changes. Hosting, domain, and SSL are a small share for most online stores. The platform matters most, because <a href="https://scandiweb.com/blog/magento-to-shopify-migration/">a self-hosted Magento store carries its own patching, while Shopify runs hosting and core updates</a>.</p>



<h3 class="wp-block-heading">Security patching and platform upgrades</h3>



<p class="wp-block-paragraph">On a self-hosted platform, patching is the line that never goes away. Adobe releases security patches for every supported Magento (Adobe Commerce) release line at least once a year, plus isolated security fixes in between, and you can only apply those if you&#8217;re already on the latest security-only patch. Each one has to be applied, regression-tested, and deployed. Stores that fall behind pay twice: first to catch up, then to patch.</p>



<p class="wp-block-paragraph"><a href="https://scandiweb.com/blog/magento-end-of-life/">Every release line also has an end date</a>. Regular support for 2.4.6 ended on August 11, 2026, and 2.4.7 follows on May 31, 2027, according to <a href="https://experienceleague.adobe.com/en/docs/commerce-operations/release/versions" target="_blank" rel="noopener">Adobe&#8217;s released versions page</a>. For many stores, an upgrade belongs in next year&#8217;s maintenance budget. Our <a href="https://scandiweb.com/blog/magento-2-version-upgrade-process-breakdown/" target="_blank" rel="noopener">Magento 2 upgrade process breakdown</a> shows what that work involves.</p>



<p class="wp-block-paragraph">If your store is in scope for PCI DSS, requirement 6.3.3 also expects critical security patches to be installed within one month of release. That deadline turns patching from &#8220;when we get to it&#8221; into a monthly commitment.</p>



<h3 class="wp-block-heading">Monitoring and hosting operations</h3>



<p class="wp-block-paragraph">This line covers uptime checks, error logs, server load, cron and queue health, backups, and certificate renewals. Most of it is automated, so the cost is in setting up alerts that matter and acting on them. On Shopify the line is small, because Shopify runs hosting and core updates and completes its own annual PCI DSS assessment. On <a href="https://scandiweb.com/blog/finding-the-best-magento-hosting-providers-in-2023/">self-hosted Magento</a> or a headless build, someone has to own the servers, the CDN, and the deployment pipeline, and that someone bills hours.</p>



<h3 class="wp-block-heading">Incident response</h3>



<p class="wp-block-paragraph">Incidents are the least predictable line. A payment provider changes an API, a cache fills up during a sale, or a critical vulnerability gets exploited before most stores have patched. In September 2026, Adobe released an emergency hotfix for StyleSmuggler, a Magento flaw with a CVSS score of 10.0 that attackers were already using. Stores had to apply the hotfix, check for signs of compromise, and rotate their credentials. Our <a href="https://scandiweb.com/blog/adobe-magento-stylesmuggler-patch/" target="_blank" rel="noopener">StyleSmuggler patch guide</a> covers what that took. Weeks like that one are why a retainer needs a stated rate for unplanned work.</p>



<h3 class="wp-block-heading">Small features and fixes</h3>



<p class="wp-block-paragraph">This is where hours drift. Marketing wants a new banner slot before the weekend, and operations needs a shipping rule changed for one region. Each request is small, so it rarely gets a formal estimate, and twenty of them add up to a week of developer time. Small improvements are a good use of a retainer, as long as someone approves them against a monthly budget.</p>



<h3 class="wp-block-heading">Extensions and integrations</h3>



<p class="wp-block-paragraph">Every extension, app, and integration is another thing to update and another way for an update to break checkout. ERP, PIM, payment, search, and shipping connections can fail without an error on the storefront: stock stops syncing, and nobody notices until orders oversell. On any platform, a store with 60 extensions and four integrations costs more to maintain than a store with 15 and one. A <a href="https://scandiweb.com/blog/magento-code-audit-by-certified-magento-developers/" target="_blank" rel="noopener">Magento code audit</a> is a practical way to find the extensions you can remove.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Price guides itemize hosting, domains, and SSL, which are the smallest part of an online store&#8217;s maintenance bill. The expensive lines grow with the amount of custom code and the number of integrations you carry.</p></div>



<h2 class="wp-block-heading">What a support retainer should include</h2>



<p class="wp-block-paragraph">A support retainer, or website maintenance plan, should include security patching on a stated cadence, uptime and error monitoring, a defined response time for each priority level, bug fixes, minor updates to extensions and integrations, and a set number of hours for small improvements. New features, redesigns, major version upgrades, and third-party license fees usually sit outside it and are quoted separately.</p>



<figure class="wp-block-table"><table><thead><tr><th>Usually included</th><th>Usually quoted separately</th></tr></thead><tbody><tr><td>Security patches on a stated cadence</td><td>Major version upgrades</td></tr><tr><td>Uptime, error, and performance monitoring</td><td>New features and integrations</td></tr><tr><td>Response times per priority level</td><td>Redesigns and new templates</td></tr><tr><td>Bug fixes in existing functionality</td><td>Third-party licenses, apps, and hosting fees</td></tr><tr><td>Minor extension and integration updates</td><td>Data migrations and replatforming</td></tr><tr><td>A set number of hours for small improvements</td><td>Out-of-hours work beyond the agreed cover</td></tr><tr><td>A monthly report of hours and tickets</td><td>Content, SEO, and marketing work, unless agreed</td></tr></tbody></table><figcaption class="wp-element-caption">What a support retainer usually includes and what is quoted separately</figcaption></figure>



<p class="wp-block-paragraph">The line between a bug and a change request is behind a lot of billing disputes. Agree in writing that a bug is existing functionality that stopped working as specified, and that everything else is a change. Then ask how the agency handles a fix that turns out to need new code.</p>



<p class="wp-block-paragraph">Hosting is the other gray area. If the agency runs your infrastructure, the retainer should say who answers when the server goes down at night: the agency or the host.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/support-retainer-included-vs-quoted-separately.png" alt="Two columns listing support retainer tasks that are included and tasks that are quoted as separate projects" class="wp-image-26070" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/support-retainer-included-vs-quoted-separately.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/support-retainer-included-vs-quoted-separately-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/support-retainer-included-vs-quoted-separately-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/support-retainer-included-vs-quoted-separately-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/support-retainer-included-vs-quoted-separately-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/support-retainer-included-vs-quoted-separately-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/support-retainer-included-vs-quoted-separately-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">What a website maintenance plan usually includes and what is quoted separately</figcaption></figure></div>



<p class="wp-block-paragraph">Our <a href="https://scandiweb.com/magento-support" target="_blank" rel="noopener">Magento support</a> is built this way: monitoring, patching, bug fixes, performance work, version upgrades, and new features, with scope and cost approved before any work starts.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>When incidents and maintenance draw from the same pool of hours, the invoice hides whether your store is getting more stable. Ask for the two to be reported separately from the first month.</p></div>



<h2 class="wp-block-heading">Support SLA tiers and when 24/7 cover is worth it</h2>



<p class="wp-block-paragraph">A support SLA sets how fast the agency responds to each priority level, usually from under an hour for a site-down P1 incident to one or more business days for a minor request. 24/7 cover is worth paying for when an hour of downtime costs more than the monthly premium, when traffic peaks outside office hours, or when you sell across several time zones.</p>



<p class="wp-block-paragraph">Agencies call these priority or incident severity levels, and there is no industry standard for their response times. The example below shows one common structure that you can use as a starting point when you negotiate.</p>



<figure class="wp-block-table"><table><thead><tr><th>Priority</th><th>Example</th><th>Typical first response</th><th>What &#8220;resolved&#8221; usually means</th></tr></thead><tbody><tr><td>P1 critical</td><td>Site down, checkout or payments failing</td><td>Under 1 hour, around the clock with 24/7 cover</td><td>Workaround or fix live</td></tr><tr><td>P2 high</td><td>Search or one payment method broken</td><td>2–4 business hours</td><td>Fix or workaround within a day</td></tr><tr><td>P3 medium</td><td>Bug with a workaround</td><td>1 business day</td><td>Fix in the next release</td></tr><tr><td>P4 low</td><td>Cosmetic issue or small change</td><td>2–3 business days</td><td>Scheduled with other work</td></tr></tbody></table><figcaption class="wp-element-caption">Example support SLA priority levels and response times</figcaption></figure>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/support-sla-priority-levels-response-times.png" alt="Four support priority levels from P1 critical to P4 low, each with an example incident and first response time" class="wp-image-26071" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/support-sla-priority-levels-response-times.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/support-sla-priority-levels-response-times-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/support-sla-priority-levels-response-times-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/support-sla-priority-levels-response-times-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/support-sla-priority-levels-response-times-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/support-sla-priority-levels-response-times-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/support-sla-priority-levels-response-times-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Example support SLA priority levels with response times</figcaption></figure></div>



<h3 class="wp-block-heading">Response time vs resolution time</h3>



<p class="wp-block-paragraph">Most SLAs promise a response time, meaning how fast a person acknowledges the ticket. Fewer promise resolution, because a fix can depend on a payment provider or a hosting company. Ask for a third number: time to workaround for P1 incidents, such as switching off a broken extension or rolling back a release. That&#8217;s the number that stops the revenue loss.</p>



<h3 class="wp-block-heading">When 24/7 website support pays for itself</h3>



<p class="wp-block-paragraph">Start with uptime. In a 30-day month, 99.5% uptime allows 3.6 hours of downtime, 99.9% allows 43 minutes, and 99.99% allows just over 4 minutes. An uptime promise means little if the people who fix problems only work office hours.</p>



<p class="wp-block-paragraph">Then work out what an hour offline costs. A store that sells $20 million a year online averages about $2,300 an hour, and far more during a sale. With office-hours support only, an outage that starts at 7 p.m. on a Friday can wait more than 60 hours for a developer.</p>



<p class="wp-block-paragraph">24/7 cover is usually worth it when:</p>



<ul class="wp-block-list">
<li>An hour of downtime at peak costs more than the monthly premium for on-call cover</li>


<li>A large share of your orders come in during evenings and weekends</li>


<li>You sell across time zones, so your busy hours fall outside one office&#8217;s working day</li>


<li>You run your own infrastructure, so no hosting provider watches the servers for you</li>


<li>You run launches, drops, or sales events outside office hours</li>

</ul>



<p class="wp-block-paragraph">It&#8217;s harder to justify for a small Shopify store with steady daytime traffic, where Shopify already watches the platform. A middle option is 24/7 cover for P1 incidents only, with everything else handled in office hours.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>24/7 support is insurance, so price it against the loss it covers. If one weekend outage would cost more than a year of the 24/7 premium, the decision is made.</p></div>



<h2 class="wp-block-heading">How support hours are tracked and billed</h2>



<p class="wp-block-paragraph">Most eCommerce support is billed as hours. Pay-as-you-go bills each approved task, a retainer prepays a block of hours each month, and a dedicated team bills fixed capacity. Ask for a time log per ticket with the date, person, category, and minutes, so you can see whether the hours went to incidents, maintenance, or new work.</p>



<figure class="wp-block-table"><table><thead><tr><th>Model</th><th>How it bills</th><th>Fits</th><th>Watch for</th></tr></thead><tbody><tr><td>Pay-as-you-go</td><td>Each approved task, by the hour</td><td>Low or uneven demand</td><td>No reserved capacity in a busy month</td></tr><tr><td>Monthly retainer</td><td>A prepaid block of hours</td><td>Steady demand</td><td>Expiring hours, the overage rate</td></tr><tr><td>Retainer bands</td><td>Tiers of hours, each with its own rate</td><td>Seasonal demand</td><td>Band changes mid-contract</td></tr><tr><td>Dedicated team</td><td>Fixed capacity with named people</td><td>An active roadmap plus support</td><td>Paying for idle time</td></tr><tr><td>Fixed-fee website maintenance packages</td><td>A flat fee for a defined scope</td><td>Small, simple stores</td><td>Narrow scope, everything else extra</td></tr></tbody></table><figcaption class="wp-element-caption">How eCommerce support is billed</figcaption></figure>



<p class="wp-block-paragraph">The billing increment matters more than it looks. Thirty five-minute fixes come to 7.5 hours when an agency bills in 15-minute increments, and 30 hours when it rounds every ticket up to a full hour.</p>



<h3 class="wp-block-heading">How to read a support invoice</h3>



<p class="wp-block-paragraph">A good invoice can be read without calling the account manager. Look for these lines:</p>



<ol class="wp-block-list">
<li><strong>Base fee or prepaid hours</strong>, and how many of them were used</li>


<li><strong>Hours per ticket</strong>, with the ticket number, date, person, and category (incident, maintenance, or change request)</li>


<li><strong>Out-of-hours work</strong>, shown separately with its rate</li>


<li><strong>Project management and QA time</strong>, inside each ticket or as its own line with a stated share</li>


<li><strong>Pass-through costs</strong>, such as extension licenses, hosting, or third-party services</li>


<li><strong>Hours carried over or expired</strong> at the end of the month</li>

</ol>



<p class="wp-block-paragraph">If a line says &#8220;general maintenance, 12 hours&#8221; with no tickets behind it, ask for the log.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/support-invoice-line-items-explained.png" alt="Annotated support invoice showing prepaid hours, tickets by category, out-of-hours work and pass-through costs" class="wp-image-26072" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/support-invoice-line-items-explained.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/support-invoice-line-items-explained-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/support-invoice-line-items-explained-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/support-invoice-line-items-explained-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/support-invoice-line-items-explained-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/support-invoice-line-items-explained-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/support-invoice-line-items-explained-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">The lines to check on a monthly eCommerce support invoice</figcaption></figure></div>



<h3 class="wp-block-heading">Why this month&#8217;s bill is higher</h3>



<p class="wp-block-paragraph">When a support bill jumps, the cause is usually one of these:</p>



<ul class="wp-block-list">
<li>An emergency security patch outside the normal cadence, such as the <a href="https://scandiweb.com/blog/php2shell/">PHP2Shell update</a> in October 2026</li>


<li>An out-of-hours incident billed at a higher rate</li>


<li>A run of small change requests before a marketing campaign</li>


<li>An extension or platform update that broke something and needed regression testing</li>


<li>Pre-peak work, such as load testing, code freezes, and extra monitoring before Black Friday</li>


<li>Fixes on a version close to end of support, where every change also needs a compatibility check</li>

</ul>



<p class="wp-block-paragraph">Ask your agency to tag every hour with a category. After three months, you&#8217;ll know your baseline, and a higher bill becomes a conversation about one category instead of the whole invoice.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>The category split on an invoice tells you more than the total. If incident hours grow every month, the store has a stability problem, and an audit of the part that keeps failing usually costs less than putting out the same fire again and again.</p></div>



<h2 class="wp-block-heading">Red flags in a support contract</h2>



<p class="wp-block-paragraph">Read the contract with these questions in hand. Each &#8220;no&#8221; is worth a conversation before you sign. If you&#8217;re still comparing providers, our overview of <a href="https://scandiweb.com/blog/magento-support-and-maintenance-companies/" target="_blank" rel="noopener">Magento support and maintenance companies</a> covers the selection side.</p>



<ol class="wp-block-list">
<li><strong>Does the SLA define priority levels, and can you set the priority?</strong> If only the agency decides what counts as P1, the response time promise means little.</li>


<li><strong>Is there a workaround or resolution target for P1?</strong> A 15-minute acknowledgment followed by a six-hour fix still costs six hours of sales.</li>


<li><strong>Does &#8220;24/7&#8221; mean a person on call?</strong> Some contracts mean round-the-clock ticket intake, with someone reading the queue the next morning. Ask who answers at 3 a.m. and how.</li>


<li><strong>Is the patching cadence written down?</strong> &#8220;Patches applied as needed&#8221; leaves the decision to whoever has spare time.</li>


<li><strong>What happens to unused hours?</strong> Expiring hours are normal in some retainers, but you should know the rule before the first month ends.</li>


<li><strong>What are the billing increment and the overage rate?</strong> Rounding each ticket up to an hour, or an overage rate far above the base rate, can move the monthly cost more than the headline price.</li>


<li><strong>Do you get a time log per ticket?</strong> Without one, you can&#8217;t check an invoice.</li>


<li><strong>Do you own your code, repositories, and hosting accounts?</strong> If the agency holds the only access, switching providers turns into a negotiation. The contract should cover handover.</li>


<li><strong>How long is the notice period?</strong> A 12-month term with automatic renewal and 90 days&#8217; notice can keep you paying long after the relationship stops working.</li>

</ol>



<h2 class="wp-block-heading">Frequently asked questions about website maintenance cost</h2>



<h3 class="wp-block-heading">How much does website maintenance cost per month?</h3>



<p class="wp-block-paragraph">For an online store, published guides put website maintenance cost between about $300 and $5,000 a month, and enterprise stores go well past that. The real number depends on developer hours. At $100 an hour, a store that needs 10 hours a month pays about $1,000, and one that needs 40 hours pays about $4,000, plus any 24/7 premium.</p>



<h3 class="wp-block-heading">Do websites need monthly maintenance?</h3>



<p class="wp-block-paragraph">Online stores do. Security patches, extension updates, monitoring alerts, and broken integrations come up every month, and every hour a checkout or payment issue stays open costs orders. A brochure site can get by with occasional updates, but a store that takes payments needs continuous monitoring and patching on a schedule.</p>



<h3 class="wp-block-heading">Is Shopify cheaper to maintain than Magento?</h3>



<p class="wp-block-paragraph">Usually, for the platform itself. Shopify runs hosting, core updates, and its own PCI DSS assessment, so maintenance is mostly apps, theme, and integrations. Self-hosted Magento (Adobe Commerce) adds patching, upgrades, and infrastructure. The gap narrows for complex stores, where custom apps, integrations, and <a href="https://scandiweb.com/blog/shopify-vs-shopify-plus/" target="_blank" rel="noopener">Shopify Plus</a> fees carry their own costs.</p>



<h3 class="wp-block-heading">How many support hours does an online store need?</h3>



<p class="wp-block-paragraph">There&#8217;s no standard number, so measure it. Count the hours from the last three to six months of tickets, split them into incidents, maintenance, and changes, and size the retainer on the maintenance baseline plus a buffer for incidents. Keep feature work in a separate budget, so it doesn&#8217;t eat the hours you need for patches.</p>



<h3 class="wp-block-heading">What is a good SLA response time for eCommerce?</h3>



<p class="wp-block-paragraph">For a site-down or checkout failure, look for a first response within an hour, around the clock if your store sells at night or on weekends. Lower priorities usually get a response within a few business hours to a business day. Ask for a workaround target for critical incidents too, because a quick acknowledgment doesn&#8217;t restore sales.</p>



<h3 class="wp-block-heading">Do unused retainer hours roll over?</h3>



<p class="wp-block-paragraph">It depends on the contract. Some retainers let unused hours roll into the next month, often with a cap or an expiry date, and others reset every month. Pay-as-you-go billing avoids the question, because you only pay for the hours used. Whatever the model, get the rule in writing before you sign.</p>



<h2 class="wp-block-heading">What to check before you sign or renew</h2>



<p class="wp-block-paragraph">Website maintenance cost for an online store comes down to hours: how many your store needs for patching, monitoring, incidents, and small changes, and what each one costs. Pull the last three months of invoices, tag the hours by category, and check them against the scope and SLA you need. If the numbers still don&#8217;t add up, have that conversation with your agency before the renewal date.</p>



<p class="wp-block-paragraph">At scandiweb, 450+ active clients use our support, and we&#8217;ve handled 9,000+ tickets on a pay-as-you-go model where you approve the scope and cost of each task before work starts.</p>



<script type="application/ld+json">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "How much does website maintenance cost per month?", "acceptedAnswer": {"@type": "Answer", "text": "For an online store, published guides put website maintenance cost between about $300 and $5,000 a month, and enterprise stores go well past that. The real number depends on developer hours. At $100 an hour, a store that needs 10 hours a month pays about $1,000, and one that needs 40 hours pays about $4,000, plus any 24/7 premium."}}, {"@type": "Question", "name": "Do websites need monthly maintenance?", "acceptedAnswer": {"@type": "Answer", "text": "Online stores do. Security patches, extension updates, monitoring alerts, and broken integrations come up every month, and every hour a checkout or payment issue stays open costs orders. A brochure site can get by with occasional updates, but a store that takes payments needs continuous monitoring and patching on a schedule."}}, {"@type": "Question", "name": "Is Shopify cheaper to maintain than Magento?", "acceptedAnswer": {"@type": "Answer", "text": "Usually, for the platform itself. Shopify runs hosting, core updates, and its own PCI DSS assessment, so maintenance is mostly apps, theme, and integrations. Self-hosted Magento (Adobe Commerce) adds patching, upgrades, and infrastructure. The gap narrows for complex stores, where custom apps, integrations, and Shopify Plus fees carry their own costs."}}, {"@type": "Question", "name": "How many support hours does an online store need?", "acceptedAnswer": {"@type": "Answer", "text": "There's no standard number, so measure it. Count the hours from the last three to six months of tickets, split them into incidents, maintenance, and changes, and size the retainer on the maintenance baseline plus a buffer for incidents. Keep feature work in a separate budget, so it doesn't eat the hours you need for patches."}}, {"@type": "Question", "name": "What is a good SLA response time for eCommerce?", "acceptedAnswer": {"@type": "Answer", "text": "For a site-down or checkout failure, look for a first response within an hour, around the clock if your store sells at night or on weekends. Lower priorities usually get a response within a few business hours to a business day. Ask for a workaround target for critical incidents too, because a quick acknowledgment doesn't restore sales."}}, {"@type": "Question", "name": "Do unused retainer hours roll over?", "acceptedAnswer": {"@type": "Answer", "text": "It depends on the contract. Some retainers let unused hours roll into the next month, often with a cap or an expiry date, and others reset every month. Pay-as-you-go billing avoids the question, because you only pay for the hours used. Whatever the model, get the rule in writing before you sign."}}]}</script>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><style> p.box { border: 1px solid black; padding-top: 30px; padding-right: 30px; padding-bottom: 30px; padding-left: 30px; } </style> <p class="box"><em>Want a second opinion on your support contract? </em><a href="https://scandiweb.com/contact" target="_blank" rel="noreferrer noopener"><em>Tell us what you&#x27;re paying for</em></a><em>, and we&#x27;ll show you which hours your store needs.</em></p></p>
<p>The post <a rel="nofollow" href="https://scandiweb.com/blog/website-maintenance-cost/">eCommerce Website Maintenance Cost: What a Support Retainer Should Include</a> appeared first on <a rel="nofollow" href="https://scandiweb.com/blog">scandiweb</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Klaviyo vs Mailchimp for eCommerce, and When Bloomreach Is Worth It</title>
		<link>https://scandiweb.com/blog/klaviyo-vs-mailchimp/</link>
		
		<dc:creator><![CDATA[Andres Reitsnik]]></dc:creator>
		<pubDate>Tue, 20 Oct 2026 07:00:00 +0000</pubDate>
				<category><![CDATA[Digital Growth]]></category>
		<category><![CDATA[Platform Comparisons]]></category>
		<category><![CDATA[bloomreach]]></category>
		<category><![CDATA[cdp]]></category>
		<category><![CDATA[comparison]]></category>
		<category><![CDATA[eCommerce integrations]]></category>
		<category><![CDATA[email marketing]]></category>
		<category><![CDATA[klaviyo]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[Mailchimp]]></category>
		<category><![CDATA[marketing automation]]></category>
		<category><![CDATA[Shopify]]></category>
		<guid isPermaLink="false">https://scandiweb.com/blog/?p=26100</guid>

					<description><![CDATA[<p>Klaviyo vs Mailchimp compared on pricing, Magento and Shopify integrations, flows and deliverability, plus when Bloomreach is worth it.</p>
<p>The post <a rel="nofollow" href="https://scandiweb.com/blog/klaviyo-vs-mailchimp/">Klaviyo vs Mailchimp for eCommerce, and When Bloomreach Is Worth It</a> appeared first on <a rel="nofollow" href="https://scandiweb.com/blog">scandiweb</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="lazyblock-related-Kv7mC wp-block-lazyblock-related"><div class="related-services">
  <h3>Related Services</h3>
  <ul>
    
    <li>
      <a  href="https://scandiweb.com/email-marketing-services" target=_blank >
        Email Marketing
      </a>
    </li>
    
    <li>
      <a  href="https://scandiweb.com/services/marketing-automation" target=_blank >
        Marketing Automation
      </a>
    </li>
    
    <li>
      <a  href="https://scandiweb.com/magento-integrations/klaviyo" target=_blank >
        Magento Klaviyo Integration
      </a>
    </li>
    
  </ul>
</div>
</div>


<p class="wp-block-paragraph">Stores that ask us about Klaviyo vs Mailchimp have usually felt the gap already: the abandoned-cart flow that was never built, or the second store view that never synced. Most of them want to know two things. Is the move worth the migration work, and if the store keeps growing, is Bloomreach the next stop or an expensive detour?</p>



<p class="wp-block-paragraph">The answer turns on how much store data you have and how much of it you will put to work. List size mostly changes the bill.</p>



<h2 class="wp-block-heading">Klaviyo vs Mailchimp: the short answer</h2>



<p class="wp-block-paragraph">Klaviyo is the better fit for most eCommerce stores because it is built around store data: orders and browsing events from Shopify or Magento (Adobe Commerce) feed every segment and flow. Mailchimp is cheaper at the entry level and simpler for newsletter-led marketing, but its flows and audiences are capped by plan. Bloomreach fits large, multi-market retailers that want one customer profile behind email, on-site personalization, search, and ad audiences.</p>



<figure class="wp-block-table"><table><thead><tr><th></th><th>Klaviyo</th><th>Mailchimp</th><th>Bloomreach</th></tr></thead><tbody><tr><td>Best fit</td><td>eCommerce stores selling repeat purchases</td><td>Small stores, newsletter-led email</td><td>Large retailers, several markets and channels</td></tr><tr><td>Billed on</td><td>Active profiles</td><td>Contacts, unsubscribed included</td><td>Platform fee plus usage</td></tr><tr><td>Paid plans from</td><td>$20/month</td><td>$13/month</td><td>$60K+ a year for most brands</td></tr><tr><td>Free plan</td><td>250 profiles, 500 sends</td><td>250 contacts, 500 sends</td><td>None</td></tr><tr><td>Automation flows</td><td>Every plan, Free included</td><td>4 steps on Essentials, 200 flows on Standard+</td><td>Included</td></tr><tr><td>Predictive segments</td><td>From 500 paying customers</td><td>Standard and Premium</td><td>Included</td></tr><tr><td>Magento (Adobe Commerce)</td><td>Official extension</td><td>Free connector, one audience per store view</td><td>Integration project</td></tr><tr><td>Shopify</td><td>Preferred Shopify Plus email partner</td><td>Official Shopify app</td><td>Integration project</td></tr></tbody></table><figcaption class="wp-element-caption">Klaviyo vs Mailchimp vs Bloomreach at a glance</figcaption></figure>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-vs-bloomreach-fit-by-store-size.png" alt="Chart placing Mailchimp for small newsletter-led stores, Klaviyo for data-driven stores and Bloomreach for large multi-market retailers" class="wp-image-26095" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-vs-bloomreach-fit-by-store-size.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-vs-bloomreach-fit-by-store-size-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-vs-bloomreach-fit-by-store-size-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-vs-bloomreach-fit-by-store-size-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-vs-bloomreach-fit-by-store-size-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-vs-bloomreach-fit-by-store-size-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-vs-bloomreach-fit-by-store-size-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Klaviyo vs Mailchimp vs Bloomreach by store size and data maturity</figcaption></figure></div>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>The two Mailchimp limits growing stores hit first are the audience cap and the 4-step flow limit on Essentials. Both show up well before the contact limit does.</p></div>



<h2 class="wp-block-heading">Klaviyo vs Mailchimp pricing as your list grows</h2>



<p class="wp-block-paragraph">Mailchimp&#8217;s paid plans start lower: Essentials from $13 a month and Standard from $20 a month for 500 contacts, against $20 a month for Klaviyo&#8217;s Email plan at 251–500 active profiles. The comparison changes as lists grow because the two count people differently. Klaviyo bills active profiles, the contacts who can still receive marketing. Mailchimp&#8217;s bill includes unsubscribed contacts until you archive them.</p>



<figure class="wp-block-table"><table><thead><tr><th>Plan</th><th>Starts at</th><th>What the entry price covers</th></tr></thead><tbody><tr><td>Klaviyo Free</td><td>$0</td><td>250 active profiles, 500 email sends a month</td></tr><tr><td>Klaviyo Email</td><td>$20/month</td><td>251–500 active profiles, scales with profile count</td></tr><tr><td>Klaviyo Email + SMS</td><td>$35/month</td><td>Email plan plus SMS and MMS credits</td></tr><tr><td>Mailchimp Free</td><td>$0</td><td>250 contacts, 500 sends a month, 1 audience</td></tr><tr><td>Mailchimp Essentials</td><td>$13/month</td><td>500 contacts, 3 audiences, flows up to 4 steps</td></tr><tr><td>Mailchimp Standard</td><td>$20/month</td><td>500 contacts, 5 audiences, up to 200 flows, predictive segments</td></tr><tr><td>Mailchimp Premium</td><td>$350/month</td><td>10,000 contacts, unlimited audiences and seats</td></tr><tr><td>Bloomreach</td><td>Custom quote</td><td>Bloomreach says most brands start at $60K+ a year</td></tr></tbody></table><figcaption class="wp-element-caption">Klaviyo vs Mailchimp pricing by plan (vendor pricing pages, October 2026)</figcaption></figure>



<p class="wp-block-paragraph">Both prices rise with your list, so run your own count through each calculator. Two billing rules matter more than the entry price:</p>



<ul class="wp-block-list">
<li>Klaviyo counts only contacts who can receive marketing. Mailchimp counts subscribed, unsubscribed, and non-subscribed contacts, and only archived, cleaned, or deleted contacts drop off the bill.</li>


<li>Mailchimp bills overages automatically after the trial and keeps sending, with a monthly send allowance of 10x your contact limit on Essentials, 12x on Standard, and 15x on Premium. Klaviyo moves a paid account to the plan that matches its active profile count.</li>

</ul>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Archive unsubscribed contacts in Mailchimp before you compare quotes. Otherwise you are comparing Klaviyo against a bill that includes people you can no longer email.</p></div>



<h2 class="wp-block-heading">Magento (Adobe Commerce) and Shopify integrations</h2>



<p class="wp-block-paragraph">On both platforms, Klaviyo has the deeper integration. Its Magento extension and Shopify app send orders, checkouts, and product views as events you can trigger flows on, and Shopify names Klaviyo its preferred email partner for Shopify Plus. Mailchimp connects to both platforms too, but on Magento each store view links to its own audience, and the number of audiences depends on your plan.</p>



<h3 class="wp-block-heading">Magento (Adobe Commerce)</h3>



<p class="wp-block-paragraph">Klaviyo&#8217;s extension installs from the Adobe Commerce Marketplace. According to <a href="https://help.klaviyo.com/hc/en-us/articles/5486899706267" target="_blank" rel="noopener">Klaviyo&#8217;s Magento guide</a>, the native integration tracks Placed Order, Fulfilled Order, Canceled Order, Refunded Order, and Started Checkout, and the extension adds Active on Site and Viewed Product. A headless storefront needs Klaviyo.js added by hand. Anything outside that list, such as a canceled payment, is custom development.</p>



<p class="wp-block-paragraph">Mailchimp for Adobe Commerce is a free connector that syncs customers and orders to an audience. The catch for multi-store setups is that <a href="https://scandiweb.com/blog/magento-website-vs-store-vs-store-view/">each store view</a> connects to its own audience. A store with four store views needs four audiences, which rules out Free (1 audience) and Essentials (3). Most sync failures come from leftover MageMonkey data or orphan stores, and our <a href="https://scandiweb.com/blog/mailchimp-for-magento/" target="_blank" rel="noopener">Mailchimp Magento integration guide</a> covers the fixes.</p>



<h3 class="wp-block-heading">Shopify</h3>



<p class="wp-block-paragraph">Klaviyo and Shopify announced a <a href="https://www.klaviyo.com/newsroom/klaviyo-and-shopify" target="_blank" rel="noopener">strategic partnership in August 2022</a>: Klaviyo became the recommended email solution for Shopify Plus, and Shopify invested in Klaviyo. Mailchimp&#8217;s <a href="https://scandiweb.com/blog/best-shopify-integrations/">official Shopify app</a>, built by Intuit Mailchimp, syncs customers and purchase data as well.</p>



<p class="wp-block-paragraph">On Shopify, the integration gap is smaller than on Magento, and the tools differ more in what they let you do with the data in flows and segments. If you need flows on custom events, the <a href="https://scandiweb.com/shopify-integrations/klaviyo" target="_blank" rel="noopener">Shopify Klaviyo integration</a> is where we start.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-magento-shopify-data-sync.png" alt="Diagram showing Magento and Shopify store events syncing to Klaviyo as events and to Mailchimp audiences by store view" class="wp-image-26096" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-magento-shopify-data-sync.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-magento-shopify-data-sync-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-magento-shopify-data-sync-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-magento-shopify-data-sync-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-magento-shopify-data-sync-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-magento-shopify-data-sync-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-magento-shopify-data-sync-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">How store data reaches Klaviyo and Mailchimp from Magento and Shopify</figcaption></figure></div>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Count your store views before you pick a Mailchimp plan. On Magento, that number can choose the plan for you.</p></div>



<h2 class="wp-block-heading">Flows, segmentation and deliverability</h2>



<p class="wp-block-paragraph">Klaviyo includes automation flows and segments on every plan, Free included, and any segment can use the store&#8217;s order and browsing data. Mailchimp limits flows by plan: up to 4 steps on Essentials and up to 200 flows on Standard and Premium, which is also where predictive segments start. Deliverability depends mostly on your own setup, and Gmail&#8217;s sender rules apply to both tools in the same way.</p>



<h3 class="wp-block-heading">Flows</h3>



<p class="wp-block-paragraph">The flows that earn most store email revenue are triggered by behavior: welcome, browse abandonment, abandoned checkout, post-purchase, and win-back. A 4-step cap is tight for an abandoned-checkout series that splits first-time and returning buyers. Our guide to <a href="https://scandiweb.com/blog/shopping-cart-abandonment-solutions/" target="_blank" rel="noopener">shopping cart abandonment solutions</a> covers what goes into those emails.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-abandoned-checkout-flow.png" alt="Email automation builder showing a Started Checkout trigger, delays, a conditional split and separate follow-up emails" class="wp-image-26097" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-abandoned-checkout-flow.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-abandoned-checkout-flow-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-abandoned-checkout-flow-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-abandoned-checkout-flow-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-abandoned-checkout-flow-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-abandoned-checkout-flow-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/klaviyo-vs-mailchimp-abandoned-checkout-flow-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">An abandoned-checkout flow with a split for new and returning buyers</figcaption></figure></div>



<h3 class="wp-block-heading">Segmentation and predictive data</h3>



<p class="wp-block-paragraph">Klaviyo segments update in real time on any event or property the store sends. Its predictive analytics, such as predicted lifetime value and expected next order date, need at least 500 customers who have placed orders, 180 days of order history, and orders in the last 30 days, according to <a href="https://help.klaviyo.com/hc/en-us/articles/360020919731" target="_blank" rel="noopener">Klaviyo&#8217;s help center</a>. Below that point, predictions stay blank and you segment on rules you write yourself. Mailchimp keeps predictive segments for Standard and Premium.</p>



<h3 class="wp-block-heading">Deliverability</h3>



<p class="wp-block-paragraph">Neither tool gets you into the inbox on its own. Since February 2024, <a href="https://support.google.com/a/answer/81126" target="_blank" rel="noopener">Google has required</a> anyone sending more than 5,000 messages a day to Gmail to authenticate with SPF, DKIM, and DMARC, offer one-click unsubscribe, and keep the spam rate in Postmaster Tools below 0.30%. Both tools support an authenticated sending domain. After that, inbox placement depends on mailing people who open and click, which our <a href="https://scandiweb.com/blog/email-marketing-best-practices-for-revenue-growth/" target="_blank" rel="noopener">email marketing best practices</a> cover in detail.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Deliverability problems move with you. Fix authentication and clean the list during the migration, or the new tool inherits the old spam rate.</p></div>



<h2 class="wp-block-heading">Should you move from Mailchimp to Klaviyo?</h2>



<p class="wp-block-paragraph">Move from Mailchimp to Klaviyo when email should earn revenue from store behavior: abandoned checkouts, browse abandonment, replenishment and win-back flows, and segments built on orders. Stay on Mailchimp if most of your email is newsletters and announcements and your list is small. The entry price is lower, and the flows you would gain have little data to run on.</p>



<p class="wp-block-paragraph">These signs usually mean the move is due:</p>



<ul class="wp-block-list">
<li>You run several store views or languages and work around Mailchimp&#8217;s audience limits.</li>


<li>A flow you need is blocked by a step limit or a plan level.</li>


<li>You build segments from CSV exports instead of from purchase data.</li>


<li>You can&#8217;t tell <a href="https://scandiweb.com/blog/ga4-unassigned-traffic/">which flow earned which order</a>.</li>

</ul>



<p class="wp-block-paragraph">Flows and templates don&#8217;t transfer between the tools. A migration means importing audiences with their custom properties, rebuilding every flow, authenticating the sending domain, and moving transactional emails. We did this for a cycling brand whose Mailchimp setup couldn&#8217;t handle multistore, multilanguage sending or abandoned-cart, birthday, and review flows. We imported the audiences with custom properties, built metrics the standard Magento integration didn&#8217;t track, verified DMARC, and launched the flows in several languages. Email-attributed revenue grew 4.8x YoY.</p>



<p class="wp-block-paragraph"><strong>Read more:</strong> <a href="https://scandiweb.com/blog/email-marketing-case-study-revenue-increase-after-klaviyo-migration/" target="_blank" rel="noopener">Email Marketing Revenue Increased by 4.8x After Klaviyo Migration</a></p>



<h2 class="wp-block-heading">Bloomreach vs Klaviyo: when stepping up is worth it</h2>



<p class="wp-block-paragraph">Bloomreach is worth it when email is one of several channels that should share a single customer profile, and your traffic is large enough to pay for it. Bloomreach&#8217;s own pricing page says most brands start at $60K or more a year and that its smaller customers serve 500K+ monthly visitors. Below that scale, Klaviyo usually covers the email and SMS work most stores need.</p>



<p class="wp-block-paragraph">The step up makes sense when most of these are true:</p>



<ul class="wp-block-list">
<li>You sell in several markets with separate store views, languages, and consent rules.</li>


<li>Customer data comes from POS and ERP systems as well as the online store.</li>


<li>You want the same segments in email, on-site personalization, search, and ad audiences.</li>


<li>You have a team or partner to run it. Bloomreach itself says it isn&#8217;t for brands still building an audience or looking for a lightweight email platform.</li>

</ul>



<p class="wp-block-paragraph">The biggest sportswear retailer in the Baltics made this move from Klaviyo. With separate store views per market and customer data split across systems, we helped them compare CDPs, and once Bloomreach was chosen, we rebuilt their flows on it. Automated flows now generate 39% of their email revenue from 3% of sends. Twelve months after launch, email orders were up 20.6% and ROAS on paid media was up 39.1%.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/bloomreach-vs-klaviyo-sportswear-retailer-case-study.png" alt="Desktop and mobile mockup of a sportswear retailer&#x27;s online store that runs personalization on Bloomreach" class="wp-image-26098" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/bloomreach-vs-klaviyo-sportswear-retailer-case-study.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/bloomreach-vs-klaviyo-sportswear-retailer-case-study-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/bloomreach-vs-klaviyo-sportswear-retailer-case-study-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/bloomreach-vs-klaviyo-sportswear-retailer-case-study-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/bloomreach-vs-klaviyo-sportswear-retailer-case-study-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/bloomreach-vs-klaviyo-sportswear-retailer-case-study-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/bloomreach-vs-klaviyo-sportswear-retailer-case-study-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">The Baltic sportswear retailer that moved from Klaviyo to Bloomreach</figcaption></figure></div>



<p class="wp-block-paragraph"><strong>Read more:</strong> <a href="https://scandiweb.com/blog/cdp-case-study-multi-market-personalization-bloomreach/" target="_blank" rel="noopener">CDP Case Study: Multi-Market Personalization for the Biggest Baltics Sportswear Retailer</a></p>



<p class="wp-block-paragraph">If you are weighing the same move, our guide to <a href="https://scandiweb.com/blog/what-is-cdp-customer-data-platforms-guide/" target="_blank" rel="noopener">customer data platforms</a> explains what a CDP adds over an email tool. We build both the <a href="https://scandiweb.com/magento-integrations/bloomreach" target="_blank" rel="noopener">Magento Bloomreach integration</a> and the <a href="https://scandiweb.com/shopify-integrations/bloomreach" target="_blank" rel="noopener">Shopify Bloomreach integration</a>.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Bloomreach pays back through the channels beyond email. If email is the only channel you plan to run on it, Klaviyo is the cheaper answer.</p></div>



<h2 class="wp-block-heading">How to choose between Klaviyo, Mailchimp and Bloomreach</h2>



<p class="wp-block-paragraph">For most eCommerce stores, Klaviyo is the default: it uses store data in every flow and segment and grows with the list. Mailchimp is the right call for small, newsletter-led stores that want the lowest entry price. Bloomreach is for retailers with several markets, large traffic, and a team ready to run one customer profile across email, website, and search.</p>



<p class="wp-block-paragraph"><strong>Choose Klaviyo if:</strong></p>



<ul class="wp-block-list">
<li>You sell on Shopify or Magento (Adobe Commerce) and want flows triggered by orders, checkouts, and product views.</li>


<li>You have, or will soon have, 500+ paying customers and want predictive segments.</li>


<li>You run several store views and don&#8217;t want one audience per view.</li>


<li>You expect most email revenue to come from automated flows.</li>

</ul>



<p class="wp-block-paragraph"><strong>Choose Mailchimp if:</strong></p>



<ul class="wp-block-list">
<li>Most of your email is newsletters, announcements, and promotions.</li>


<li>Your list is under a few thousand contacts and the entry price matters most.</li>


<li>You run one store view or one Shopify store.</li>


<li>You send a few campaigns a month and rarely use automation.</li>

</ul>



<p class="wp-block-paragraph"><strong>Choose Bloomreach if:</strong></p>



<ul class="wp-block-list">
<li>Your site serves hundreds of thousands of visitors a month across several markets.</li>


<li>Customer data lives in POS and ERP systems as well as the store.</li>


<li>You want one profile behind email, on-site personalization, search, and ads.</li>


<li>You have people to run it day to day.</li>

</ul>



<h2 class="wp-block-heading">Frequently asked questions about Klaviyo vs Mailchimp</h2>



<h3 class="wp-block-heading">Is Klaviyo better than Mailchimp for eCommerce?</h3>



<p class="wp-block-paragraph">For most online stores, yes. Klaviyo syncs orders, checkouts, and product views from Shopify and Magento and uses them in every flow and segment, on every plan. Mailchimp is simpler and cheaper to start and works well for newsletter-led email, but flows and predictive segments depend on your plan, and on Magento each store view needs its own audience.</p>



<h3 class="wp-block-heading">Can you migrate from Mailchimp to Klaviyo without losing subscribers?</h3>



<p class="wp-block-paragraph">Yes, if you plan it. Export each Mailchimp audience with consent status and custom properties, import them into Klaviyo, and keep unsubscribes suppressed. Flows and templates have to be rebuilt. Authenticate your sending domain before the first campaign and start with your most active contacts to protect deliverability.</p>



<h3 class="wp-block-heading">Does Mailchimp work with Magento 2?</h3>



<p class="wp-block-paragraph">Yes. Mailchimp for Adobe Commerce is a free connector that syncs customers and orders to a Mailchimp audience. Each store view connects to its own audience, so multi-store setups may need a higher plan. Leftover MageMonkey data and orphan stores cause most sync failures.</p>



<h3 class="wp-block-heading">What are the weaknesses of Klaviyo?</h3>



<p class="wp-block-paragraph">Cost and scope. The bill grows with active profiles, so large lists get expensive. Klaviyo is built for email and SMS, so data from POS, ERP, or support tools needs extra work or its paid data platform. On Magento, events beyond the standard set need custom development.</p>



<h3 class="wp-block-heading">How much does Bloomreach cost?</h3>



<p class="wp-block-paragraph">Bloomreach doesn&#8217;t publish a rate card. Pricing combines a platform fee with a usage fee based on audience and catalog size, the products you turn on, and the volume you run. Its pricing page says most brands start at $60K or more a year, and its smaller customers serve 500K+ monthly visitors.</p>



<h2 class="wp-block-heading">Klaviyo vs Mailchimp: choose the tool your data can feed</h2>



<p class="wp-block-paragraph">In Klaviyo vs Mailchimp, the store data you plan to use decides the winner. If your store sends orders and browsing events and you want email to earn from them, Klaviyo is the better tool on both Shopify and Magento. If you mostly send newsletters to a small list, Mailchimp costs less and does the job. Bloomreach is worth it once several markets and channels need one customer profile. Our <a href="https://scandiweb.com/email-marketing-services" target="_blank" rel="noopener">email marketing services</a> cover the move and the flow build for any of the three.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><style> p.box { border: 1px solid black; padding-top: 30px; padding-right: 30px; padding-bottom: 30px; padding-left: 30px; } </style> <p class="box"><em>Weighing a move off Mailchimp, or wondering whether Bloomreach fits your size? </em><a href="https://scandiweb.com/contact" target="_blank" rel="noreferrer noopener"><em>Tell us about your setup</em></a><em>, and we&#x27;ll tell you which tool your data can support.</em></p></p>
<p>The post <a rel="nofollow" href="https://scandiweb.com/blog/klaviyo-vs-mailchimp/">Klaviyo vs Mailchimp for eCommerce, and When Bloomreach Is Worth It</a> appeared first on <a rel="nofollow" href="https://scandiweb.com/blog">scandiweb</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Duplicate Without User-Selected Canonical and Other Search Console Errors</title>
		<link>https://scandiweb.com/blog/duplicate-without-user-selected-canonical/</link>
		
		<dc:creator><![CDATA[Lina Ivanova]]></dc:creator>
		<pubDate>Mon, 19 Oct 2026 17:00:00 +0000</pubDate>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[canonical tag]]></category>
		<category><![CDATA[duplicate content]]></category>
		<category><![CDATA[eCommerce SEO]]></category>
		<category><![CDATA[Google Merchant Center]]></category>
		<category><![CDATA[Google Search Console]]></category>
		<category><![CDATA[indexing]]></category>
		<category><![CDATA[technical SEO]]></category>
		<guid isPermaLink="false">https://scandiweb.com/blog/?p=26068</guid>

					<description><![CDATA[<p>Duplicate without user-selected canonical, crawled or discovered not indexed: what each status means for a store and when to fix it.</p>
<p>The post <a rel="nofollow" href="https://scandiweb.com/blog/duplicate-without-user-selected-canonical/">Duplicate Without User-Selected Canonical and Other Search Console Errors</a> appeared first on <a rel="nofollow" href="https://scandiweb.com/blog">scandiweb</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="lazyblock-related-DwUsc wp-block-lazyblock-related"><div class="related-services">
  <h3>Related Services</h3>
  <ul>
    
    <li>
      <a  href="https://scandiweb.com/seo-services" target=_blank >
        eCommerce SEO
      </a>
    </li>
    
    <li>
      <a  href="https://scandiweb.com/magento-seo-services" target=_blank >
        Magento SEO
      </a>
    </li>
    
    <li>
      <a  href="https://scandiweb.com/services/product-feed-management" target=_blank >
        Product Feed Management
      </a>
    </li>
    
  </ul>
</div>
</div>


<p class="wp-block-paragraph">If you&#8217;ve just forwarded a Search Console email to your developer asking &#8220;is this bad?&#8221;, or you&#8217;re looking at thousands of URLs marked &#8220;Duplicate without user-selected canonical&#8221;, you probably want one answer: is any of it costing the store sales?</p>



<p class="wp-block-paragraph">On most online stores, the answer is no. Google&#8217;s own help page says that not indexed &#8220;is not necessarily bad&#8221;, and a store creates far more URLs than it wants in search: color variants, sorted and filtered categories, tracking parameters, cart and account pages. This guide goes through the statuses that stores see most, with a store example for each, a verdict on whether to act, and the fix when you should.</p>



<h2 class="wp-block-heading">What the Page indexing report is telling you</h2>



<p class="wp-block-paragraph">The Page indexing report in Google Search Console lists every URL Google knows on your site and sorts the ones it didn&#8217;t index by reason. Google&#8217;s stated goal is to get the canonical version of every important page indexed, and it says you should not expect all URLs on your site to be indexed. So the useful question for each status is whether the URLs in it are pages you want customers to find.</p>



<figure class="wp-block-table"><table><thead><tr><th>Status</th><th>What it means</th><th>Store example</th><th>Act on it?</th></tr></thead><tbody><tr><td>Duplicate without user-selected canonical</td><td>Google found a duplicate without a canonical tag and indexed another URL instead</td><td>A color variant URL or a sorted category</td><td>Only if a page you sell from is in it</td></tr><tr><td>Duplicate, Google chose different canonical than user</td><td>Google ignored your canonical tag</td><td>A category whose canonical points to a page with other products</td><td><span style="display:inline-block;padding:4px 8px;background-color:#e7e9f8;color:#3f4aaf;border-radius:4px;font-weight:600;">Yes</span></td></tr><tr><td>Alternate page with proper canonical tag</td><td>Your canonical tag worked</td><td>A filtered URL pointing to the main category</td><td><span style="display:inline-block;padding:4px 8px;background-color:#d4edda;color:#1e7e34;border-radius:4px;font-weight:600;">No</span></td></tr><tr><td>Crawled – currently not indexed</td><td>Google read the page and left it out</td><td>A category with two products or a manufacturer-copy product page</td><td>Only for pages that should rank</td></tr><tr><td>Discovered – currently not indexed</td><td>Google knows the URL but hasn&#8217;t crawled it yet</td><td>Thousands of new filter URLs after a launch</td><td>Yes, if the count keeps growing</td></tr><tr><td>Soft 404</td><td>The page looks empty or missing but returns a 200 status</td><td>A sold-out product page that only says &#8220;unavailable&#8221;</td><td><span style="display:inline-block;padding:4px 8px;background-color:#e7e9f8;color:#3f4aaf;border-radius:4px;font-weight:600;">Yes</span></td></tr><tr><td>Not found (404)</td><td>The URL returns a 404</td><td>A discontinued product with no replacement</td><td><span style="display:inline-block;padding:4px 8px;background-color:#d4edda;color:#1e7e34;border-radius:4px;font-weight:600;">No</span></td></tr><tr><td>Page with redirect</td><td>The URL redirects to another page</td><td>Old product URLs after a migration</td><td><span style="display:inline-block;padding:4px 8px;background-color:#d4edda;color:#1e7e34;border-radius:4px;font-weight:600;">No</span></td></tr><tr><td>Excluded by &#8216;noindex&#8217; tag</td><td>The page asks Google not to index it</td><td>Cart, account, and internal search pages</td><td><span style="display:inline-block;padding:4px 8px;background-color:#d4edda;color:#1e7e34;border-radius:4px;font-weight:600;">No</span></td></tr><tr><td>Blocked by robots.txt</td><td>robots.txt stops Google from crawling the URL</td><td>Checkout or filter URLs you blocked on purpose</td><td><span style="display:inline-block;padding:4px 8px;background-color:#d4edda;color:#1e7e34;border-radius:4px;font-weight:600;">No</span></td></tr><tr><td>Server error (5xx)</td><td>Your server failed or timed out when Google crawled</td><td>The store slowing down during a sale</td><td><span style="display:inline-block;padding:4px 8px;background-color:#e7e9f8;color:#3f4aaf;border-radius:4px;font-weight:600;">Yes</span></td></tr></tbody></table><figcaption class="wp-element-caption">Search Console page indexing statuses, what each means on a store, and whether to act</figcaption></figure>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/duplicate-without-user-selected-canonical-page-indexing-report.png" alt="Search Console Page indexing report showing duplicate without user-selected canonical and other reasons pages aren&#x27;t indexed" class="wp-image-26063" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/duplicate-without-user-selected-canonical-page-indexing-report.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/duplicate-without-user-selected-canonical-page-indexing-report-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/duplicate-without-user-selected-canonical-page-indexing-report-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/duplicate-without-user-selected-canonical-page-indexing-report-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/duplicate-without-user-selected-canonical-page-indexing-report-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/duplicate-without-user-selected-canonical-page-indexing-report-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/duplicate-without-user-selected-canonical-page-indexing-report-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">The Page indexing report sorts every URL Google didn&#x27;t index by reason</figcaption></figure></div>



<p class="wp-block-paragraph">Start with two numbers before reading any status. Compare the count of indexed pages with the number of products and categories you actually sell, then check whether the indexed count dropped recently. A store with 4,000 products and 400 categories that has 4,600 pages indexed is in decent shape, whatever the not indexed column says.</p>



<h2 class="wp-block-heading">Duplicate without user-selected canonical on an online store</h2>



<p class="wp-block-paragraph">&#8220;Duplicate without user-selected canonical&#8221; means Google found a page that is a duplicate of another page, the page has no canonical tag saying which version you prefer, and Google picked a different URL to index. Google says this is not an error and is working as intended, because it doesn&#8217;t show duplicate pages in search. On a store, it mostly collects parameter URLs for variants and sort orders.</p>



<p class="wp-block-paragraph">Google groups pages by how similar their content is. Every URL in the group except the one it chose as canonical lands in this status, so a big count often just means your store generates a lot of URL versions of the same page.</p>



<h3 class="wp-block-heading">Product variants and color URLs</h3>



<p class="wp-block-paragraph">Many platforms and themes create a URL per variant, such as /rain-jacket?color=blue or /rain-jacket?size=m. If the only difference is the selected swatch, Google treats those URLs as copies of the main product page and indexes one of them. That is usually fine, as long as the URL it keeps is the clean product URL.</p>



<p class="wp-block-paragraph">It becomes a choice when the variants are different enough to earn their own searches. A sofa sold in eight fabrics may deserve separate pages for &#8220;green velvet sofa&#8221;, while a T-shirt in five sizes doesn&#8217;t. Decide per product type, then make the canonical tags follow that decision.</p>



<h3 class="wp-block-heading">Sorted, filtered, and tracking URLs</h3>



<p class="wp-block-paragraph">Sorting a category by price, showing 48 products per page, or arriving from a newsletter link with a utm_source tag adds a parameter to the URL while the products shown stay the same. Google&#8217;s own documentation uses a category URL with a gclid ad parameter as its example of a duplicate. These URLs belong in this status.</p>



<p class="wp-block-paragraph">Filters are different, because <a href="https://scandiweb.com/blog/faceted-navigation-seo/">some filter pages match real searches</a>. If &#8220;black leather boots&#8221; brings in buyers through a filter URL, that page needs its own canonical and a place in your internal links. Our guide to <a href="https://scandiweb.com/blog/layered-navigation-causing-problems-deal-with-it/" target="_blank" rel="noopener">layered navigation</a> explains how to choose which filter pages stay indexable.</p>



<h3 class="wp-block-heading">Products assigned to several categories</h3>



<p class="wp-block-paragraph">On Magento (Adobe Commerce) in particular, a product that sits in three categories can be reachable at three category paths, such as /men/jackets/rain-jacket and /sale/rain-jacket. Without a canonical tag, Google picks one of them. Platform settings can add a canonical tag to product pages or drop category paths from product URLs entirely, and either one keeps the count down. The <a href="https://scandiweb.com/blog/duplicate-content-seo-ecommerce-complete-guide/" target="_blank" rel="noopener">duplicate content guide</a> covers the other sources of duplication on stores, from trailing slashes to manufacturer descriptions.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/duplicate-without-user-selected-canonical-variant-urls.png" alt="Diagram of color, sort, tracking, and category path URLs for one product pointing to a single canonical URL" class="wp-image-26064" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/duplicate-without-user-selected-canonical-variant-urls.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/duplicate-without-user-selected-canonical-variant-urls-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/duplicate-without-user-selected-canonical-variant-urls-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/duplicate-without-user-selected-canonical-variant-urls-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/duplicate-without-user-selected-canonical-variant-urls-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/duplicate-without-user-selected-canonical-variant-urls-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/duplicate-without-user-selected-canonical-variant-urls-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Variant, sorting, and tracking URLs all collapse into one canonical product page</figcaption></figure></div>



<h3 class="wp-block-heading">When this status is a problem</h3>



<p class="wp-block-paragraph">Look at the example URLs in the status and filter for the ones you care about. It&#8217;s a problem in two cases. Your main product or category URL appears in the list, which means Google indexed a parameter or variant URL instead of it. Or the same content is indexed under the HTTP and HTTPS, or www and non-www, versions of your domain, which points to a redirect gap our guide to <a href="https://scandiweb.com/blog/http-and-www-explained/" target="_blank" rel="noopener">HTTP and WWW in URLs</a> explains.</p>



<h3 class="wp-block-heading">How to fix it</h3>



<ol class="wp-block-list">
<li>Inspect one affected URL with the URL Inspection tool and read the &#8220;Google-selected canonical&#8221; line</li>


<li>If Google chose the right page, leave it, because the status is working as intended</li>


<li>If Google chose the wrong page, add a self-referencing canonical tag to the page you want indexed and point the duplicates at it</li>


<li>Link to the canonical URL in menus, breadcrumbs, and product grids, so internal links stop pointing at parameter versions</li>


<li>List only canonical URLs in your XML sitemap</li>

</ol>



<p class="wp-block-paragraph">Google treats redirects and canonical tags as strong signals and sitemaps as a weak one, so the canonical tag and internal links do most of the work. Google also advises against using robots.txt or noindex to handle duplicates. A blocked duplicate can still be indexed without its content, and noindex removes the page from search altogether. For stores with <a href="https://scandiweb.com/blog/shopify-markets/">several countries or languages</a>, each version needs its own canonical and matching hreflang, which our <a href="https://scandiweb.com/blog/canonicals-and-hreflangs-for-international-store/" target="_blank" rel="noopener">hreflang and canonical guide</a> walks through.</p>



<h3 class="wp-block-heading">Duplicate, Google chose different canonical than user</h3>



<p class="wp-block-paragraph">This sister status means you did set a canonical tag, and Google indexed a different URL anyway. It is worth more of your time, because a tag that Google overrules usually points to a mixed signal: the canonical says one URL, while internal links, the sitemap, or redirects point to another. Inspect the URL, compare the &#8220;User-declared canonical&#8221; with the &#8220;Google-selected canonical&#8221;, and make every signal point the same way. If two categories really have the same products, merging them is often the cleaner fix.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>A high duplicate count is mostly a measure of how many URL versions your platform creates. The number to watch is how many of your real product and category URLs appear in the examples.</p></div>



<h2 class="wp-block-heading">Crawled – currently not indexed</h2>



<p class="wp-block-paragraph">&#8220;Crawled – currently not indexed&#8221; means Googlebot fetched and read the page, then decided not to add it to the index for now. Google says the page may or may not be indexed in the future and that there&#8217;s no need to resubmit it. On a store, this status usually collects thin or near-identical pages.</p>



<p class="wp-block-paragraph">Google doesn&#8217;t give a reason per URL, so read the list for patterns. In store audits, the same groups come up again and again.</p>



<ul class="wp-block-list">
<li>Categories or brand pages with one or two products and no copy</li>


<li>Product pages that use the manufacturer&#8217;s description, which hundreds of other retailers also publish</li>


<li>Tag, archive, or internal search pages that repeat the category listings</li>


<li>Out-of-stock products that show little more than a name, a price, and a &#8220;notify me&#8221; button</li>


<li>New pages that Google crawled once and hasn&#8217;t come back to yet</li>

</ul>



<p class="wp-block-paragraph">If the list holds pages you&#8217;d never link from a campaign, leave it. If it holds bestsellers or main categories, the fix is to make the page worth indexing: write category copy that answers what buyers compare, rewrite product descriptions for your top sellers, link to the page from the menu or related categories, and merge categories too small to stand on their own. Google says there&#8217;s no need to resubmit these URLs, so the time is better spent on the page itself.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Sort the crawled but not indexed list by template before reading it. If most URLs share one template, such as tag pages, the fix is a single decision about that template.</p></div>



<h2 class="wp-block-heading">Discovered – currently not indexed</h2>



<p class="wp-block-paragraph">&#8220;Discovered – currently not indexed&#8221; means Google knows the URL exists, usually from a link or a sitemap, but hasn&#8217;t crawled it yet. Google says it typically postponed the crawl because crawling at that moment was expected to overload the site, which is why the report shows no last crawl date. On a store, a growing count points to too many URLs, a slow server, or both.</p>



<p class="wp-block-paragraph">A few hundred URLs here after a product launch is normal and clears as Google catches up. A count that keeps climbing is a sign Google is spending its crawl on URLs that don&#8217;t matter. Google&#8217;s crawl budget guide is written for sites with more than a million pages, sites with 10,000+ pages that change daily, and sites where a large share of URLs sit in this exact status, which can include a mid-size catalog with layered navigation.</p>



<p class="wp-block-paragraph">These are the usual causes on a store, each with its fix.</p>



<ol class="wp-block-list">
<li>Filter combinations can create millions of crawlable URLs. Block crawling of the ones you don&#8217;t want indexed in robots.txt, as Google&#8217;s faceted navigation guide recommends, and return a 404 for filter combinations that show no products</li>


<li>The server is slow or returns errors under load. Check the Crawl stats report in Search Console for slow response times, then <a href="https://scandiweb.com/blog/magento-2-performance-optimization-with-js-bundling/">fix hosting or caching first</a></li>


<li>Soft 404s and long redirect chains keep getting recrawled, so fix those and Google has more crawl left for real pages</li>


<li>The XML sitemap lists filtered, redirected, or noindexed URLs. Keep it to canonical, indexable product and category pages</li>


<li>Important new pages have few internal links. Link new categories and products from the menu, the homepage, or a parent category</li>

</ol>



<p class="wp-block-paragraph">If you run Magento, our guide to a <a href="https://scandiweb.com/blog/seo-crash-course-magento-robotstxt/" target="_blank" rel="noopener">Magento robots.txt setup</a> shows which paths are safe to block.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/crawled-vs-discovered-currently-not-indexed-funnel.png" alt="Flow from discovered to crawled to indexed showing where discovered and crawled currently not indexed statuses apply" class="wp-image-26065" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/crawled-vs-discovered-currently-not-indexed-funnel.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/crawled-vs-discovered-currently-not-indexed-funnel-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/crawled-vs-discovered-currently-not-indexed-funnel-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/crawled-vs-discovered-currently-not-indexed-funnel-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/crawled-vs-discovered-currently-not-indexed-funnel-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/crawled-vs-discovered-currently-not-indexed-funnel-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/crawled-vs-discovered-currently-not-indexed-funnel-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Discovered and crawled but not indexed statuses mark where a URL stopped</figcaption></figure></div>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Rewriting a page in &#8220;Discovered&#8221; changes nothing until Google crawls it, so start with crawl waste and server speed. Content work pays off on pages in &#8220;Crawled&#8221;, because Google has read them and passed.</p></div>



<h2 class="wp-block-heading">Other statuses stores see, and the fix for each</h2>



<p class="wp-block-paragraph">The remaining statuses are mostly confirmations that your setup works. Two of them, soft 404 and server errors, need action on most stores.</p>



<h3 class="wp-block-heading">Alternate page with proper canonical tag</h3>



<p class="wp-block-paragraph">This page points to another page as canonical, and Google indexed that page. Google says there is nothing you need to do. Filtered categories, sorted views, and variant URLs with a correct canonical tag all belong here, so a large count is a good sign.</p>



<h3 class="wp-block-heading">Soft 404</h3>



<p class="wp-block-paragraph">A soft 404 is a page that looks like a &#8220;not found&#8221; page to Google but returns a 200 status code. On stores, the usual cases are empty categories, internal search pages with no results, and sold-out products whose page only says the item is unavailable. Keep temporarily sold-out products live with their full description, a stock message, and alternatives. Return a real 404 or 410 for products gone for good, or 301 redirect them to a replacement. Google&#8217;s crawl budget guide notes that soft 404 pages keep getting crawled, so they cost crawl as well as rankings.</p>



<h3 class="wp-block-heading">Not found (404)</h3>



<p class="wp-block-paragraph">Google says 404s are not necessarily a problem if the page was removed without a replacement. Discontinued products with no successor can stay 404. Act when the list includes URLs that still get traffic or backlinks, or old URLs that moved, which should 301 redirect to the new page. Our guide to <a href="https://scandiweb.com/blog/why-is-404-page-tracking-important-for-ecommerce/" target="_blank" rel="noopener">404 page tracking</a> shows how to spot the ones that still get visits.</p>



<h3 class="wp-block-heading">Page with redirect</h3>



<p class="wp-block-paragraph">The URL redirects to another page, so Google indexes the target instead. After a migration, this status fills up with old product and category URLs, which is exactly what should happen. Check that <a href="https://scandiweb.com/blog/301-redirect-mapping-guide-for-magento-2/">the redirects go straight to the final URL in one hop</a>, and that the <a href="https://scandiweb.com/blog/seo-migration-checklist/" target="_blank" rel="noopener">SEO migration checklist</a> steps for your redirect map were done.</p>



<h3 class="wp-block-heading">Excluded by &#8216;noindex&#8217; tag</h3>



<p class="wp-block-paragraph">The page carries a noindex directive, so Google left it out. Cart, checkout, account, wishlist, and internal search pages should be here. Look through the examples for product or category templates. A staging noindex left on after go-live also shows up here.</p>



<h3 class="wp-block-heading">Blocked by robots.txt and indexed, though blocked</h3>



<p class="wp-block-paragraph">&#8220;Blocked by robots.txt&#8221; means Google didn&#8217;t crawl the URL because your robots.txt file disallows it, which is expected for checkout, account, and filter paths you blocked on purpose. Robots.txt only controls crawling, so a blocked URL with links pointing to it can still appear in search without its content. Google files those under &#8220;Indexed, though blocked by robots.txt&#8221;. To keep a page out of search, remove the robots.txt block and use noindex instead, since Google can only see a noindex tag on a page it is allowed to crawl.</p>



<h3 class="wp-block-heading">Server error (5xx)</h3>



<p class="wp-block-paragraph">Googlebot couldn&#8217;t reach the page because the server failed, timed out, or was busy. Treat it as <a href="https://scandiweb.com/blog/website-maintenance-cost/">a hosting problem</a> first. Match the dates in the report against traffic peaks, deployments, and sales, because a store that slows down every time a campaign starts is also slow for customers.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Of the statuses in this section, soft 404 is the one most likely to contain pages that sell. Check its examples for product URLs before any of the others.</p></div>



<h2 class="wp-block-heading">When to ignore a Search Console status</h2>



<p class="wp-block-paragraph">Ignore a status when the URLs in it are pages you don&#8217;t want in search, or when Google indexed the right version of the page under another URL. Act when your product, category, or content pages that should earn traffic appear in the examples, or when the indexed page count drops while the store&#8217;s catalog didn&#8217;t shrink.</p>



<p class="wp-block-paragraph">Run each status through the same four questions, in this order.</p>



<ol class="wp-block-list">
<li>Should this URL be in Google at all? Cart, checkout, account, search results, sort orders, and tracking parameters: no, so leave them</li>


<li>Is the page indexed under another URL? Inspect it and read the Google-selected canonical. If that is the URL you want, you&#8217;re done</li>


<li>Is the count growing week over week? A flat count can wait, while one that grows every week needs a look</li>


<li>Did the indexed page count drop at the same time? Google suggests looking for a matching rise in not indexed URLs, and checking robots.txt, noindex tags, and login requirements first</li>

</ol>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/search-console-indexing-errors-when-to-ignore.png" alt="Decision flow with four questions that sort Search Console indexing statuses into ignore or fix for an online store" class="wp-image-26066" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/search-console-indexing-errors-when-to-ignore.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/search-console-indexing-errors-when-to-ignore-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/search-console-indexing-errors-when-to-ignore-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/search-console-indexing-errors-when-to-ignore-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/search-console-indexing-errors-when-to-ignore-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/search-console-indexing-errors-when-to-ignore-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/search-console-indexing-errors-when-to-ignore-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Four questions decide whether a Search Console indexing status needs a fix</figcaption></figure></div>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Search Console emails you whenever a reason is new, whether or not it affects traffic. Before anyone opens a ticket, check whether a single product or category URL you care about is in the examples.</p></div>



<h2 class="wp-block-heading">How to fix and validate an indexing issue</h2>



<p class="wp-block-paragraph">Fix the cause on the template, then tell Google. On a store, one setting or theme file usually produces thousands of affected URLs, so one change clears the whole group.</p>



<ol class="wp-block-list">
<li>Open the status and export the examples. The list is limited to 1,000 rows, so treat it as a sample of the full set</li>


<li>Group the URLs by template or pattern, such as product, category, filter parameter, or search page</li>


<li>Inspect two or three URLs per group with the URL Inspection tool to see the live status and the Google-selected canonical</li>


<li>Fix the template, setting, or rule behind the group, and test it on a few URLs with a live test</li>


<li>Click &#8220;Validate fix&#8221; in the report. Google says validation typically takes up to about two weeks and sometimes longer</li>

</ol>



<p class="wp-block-paragraph">If the same statuses keep coming back after every release, add them to your release checks. A <a href="https://scandiweb.com/blog/seo-technical-audit-why-and-when-you-need-to-perform-it/" target="_blank" rel="noopener">technical SEO audit</a> checks canonicals, robots rules, and status codes across every template in one pass, and it&#8217;s where our <a href="https://scandiweb.com/seo-services" target="_blank" rel="noopener">eCommerce SEO team</a> starts when a store&#8217;s indexing numbers look wrong.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Export before you validate. The example list changes as Google rechecks URLs, so a saved copy is the easiest way to compare before and after.</p></div>



<h2 class="wp-block-heading">Frequently asked questions about Search Console indexing errors</h2>



<h3 class="wp-block-heading">Is duplicate without user-selected canonical bad for SEO?</h3>



<p class="wp-block-paragraph">Usually not. Google says duplicate without user-selected canonical is not an error, because it means Google found a copy of another page and indexed the other version. On a store, those copies are mostly variant, sort, and tracking URLs. It&#8217;s only a problem when your main product or category URL is the one left out, which you can check with the URL Inspection tool.</p>



<h3 class="wp-block-heading">How do I fix crawled – currently not indexed?</h3>



<p class="wp-block-paragraph">Make the page worth indexing. Google crawled it and decided to leave it out, so resubmitting the URL doesn&#8217;t help. On a store, add unique copy to thin categories, rewrite manufacturer product descriptions for your bestsellers, link the page from menus or related categories, and merge categories with only a few products. Ignore the status for pages you never wanted in search.</p>



<h3 class="wp-block-heading">How long does Google take to index pages after a fix?</h3>



<p class="wp-block-paragraph">Google says a Validate fix request in Search Console typically takes up to about two weeks, and sometimes longer. Individual pages can be indexed sooner, especially ones with strong internal links. Large stores take longer because Google has to recrawl many URLs. Fix the template first and validate once, which saves requesting indexing for pages one at a time.</p>



<h3 class="wp-block-heading">Should out-of-stock products be noindexed?</h3>



<p class="wp-block-paragraph">No, not if they&#8217;re coming back. Keep temporarily out-of-stock products indexed with their full description, a clear stock message, and alternatives, so they keep their rankings. A page reduced to a short &#8220;unavailable&#8221; message can be treated as a soft 404. For products discontinued for good, redirect to a replacement or the closest category, or return a 404 or 410.</p>



<h3 class="wp-block-heading">Does blocking a page in robots.txt keep it out of Google?</h3>



<p class="wp-block-paragraph">Not reliably. Robots.txt stops Google from crawling a page, but the URL can still be indexed without its content if other pages link to it. Google lists those under &#8220;Indexed, though blocked by robots.txt&#8221;. To keep a page out of search results, allow crawling and add a noindex tag, because Google can only read the tag on a page it can crawl.</p>



<h3 class="wp-block-heading">Why does Google show the wrong snippet for my product page?</h3>



<p class="wp-block-paragraph">Google builds snippets mostly from the page content and uses your meta description only when it describes the page better for that search. If the snippet shows old text, a shipping banner, or a cookie notice, rewrite the meta description to match the page, and make sure the main description appears early in the HTML. The data-nosnippet attribute keeps parts of the page out of snippets.</p>



<h3 class="wp-block-heading">Why does Google show the wrong price or currency for my products?</h3>



<p class="wp-block-paragraph">Google reads price and currency from your product structured data and from Merchant Center. Wrong values usually come from markup that lists the default variant&#8217;s price, a price loaded with JavaScript after the page renders, or one currency used for every country. Test the page with the Rich Results Test and check that the price and priceCurrency match what customers see. Our <a href="https://scandiweb.com/blog/product-structured-data-for-rich-results-and-free-advertising/" target="_blank" rel="noopener">product structured data guide</a> lists the fields Google uses.</p>



<h3 class="wp-block-heading">Why are my products disapproved in Merchant Center?</h3>



<p class="wp-block-paragraph">The cause stores run into most is a mismatch between the feed and the product page, usually on price or availability. Merchant Center checks the feed against your page and its structured data, so a sale price missing from the feed or a variant URL that shows another price can trigger it. Update the <a href="https://scandiweb.com/services/product-feed-management" target="_blank" rel="noopener">product feed</a> more often, fix the markup, and use the right currency per country. Google recrawls disapproved products within hours or days.</p>



<h2 class="wp-block-heading">Fix the statuses that touch the pages you sell</h2>



<p class="wp-block-paragraph">Duplicate without user-selected canonical, crawled – currently not indexed, and the other Page indexing statuses are mostly Google telling you how it handled the extra URLs your store creates. Start from the pages you sell from, check whether each one is indexed under the URL you want, and fix the template behind any group that includes them. Leave the rest, and check each month whether the counts are growing.</p>



<script type="application/ld+json">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "Is duplicate without user-selected canonical bad for SEO?", "acceptedAnswer": {"@type": "Answer", "text": "Usually not. Google says duplicate without user-selected canonical is not an error, because it means Google found a copy of another page and indexed the other version. On a store, those copies are mostly variant, sort, and tracking URLs. It's only a problem when your main product or category URL is the one left out, which you can check with the URL Inspection tool."}}, {"@type": "Question", "name": "How do I fix crawled – currently not indexed?", "acceptedAnswer": {"@type": "Answer", "text": "Make the page worth indexing. Google crawled it and decided to leave it out, so resubmitting the URL doesn't help. On a store, add unique copy to thin categories, rewrite manufacturer product descriptions for your bestsellers, link the page from menus or related categories, and merge categories with only a few products. Ignore the status for pages you never wanted in search."}}, {"@type": "Question", "name": "How long does Google take to index pages after a fix?", "acceptedAnswer": {"@type": "Answer", "text": "Google says a Validate fix request in Search Console typically takes up to about two weeks, and sometimes longer. Individual pages can be indexed sooner, especially ones with strong internal links. Large stores take longer because Google has to recrawl many URLs. Fix the template first and validate once, which saves requesting indexing for pages one at a time."}}, {"@type": "Question", "name": "Should out-of-stock products be noindexed?", "acceptedAnswer": {"@type": "Answer", "text": "No, not if they're coming back. Keep temporarily out-of-stock products indexed with their full description, a clear stock message, and alternatives, so they keep their rankings. A page reduced to a short \"unavailable\" message can be treated as a soft 404. For products discontinued for good, redirect to a replacement or the closest category, or return a 404 or 410."}}, {"@type": "Question", "name": "Does blocking a page in robots.txt keep it out of Google?", "acceptedAnswer": {"@type": "Answer", "text": "Not reliably. Robots.txt stops Google from crawling a page, but the URL can still be indexed without its content if other pages link to it. Google lists those under \"Indexed, though blocked by robots.txt\". To keep a page out of search results, allow crawling and add a noindex tag, because Google can only read the tag on a page it can crawl."}}, {"@type": "Question", "name": "Why does Google show the wrong snippet for my product page?", "acceptedAnswer": {"@type": "Answer", "text": "Google builds snippets mostly from the page content and uses your meta description only when it describes the page better for that search. If the snippet shows old text, a shipping banner, or a cookie notice, rewrite the meta description to match the page, and make sure the main description appears early in the HTML. The data-nosnippet attribute keeps parts of the page out of snippets."}}, {"@type": "Question", "name": "Why does Google show the wrong price or currency for my products?", "acceptedAnswer": {"@type": "Answer", "text": "Google reads price and currency from your product structured data and from Merchant Center. Wrong values usually come from markup that lists the default variant's price, a price loaded with JavaScript after the page renders, or one currency used for every country. Test the page with the Rich Results Test and check that the price and priceCurrency match what customers see. Our product structured data guide lists the fields Google uses."}}, {"@type": "Question", "name": "Why are my products disapproved in Merchant Center?", "acceptedAnswer": {"@type": "Answer", "text": "The cause stores run into most is a mismatch between the feed and the product page, usually on price or availability. Merchant Center checks the feed against your page and its structured data, so a sale price missing from the feed or a variant URL that shows another price can trigger it. Update the product feed more often, fix the markup, and use the right currency per country. Google recrawls disapproved products within hours or days."}}]}</script>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><style> p.box { border: 1px solid black; padding-top: 30px; padding-right: 30px; padding-bottom: 30px; padding-left: 30px; } </style> <p class="box"><em>Search Console report full of statuses and no time to sort them? </em><a href="https://scandiweb.com/contact" target="_blank" rel="noreferrer noopener"><em>Send us the export</em></a><em>, and we&#x27;ll tell you which ones are costing you traffic.</em></p></p>
<p>The post <a rel="nofollow" href="https://scandiweb.com/blog/duplicate-without-user-selected-canonical/">Duplicate Without User-Selected Canonical and Other Search Console Errors</a> appeared first on <a rel="nofollow" href="https://scandiweb.com/blog">scandiweb</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Server-Side Tracking and Meta Conversions API: Why Ad Platforms and GA4 Disagree</title>
		<link>https://scandiweb.com/blog/server-side-tracking/</link>
		
		<dc:creator><![CDATA[Andres Reitsnik]]></dc:creator>
		<pubDate>Mon, 19 Oct 2026 15:30:00 +0000</pubDate>
				<category><![CDATA[Data Analytics]]></category>
		<category><![CDATA[PPC]]></category>
		<category><![CDATA[data privacy]]></category>
		<category><![CDATA[Data Tracking]]></category>
		<category><![CDATA[facebook ads]]></category>
		<category><![CDATA[GA4]]></category>
		<category><![CDATA[google ads]]></category>
		<category><![CDATA[Google Analytics 4]]></category>
		<category><![CDATA[Google Tag Manager]]></category>
		<category><![CDATA[meta ads]]></category>
		<category><![CDATA[Meta Conversions API]]></category>
		<category><![CDATA[Server-Side Tracking]]></category>
		<guid isPermaLink="false">https://scandiweb.com/blog/?p=26094</guid>

					<description><![CDATA[<p>Server side tracking explained: why Meta, Google Ads and GA4 count different purchases, how CAPI deduplication works, and what it costs.</p>
<p>The post <a rel="nofollow" href="https://scandiweb.com/blog/server-side-tracking/">Server-Side Tracking and Meta Conversions API: Why Ad Platforms and GA4 Disagree</a> appeared first on <a rel="nofollow" href="https://scandiweb.com/blog">scandiweb</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="lazyblock-related-SsTrk wp-block-lazyblock-related"><div class="related-services">
  <h3>Related Services</h3>
  <ul>
    
    <li>
      <a  href="https://scandiweb.com/services/server-side-tracking" target=_blank >
        Server-Side Tracking
      </a>
    </li>
    
    <li>
      <a  href="https://scandiweb.com/services/data-collection-and-storage" target=_blank >
        Data Collection &amp; Tracking
      </a>
    </li>
    
    <li>
      <a  href="https://scandiweb.com/services/paid-social-advertising-services" target=_blank >
        Paid Social
      </a>
    </li>
    
  </ul>
</div>
</div>


<p class="wp-block-paragraph">If Meta says your ads drove 140 purchases last week, GA4 credits Meta with 60, and your store backend shows 118 orders in total, your tracking isn&#8217;t necessarily broken. Each tool counts on its own date and by its own rules about who gets the credit.</p>



<p class="wp-block-paragraph">The gap still costs you. Part of it is purchases the browser never reports, and part of it can be the same order counted twice. Server side tracking fixes some of that, which is why so many vendors are pitching it right now. This guide explains why the numbers disagree, what server-side tracking and the Meta Conversions API change, how event deduplication works, what a server container costs to run, and when a mid-size store can skip it.</p>



<h2 class="wp-block-heading">Why Meta, Google Ads, and GA4 never match</h2>



<p class="wp-block-paragraph">Meta, Google Ads, and GA4 never match because each one answers a different question. Meta counts purchases by people who clicked or saw a Meta ad. Google Ads counts purchases after a Google ad click. GA4 assigns credit across every channel a shopper used. They also date conversions differently, and each loses its own share of browser data to ad blockers and consent choices.</p>



<figure class="wp-block-table"><table><thead><tr><th>Why the numbers differ</th><th>Meta Ads</th><th>Google Ads</th><th>GA4</th></tr></thead><tbody><tr><td>Who gets credit</td><td>Any Meta ad clicked or viewed in the window</td><td>Google ad clicks</td><td>Channels in the path, set by the attribution model</td></tr><tr><td>Default window</td><td>7-day click, 1-day view</td><td>Set per conversion action, up to 90 days</td><td>90-day lookback for purchases</td></tr><tr><td>Date of the conversion</td><td>Date of the ad impression or click</td><td>Date of the ad click</td><td>Date of the purchase</td></tr><tr><td>Counts views without a click</td><td><span style="display:inline-block;padding:4px 8px;background-color:#e7e9f8;color:#3f4aaf;border-radius:4px;font-weight:600;">Yes</span></td><td><span style="display:inline-block;padding:4px 8px;background-color:#d4edda;color:#1e7e34;border-radius:4px;font-weight:600;">No</span></td><td><span style="display:inline-block;padding:4px 8px;background-color:#d4edda;color:#1e7e34;border-radius:4px;font-weight:600;">No</span></td></tr></tbody></table><figcaption class="wp-element-caption">Why Meta Ads, Google Ads, and GA4 report different purchase numbers</figcaption></figure>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tracking-meta-ga4-backend-gap.png" alt="Bar chart comparing purchases reported by Meta Ads and GA4 with backend orders for the same week" class="wp-image-26088" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tracking-meta-ga4-backend-gap.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tracking-meta-ga4-backend-gap-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tracking-meta-ga4-backend-gap-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tracking-meta-ga4-backend-gap-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tracking-meta-ga4-backend-gap-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tracking-meta-ga4-backend-gap-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tracking-meta-ga4-backend-gap-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">One week of purchases, as Meta, GA4, and the store backend report it</figcaption></figure></div>



<h3 class="wp-block-heading">Each platform gives itself the credit</h3>



<p class="wp-block-paragraph">A shopper clicks a Meta ad on Monday, comes back through a Google ad on Wednesday, and buys. Meta counts the purchase because it happened within seven days of a Meta click. Google Ads counts it too. GA4 gives the credit to Google, or splits it, depending on the attribution model. Both ad platforms claim the same order, and both are following their own rules.</p>



<p class="wp-block-paragraph">Meta also counts purchases by people who only saw an ad and bought within a day. GA4 can&#8217;t see an ad view at all, so on a store that spends most of its budget on Meta, view-through purchases are often a large part of the difference. Our guide to <a href="https://scandiweb.com/blog/optimizing-marketing-with-offline-and-online-data/" target="_blank" rel="noopener">offline and online attribution</a> covers how to compare channels without taking any single platform&#8217;s word for it.</p>



<h3 class="wp-block-heading">The same purchase lands on different days</h3>



<p class="wp-block-paragraph">Google Ads reports a conversion on the day of the ad click, and GA4 reports it on the day of the purchase. In Google&#8217;s own example, a click on May 5 and a purchase on May 10 show up on May 5 in Google Ads and on May 10 in GA4. Meta&#8217;s Ads Manager also dates conversions back to the ad impression or click. Weekly comparisons drift for that reason alone, and the most recent days keep filling in as late purchases arrive.</p>



<p class="wp-block-paragraph">Google says more than 95% of conversions are attributed within 14 days, so compare platforms on date ranges that ended at least two weeks ago.</p>



<h3 class="wp-block-heading">Browsers and consent hide some purchases</h3>



<p class="wp-block-paragraph">Every platform misses purchases that its browser tag never reports. Ad blockers stop tags from loading, and <a href="https://scandiweb.com/blog/ready-for-cookieless-future/">Safari limits cookies set by JavaScript to seven days</a>, so a shopper who returns after two weeks looks like a new visitor. Visitors who decline cookies are only partly counted, and how much Google models back depends on your <a href="https://scandiweb.com/blog/google-consent-mode-v2/" target="_blank" rel="noopener">Google Consent Mode v2</a> setup.</p>



<h3 class="wp-block-heading">Duplicate events inflate Meta</h3>



<p class="wp-block-paragraph">If your store sends a purchase to Meta from the browser pixel and again from the server, and the two events don&#8217;t share an ID, Meta counts the order twice. Of all the causes here, this is the only plain error. When Meta&#8217;s purchase count comes close to your total order count, check deduplication first.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Most of the gap between Meta and GA4 comes from counting rules that tracking can&#8217;t change. The part you can fix is the purchases that get lost or duplicated on the way, so measure that part before you pay for anything.</p></div>



<h2 class="wp-block-heading">What is server side tracking?</h2>



<p class="wp-block-paragraph">Server side tracking sends conversion data from a server you control to platforms such as Meta, Google Ads, and GA4, instead of relying only on tags in the shopper&#8217;s browser. The browser sends one request to your own subdomain, or your store backend reports the order directly. The server then forwards each event to each platform, under rules you set.</p>



<p class="wp-block-paragraph">On a typical store, it works like this. A shopper places an order, and the browser sends the purchase event to a server container on a subdomain such as data.yourstore.com. The container, often server-side Google Tag Manager, formats the event for each destination and sends it to GA4, the Meta Conversions API, and Google Ads. Because the request goes to your own domain, fewer ad blockers stop it. The server can also set cookies through HTTP headers, which Safari doesn&#8217;t cap the way it caps cookies written by JavaScript in most setups.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tracking-data-flow-diagram.png" alt="Diagram of browser tags sending data straight to ad platforms, next to one server container that forwards each event" class="wp-image-26089" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tracking-data-flow-diagram.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tracking-data-flow-diagram-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tracking-data-flow-diagram-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tracking-data-flow-diagram-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tracking-data-flow-diagram-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tracking-data-flow-diagram-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tracking-data-flow-diagram-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Client-side tags compared with a server-side container on your own subdomain</figcaption></figure></div>



<h3 class="wp-block-heading">Client-side vs server-side tagging</h3>



<p class="wp-block-paragraph">Client-side tagging runs every vendor&#8217;s script in the shopper&#8217;s browser. Server side tagging moves most of that work to a server: the browser sends one stream of events, and the server decides what goes to each platform.</p>



<figure class="wp-block-table"><table><thead><tr><th></th><th>Client-side tagging</th><th>Server-side tagging</th></tr></thead><tbody><tr><td>Where tags run</td><td>In the shopper&#8217;s browser</td><td>On your server container</td></tr><tr><td>Requests go to</td><td>Each vendor&#8217;s domain</td><td>Your own subdomain</td></tr><tr><td>Ad blockers</td><td>Often block the tags</td><td>Block fewer requests</td></tr><tr><td>Data control</td><td>Each vendor collects what its script reads</td><td>You choose what each platform receives</td></tr><tr><td>Page weight</td><td>One script per vendor</td><td>Fewer scripts in the browser</td></tr><tr><td>Running cost</td><td>Free</td><td>Hosting plus upkeep</td></tr><tr><td>Who maintains it</td><td>Marketing team in GTM</td><td>Someone who can debug a server</td></tr></tbody></table><figcaption class="wp-element-caption">Client-side vs server-side tagging compared</figcaption></figure>



<h3 class="wp-block-heading">What server-side tracking can&#8217;t change</h3>



<p class="wp-block-paragraph">A server container doesn&#8217;t change attribution. Meta will still count view-through purchases and GA4 will still split credit across channels, so the platforms will keep disagreeing. It doesn&#8217;t override consent either. If a visitor declines marketing cookies, the server has to respect that, so consent signals need to travel with each event into the container.</p>



<p class="wp-block-paragraph">What it can change is the share of real purchases each platform receives and the quality of the customer data attached to them. That improves the signal Meta and Google use to optimize bids. Your dashboards will look closer, but rarely identical.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>If a business case promises that Meta and GA4 will finally report the same numbers after a server-side setup, read the rest of that pitch with caution.</p></div>



<h2 class="wp-block-heading">How the Meta Conversions API works</h2>



<p class="wp-block-paragraph">The Meta Conversions API, often called Meta CAPI, lets your server send events such as purchases and add-to-carts directly to Meta, next to or instead of the browser pixel. Each server event carries an event name, a timestamp, an event ID, and customer details such as a hashed email or phone number, which Meta uses to match the purchase to a Facebook or Instagram account.</p>



<p class="wp-block-paragraph">Meta scores that matching with Event Match Quality, a rating out of 10 for each event type in Events Manager. Email, phone number, name, and IP address are among the parameters Meta lists as high quality, and the browser user agent is required for website events. Unless you use Meta&#8217;s Business SDK, your server has to hash the customer details before sending them.</p>



<p class="wp-block-paragraph">Meta recommends what it calls a redundant setup: send the same events through both the pixel and the Conversions API. The browser pixel adds context the server doesn&#8217;t have, while the server covers purchases the browser missed, and deduplication removes the overlap. Meta accepts server events up to seven days after they happened, which helps when an order is confirmed later, for example after a bank transfer.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/meta-conversions-api-event-match-quality.png" alt="Events Manager style panel showing purchase events from pixel and server with a match quality score of 8.1 out of 10" class="wp-image-26090" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/meta-conversions-api-event-match-quality.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/meta-conversions-api-event-match-quality-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/meta-conversions-api-event-match-quality-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/meta-conversions-api-event-match-quality-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/meta-conversions-api-event-match-quality-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/meta-conversions-api-event-match-quality-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/meta-conversions-api-event-match-quality-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Meta Conversions API purchase events with an Event Match Quality score</figcaption></figure></div>



<p class="wp-block-paragraph">A store has four common ways to send server events to Meta:</p>



<ol class="wp-block-list">
<li>Shopify&#8217;s Facebook &amp; Instagram app sends purchases through the Conversions API when data sharing is set to Enhanced or Maximum, with no server of your own</li>


<li>Magento (Adobe Commerce) stores usually add a Meta Pixel and Conversions API extension from the Adobe Commerce Marketplace, which sends events from the store backend</li>


<li>A server-side Google Tag Manager container forwards the same events to Meta, GA4, and Google Ads from one place</li>


<li>Meta&#8217;s Conversions API Gateway is free software that runs in your own cloud account and sends events to Meta only</li>

</ol>



<p class="wp-block-paragraph">For step-by-step setup in Google Tag Manager, our earlier guide to <a href="https://scandiweb.com/blog/how-to-set-up-the-facebook-conversion-api-for-tracking-ecommerce-data/" target="_blank" rel="noopener">setting up the Facebook Conversions API</a> walks through the pixel and the server tags.</p>



<h2 class="wp-block-heading">How Meta event deduplication works with event_id</h2>



<p class="wp-block-paragraph">Meta deduplicates a browser event and a server event when both have the same event name and the same event ID, and the second one arrives within 48 hours of the first. The pixel passes the ID as eventID, and the Conversions API as event_id. When they match, Meta keeps one purchase. When the IDs are missing or different, Meta counts the order twice.</p>



<p class="wp-block-paragraph">Picture two cashiers ringing up the same order. If both write the order number on the receipt, the accountant spots the copy and files one. If neither does, the books show two sales. For purchases, the order number is the obvious ID because the store already creates one for every order.</p>



<p class="wp-block-paragraph">In the browser, the pixel call carries the ID as its fourth argument:</p>



<pre class="wp-block-code"><code>fbq('track', 'Purchase', {value: 129.00, currency: 'USD'}, {eventID: 'order_10482'});</code></pre>



<p class="wp-block-paragraph">On the server, the Conversions API event carries the same ID:</p>



<pre class="wp-block-code"><code>{
  "event_name": "Purchase",
  "event_time": 1792233177,
  "event_id": "order_10482",
  "action_source": "website",
  "event_source_url": "https://www.yourstore.com/checkout/success",
  "user_data": {
    "em": ["&lt;sha256 of the lowercase email&gt;"],
    "client_ip_address": "203.0.113.24",
    "client_user_agent": "Mozilla/5.0 ...",
    "fbp": "fb.1.1792230000.123456789"
  },
  "custom_data": {"value": 129.00, "currency": "USD"}
}</code></pre>



<p class="wp-block-paragraph">The result depends on which events arrive and what they carry:</p>



<ul class="wp-block-list">
<li>Both events arrive with the same name and ID: Meta keeps one, generally the first it received</li>


<li>Only the server event arrives because an ad blocker stopped the pixel: Meta records the purchase from the server</li>


<li>Only the pixel event arrives because the server call failed: Meta records the purchase from the browser</li>


<li>The IDs differ, for example the pixel sends the order number and the server sends an internal transaction ID: Meta counts two purchases</li>


<li>The event names differ, such as &#8220;Purchase&#8221; and &#8220;purchase&#8221;: Meta treats them as two separate events</li>

</ul>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/meta-capi-event-id-deduplication-flow.png" alt="Diagram showing matching event IDs merging into one purchase and mismatched IDs creating two purchases in Meta" class="wp-image-26091" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/meta-capi-event-id-deduplication-flow.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/meta-capi-event-id-deduplication-flow-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/meta-capi-event-id-deduplication-flow-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/meta-capi-event-id-deduplication-flow-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/meta-capi-event-id-deduplication-flow-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/meta-capi-event-id-deduplication-flow-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/meta-capi-event-id-deduplication-flow-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">How Meta deduplicates pixel and Conversions API events with a shared event ID</figcaption></figure></div>



<p class="wp-block-paragraph">Meta also supports a fallback that matches on the fbp browser cookie or external_id instead of the event ID. It only works when the browser event arrives first, which means it misses the very purchases a server setup is meant to rescue, so use the event ID.</p>



<p class="wp-block-paragraph">To check your setup, open the Purchase event in Meta Events Manager and compare the deduplicated event count with your backend orders for the same days. If Meta&#8217;s purchases are close to or above your total orders while GA4 shows far fewer, place one test order and compare the IDs both sources sent.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Deduplication fails quietly. Meta doesn&#8217;t flag a double count, it just reports a better ROAS, and budget moves toward it. Test it again after every checkout or theme update.</p></div>



<h2 class="wp-block-heading">What server side tagging costs to run</h2>



<p class="wp-block-paragraph">A server-side Google Tag Manager container on Google Cloud Run costs roughly $90 a month at minimum, based on Google&#8217;s estimate of about $45 per server per month and its advice to run at least two servers. Traffic peaks scale that up. The bigger cost is the work to build the setup and <a href="https://scandiweb.com/blog/website-maintenance-cost/">keep it running</a>.</p>



<p class="wp-block-paragraph">Google&#8217;s Cloud Run setup guide, last updated in May 2026, gives these numbers:</p>



<ul class="wp-block-list">
<li>Each server is a Cloud Run instance with 1 vCPU and 0.5 GB of memory, at about $45 a month</li>


<li>Google recommends at least two instances, so one server outage doesn&#8217;t lose data</li>


<li>Two to ten servers handle roughly 35–350 requests per second, depending on how many tags you run</li>


<li>A separate preview server is provisioned for debugging in Tag Manager</li>

</ul>



<p class="wp-block-paragraph">At ten servers during a Black Friday peak, the same estimate works out to about $450 a month for those days. Cloud Run is Google&#8217;s recommended host, but the container can run in other environments too. Managed providers such as Stape sell server-side GTM hosting on monthly plans priced by request volume, starting with a free tier for low traffic. That removes the cloud setup and adds a vendor.</p>



<p class="wp-block-paragraph">If Meta is the only platform you need server events for, Meta&#8217;s Conversions API Gateway is a lighter option. The software is free, you pay for the cloud resources, and Meta&#8217;s own setup flow estimates AWS costs upwards of $30 a month.</p>



<p class="wp-block-paragraph">Google also offers Google tag gateway for advertisers, which serves the Google tag from your own domain through your CDN or load balancer. It isn&#8217;t a full server container, and Google recommends running both for the most durable setup.</p>



<div class="wp-block-image aligncenter size-large"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" loading="lazy" width="1672" height="941" src="https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tagging-cost-cloud-run-estimate.png" alt="Cost card showing two Cloud Run servers at about 90 dollars a month, scaling to ten servers at about 450 dollars at peak" class="wp-image-26092" style="display:block;margin:0 auto;max-width:100%;height:auto;" srcset="https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tagging-cost-cloud-run-estimate.png 1672w, https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tagging-cost-cloud-run-estimate-300x169.png 300w, https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tagging-cost-cloud-run-estimate-1024x576.png 1024w, https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tagging-cost-cloud-run-estimate-150x84.png 150w, https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tagging-cost-cloud-run-estimate-768x432.png 768w, https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tagging-cost-cloud-run-estimate-1536x864.png 1536w, https://scandiweb.com/blog/wp-content/uploads/2026/10/server-side-tagging-cost-cloud-run-estimate-1600x900.png 1600w" sizes="auto, (max-width: 1672px) 100vw, 1672px" /><figcaption style="display:block;position:static;background:none;color:inherit;width:auto;padding:8px 0 0;margin:0.5em 0 1em;font-size:14px;text-align:center;max-height:none;">Server side tagging cost on Cloud Run, from Google&#x27;s per-server estimate</figcaption></figure></div>



<p class="wp-block-paragraph">Someone also has to rebuild each tag in the server container, pass consent signals through, test purchases against real orders, and watch for drops after every release. If nobody owns that work, a broken container can go unnoticed for weeks.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Plan the budget around the person who maintains the container. A $90-a-month container that breaks after a checkout update costs more than the client-side tags it replaced.</p></div>



<h2 class="wp-block-heading">Is server-side tracking worth it for a mid-size store?</h2>



<p class="wp-block-paragraph">Server-side tracking is worth it when paid media drives a large share of revenue across several platforms and someone can own the setup after launch. If your store runs one ad platform on Shopify or Magento, a native Conversions API connection with working deduplication usually closes most of the fixable gap for a fraction of the effort.</p>



<p class="wp-block-paragraph"><strong>Server-side tracking is worth it if:</strong></p>



<ul class="wp-block-list">
<li><a href="https://scandiweb.com/blog/ppc-advertising-an-essential-guide-to-pay-per-click-marketing/">Paid media</a> is one of your largest costs, so a few percent of missing conversions changes bidding decisions</li>


<li>You send purchases to several platforms, such as Meta, Google Ads, TikTok, and GA4, and want one place to manage them</li>


<li>A high share of your traffic uses Safari and iOS, where cookie limits hit returning shoppers hardest</li>


<li>You want to control exactly which customer data each platform receives</li>


<li>You have an analytics team, or a partner, to maintain and monitor the container</li>

</ul>



<p class="wp-block-paragraph"><strong>It isn&#8217;t worth it yet if:</strong></p>



<ul class="wp-block-list">
<li>Meta is your only paid channel and your platform has a native Conversions API connection you haven&#8217;t switched on</li>


<li>Your purchase events aren&#8217;t deduplicated, since moving broken events to a server keeps them broken</li>


<li>Your consent banner and Consent Mode setup aren&#8217;t working, because a server container passes the same consent problems on</li>


<li>Nobody can debug the container when a release breaks it</li>


<li>You expect it to make Meta and GA4 report the same numbers</li>

</ul>



<p class="wp-block-paragraph">If the first list describes your store, our <a href="https://scandiweb.com/services/server-side-tracking" target="_blank" rel="noopener">server-side tracking team</a> starts every setup by measuring the gap against backend orders, so the result is a number you can check.</p>



<h2 class="wp-block-heading">Measure the gap before you build anything</h2>



<p class="wp-block-paragraph">Before choosing a setup, measure how many backend orders each platform receives. Compare orders in your store backend with purchases in GA4 and with the purchase events Meta received for the same days. That shows how much data you lose today, which is the only part a server setup can recover.</p>



<ol class="wp-block-list">
<li>Export backend orders by day for a period that ended at least two weeks ago, so late conversions are included</li>


<li>Pull GA4 purchases by day for the same dates across all channels, and <a href="https://scandiweb.com/blog/ga4-unassigned-traffic/">compare the totals with the backend</a></li>


<li>Pull the received Purchase events in Meta Events Manager for the same dates, instead of the attributed purchases in Ads Manager</li>


<li>Check with one test order that the pixel and server events share an event ID</li>


<li>Check your consent rate and Consent Mode setup, so you know how much of the gap is visitors who declined</li>

</ol>



<p class="wp-block-paragraph">If GA4 receives 90% of backend orders and Meta&#8217;s event count is in line with GA4, the browser setup is doing most of the job. If GA4 sees 70% and Meta&#8217;s events exceed your orders, you have both lost and duplicated events, which is a strong case for fixing tracking first. Our <a href="https://scandiweb.com/services/analytics" target="_blank" rel="noopener">analytics team</a> runs this comparison as the first step of a tracking audit.</p>



<style>  .box-new {    background-color: #f8f4ef;    padding: 20px 30px 30px 30px; /* top, right, bottom, left */    border: none;  }  .box-new p {    margin-top: 0;    margin-bottom: 1em;  }  .box-new p:last-child {    margin-bottom: 0;  }</style><div class="box-new">  <p><strong>🚀 Quick takeaway</strong></p>  <p>Use Events Manager for this check. Ads Manager&#8217;s purchase column applies Meta&#8217;s attribution rules, while Events Manager shows the events that arrived, and only that number tells you whether tracking loses data.</p></div>



<h2 class="wp-block-heading">Frequently asked questions about server side tracking</h2>



<h3 class="wp-block-heading">Is server-side tracking legal?</h3>



<p class="wp-block-paragraph">Yes, server-side tracking is legal, but it doesn&#8217;t change what you need consent for. Under GDPR and similar laws, sending a visitor&#8217;s data to Meta or Google for advertising still requires their consent, whether the request comes from the browser or your server. A compliant setup passes consent signals into the server container, and the container forwards data only where the visitor agreed.</p>



<h3 class="wp-block-heading">Why does Meta report more purchases than GA4?</h3>



<p class="wp-block-paragraph">Meta reports more purchases than GA4 because it counts purchases within seven days of a Meta ad click and one day of an ad view, even when another channel got the last click. GA4 assigns that credit elsewhere and can&#8217;t see ad views at all. Duplicate pixel and server events without a shared event ID can also inflate Meta&#8217;s count.</p>



<h3 class="wp-block-heading">Does server-side tracking bypass ad blockers?</h3>



<p class="wp-block-paragraph">Server-side tracking gets past many ad blockers because the browser sends data to your own subdomain instead of Meta&#8217;s or Google&#8217;s domains. Events your store backend sends directly don&#8217;t depend on the browser at all. It must never be used to get around a visitor&#8217;s consent choice, because data protection law applies to server requests exactly as it does to browser tags.</p>



<h3 class="wp-block-heading">Do I still need the Meta Pixel with the Conversions API?</h3>



<p class="wp-block-paragraph">In most cases, yes. Meta recommends running the pixel and the Conversions API together and sending the same events through both, with a shared event ID for deduplication. The pixel adds browser details that help Meta match visitors, and the Conversions API covers purchases the browser misses. The Conversions API works on its own, usually with lower match quality.</p>



<h3 class="wp-block-heading">How much does server-side tracking cost?</h3>



<p class="wp-block-paragraph">Hosting a server-side Google Tag Manager container on Cloud Run costs about $45 per server per month, according to Google, which recommends at least two servers, so roughly $90 a month before traffic peaks. Managed hosting providers charge monthly plans by request volume. Setup and maintenance usually cost more than hosting and depend on how many platforms and markets you track.</p>



<h3 class="wp-block-heading">What is the difference between client-side and server-side tracking?</h3>



<p class="wp-block-paragraph">Client-side tracking runs each platform&#8217;s tag in the shopper&#8217;s browser, and each tag sends data straight to its vendor. Server-side tracking sends one stream of events to a server you control, usually on your own subdomain, and the server forwards data to each platform. It gives you more control over the data and loses fewer events to blockers, at the cost of hosting and maintenance.</p>



<h2 class="wp-block-heading">Fix the gap you can measure, then decide on the server</h2>



<p class="wp-block-paragraph">Server side tracking helps a store send more of its real purchases to Meta, Google Ads, and GA4, with better customer data attached. It won&#8217;t make the platforms agree, because they assign credit and dates by different rules on purpose. Start by measuring how many backend orders each platform receives, then fix deduplication and consent, and switch on the Conversions API your platform already offers. Build a server container when your paid media budget and the number of platforms justify someone owning it.</p>



<script type="application/ld+json">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "Is server-side tracking legal?", "acceptedAnswer": {"@type": "Answer", "text": "Yes, server-side tracking is legal, but it doesn't change what you need consent for. Under GDPR and similar laws, sending a visitor's data to Meta or Google for advertising still requires their consent, whether the request comes from the browser or your server. A compliant setup passes consent signals into the server container, and the container forwards data only where the visitor agreed."}}, {"@type": "Question", "name": "Why does Meta report more purchases than GA4?", "acceptedAnswer": {"@type": "Answer", "text": "Meta reports more purchases than GA4 because it counts purchases within seven days of a Meta ad click and one day of an ad view, even when another channel got the last click. GA4 assigns that credit elsewhere and can't see ad views at all. Duplicate pixel and server events without a shared event ID can also inflate Meta's count."}}, {"@type": "Question", "name": "Does server-side tracking bypass ad blockers?", "acceptedAnswer": {"@type": "Answer", "text": "Server-side tracking gets past many ad blockers because the browser sends data to your own subdomain instead of Meta's or Google's domains. Events your store backend sends directly don't depend on the browser at all. It must never be used to get around a visitor's consent choice, because data protection law applies to server requests exactly as it does to browser tags."}}, {"@type": "Question", "name": "Do I still need the Meta Pixel with the Conversions API?", "acceptedAnswer": {"@type": "Answer", "text": "In most cases, yes. Meta recommends running the pixel and the Conversions API together and sending the same events through both, with a shared event ID for deduplication. The pixel adds browser details that help Meta match visitors, and the Conversions API covers purchases the browser misses. The Conversions API works on its own, usually with lower match quality."}}, {"@type": "Question", "name": "How much does server-side tracking cost?", "acceptedAnswer": {"@type": "Answer", "text": "Hosting a server-side Google Tag Manager container on Cloud Run costs about $45 per server per month, according to Google, which recommends at least two servers, so roughly $90 a month before traffic peaks. Managed hosting providers charge monthly plans by request volume. Setup and maintenance usually cost more than hosting and depend on how many platforms and markets you track."}}, {"@type": "Question", "name": "What is the difference between client-side and server-side tracking?", "acceptedAnswer": {"@type": "Answer", "text": "Client-side tracking runs each platform's tag in the shopper's browser, and each tag sends data straight to its vendor. Server-side tracking sends one stream of events to a server you control, usually on your own subdomain, and the server forwards data to each platform. It gives you more control over the data and loses fewer events to blockers, at the cost of hosting and maintenance."}}]}</script>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><style> p.box { border: 1px solid black; padding-top: 30px; padding-right: 30px; padding-bottom: 30px; padding-left: 30px; } </style> <p class="box"><em>Not sure whether your gap is lost data or counting rules? </em><a href="https://scandiweb.com/contact" target="_blank" rel="noreferrer noopener"><em>Talk to our analytics team</em></a><em>, and we&#x27;ll compare your backend orders with what Meta and GA4 receive.</em></p></p>
<p>The post <a rel="nofollow" href="https://scandiweb.com/blog/server-side-tracking/">Server-Side Tracking and Meta Conversions API: Why Ad Platforms and GA4 Disagree</a> appeared first on <a rel="nofollow" href="https://scandiweb.com/blog">scandiweb</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Object Caching 38/259 objects using Redis
Page Caching using Disk: Enhanced 

Served from: scandiweb.com @ 2026-10-31 06:50:48 by W3 Total Cache
-->