Growth Strategy
Why Is My Online Store Getting Traffic but No Sales?
Find where shoppers drop off, check your funnel data and choose the next conversion test—with a worked example and free ecommerce calculator.
Your online store has visitors, but sales are disappointing. It is tempting to buy more traffic, rewrite every product page or install another conversion app. Those moves can be expensive when the actual problem is narrower: the wrong visitors, an unclear delivery promise, a payment defect—or a report that does not mean what you think it means.
This guide gives ecommerce founders, consumer brands and growth teams a repeatable way to decide what to investigate first. It combines a trustworthy funnel, direct customer-task evidence and a small scenario model. The aim is a defensible next experiment, not a universal conversion benchmark. All numbers below are synthetic. They are not Akshay's client results or a prediction for your store.
The short answer
- Validate the funnel before interpreting the drop-offs. Users, sessions, events and orders are different units.
- Investigate the transition where customers struggle, but do not assume every departure is a design failure.
- Model one improvement at a time. A hypothetical recovery rate is not measured lift.
- Prioritize reproducible friction, economics and testability together—not the largest opportunity number alone.
Use the conversion diagnosis checklist to organize the evidence, the ecommerce funnel calculator for the arithmetic and the conversion analysis prompt to challenge your assumptions.
Why traffic can grow without sales
A visit is an opportunity to learn or buy, not a promise to purchase. A broad informational campaign may attract people who are researching. A returning customer may open an order-status page. A visitor may discover that a product cannot ship to their location. Even a perfectly functioning checkout cannot convert every one of those visits into a sensible purchase.
Shopify's August 22, 2026 conversion guide discusses diagnosing low sales through conversion metrics and friction. That is a current qualitative reason to revisit this operating problem, not evidence of keyword volume or a new platform release. We do not reuse its benchmarks as targets. Your product, price, audience and observation window determine what comparisons are meaningful. Source: Shopify's ecommerce conversion guide.
Before blaming the interface, list recent changes in acquisition, product availability, pricing, delivery coverage and tracking. If a campaign suddenly attracts another country, a falling aggregate conversion rate may reflect audience composition. If purchases disappear only after a tracking release, a measurement defect is plausible. Keep these competing explanations visible rather than turning an attractive redesign into the default answer.
Build a funnel whose numbers can be subtracted
Start with four steps: entered the relevant journey, added to cart, started checkout and completed purchase. Record the exact event or condition behind each label. A button click is not always a successful cart addition. A checkout page load is not the same as user input. A payment attempt is not a completed purchase. Use backend evidence to investigate missing or duplicate success signals.
Choose one counting unit. A session-based funnel counts a session once at each qualifying step; a user-based funnel counts a user according to its identity and sequence policy. Neither is a raw count of events. A session can contain several purchase events, and a user can return in several sessions. If you call converting sessions orders, your revenue arithmetic can silently become wrong.
Shopify's behavior documentation distinguishes an open funnel, which admits sessions at different points, from a closed sequential funnel. It also explains that some displayed rates use all sessions as their denominator. The conditional checkout completion rate used here instead divides purchasing units by checkout units. Both can be useful, but they answer different questions. Source: Shopify behavior reports, checked October 17, 2026; publication date unknown.
GA4 funnel exploration counts users completing a specified sequence and documents first-sequence behavior, direct versus indirect progression and optional time limits. A GA4 user funnel is therefore not automatically comparable with Shopify session totals. Record those settings before exporting. A device breakdown can also reflect the first applicable device rather than a wholly separate single-device journey. Source: GA4 funnel exploration, checked October 17, 2026; publication date unknown.
For the calculator, use a closed cohort in which every later count is a subset of the earlier step completed in order. Entry must be at least cart, cart at least checkout, and checkout at least purchase. That ordering is necessary, not sufficient: four unrelated totals can happen to be descending. Keep the export definition with the numbers. Document dates, timezone, consent population, internal-traffic exclusions and the observation window.
Read adjacent losses without inventing a cause
Suppose a completed reporting period contains 10,000 entry sessions, 1,000 cart sessions, 600 checkout sessions and 300 purchasing sessions. Entry-to-purchase conversion is 3%. Conditional transition rates are 10%, 60% and 50%. Adjacent losses are 9,000, 400 and 300. These differences describe where units stop qualifying within the selected sequence and window.
They do not tell you that 9,000 people hated the product page. Some sessions were never shopping sessions. Others may have bought later, used an express route excluded by your definition, or withheld analytics consent. Investigate whether your funnel intentionally excludes accelerated checkout and whether an alternative path deserves its own report. Do not silently change the definition until the numbers look better.
Inspect mobile and desktop separately, followed by meaningful channel or market groups. Avoid slicing until every cell contains only a few observations. The purpose is to identify a reproducible task problem, not manufacture a dramatic percentage. If the entire decline occurs in one newly acquired audience, changing checkout for everybody may be a poorly targeted response.
Connect a number to a customer task
Choose the relevant transition and perform the task on a narrow screen. Can someone understand the product variant, total delivered cost and arrival expectation before committing? Does the keyboard cover an error message? Does an address failure explain what needs correcting? Is the primary action still visible after a validation error? Test without placing a real order or exposing payment information.
Combine this with consented, privacy-masked session evidence or moderated tasks. Record the device, exact obstacle, observed result and date. Do not turn a single replay into a prevalence estimate or interpret a cursor movement as a stated motivation. Customer statements, backend errors and repeatable interaction defects have different evidential strengths; retain the distinction.
Consider a synthetic observation: delivery charges appear only after checkout begins. A reasonable hypothesis is that earlier cost clarity reduces surprise. An equally important alternative is that early disclosure simply moves abandonment earlier without increasing purchases. That is why checkout starts alone are a weak success metric for this change. Measure purchases and contribution for the eligible audience.
Estimate the opportunity without calling it lost revenue
Use a deliberately explicit assumption: what if a change helped 10% of the current drop-offs advance to the next step? This does not mean adding ten percentage points to a conversion rate. It means recovering one tenth of the units that currently fail that transition. No evidence establishes that 10% is achievable; rerun smaller and larger assumptions as sensitivity cases.
For a transition with entered count E and advanced count A, recovered advances equal (E−A)×r. If P is current purchasing units and A is positive, current downstream completion equals P÷A. Extra purchasing units in this one-change scenario equal (E−A)×r×P÷A. Multiplying by contribution per converting unit gives a scenario contribution before implementation costs.
For the first transition, 9,000 drop-offs times 10% yields 900 extra cart sessions. At the observed 300÷1,000 downstream completion, that becomes 270 extra purchasing sessions. At 30 currency units of contribution each, the scenario is 8,100. For cart-to-checkout, 400×10%×300÷600 gives 20 extra purchasing sessions, worth 600. For checkout-to-purchase, 300×10% gives 30, worth 900.
These are three separate alternatives, not three components of one business case. Do not add 8,100, 600 and 900. Improving an earlier transition changes who reaches subsequent steps; newly recovered people may have lower intent, different baskets or different refund behavior. Keeping downstream behavior constant is a simplifying assumption, not a proven property of customers.
Contribution should use the same unit as the funnel. If one converting session can contain several orders, use contribution per converting session or rebuild the model explicitly. Deduct relevant variable costs and apply a documented returns allowance. Compare implementation cost over the same horizon. Do not multiply one month's hypothetical contribution by twelve and present an annual forecast without modeling seasonality and persistence.
A small reproducible calculation
The JavaScript below runs locally in Node.js or a browser console with synthetic numbers. Recovery is a fraction from zero to one here; the website tool accepts a percentage from zero to 100. The production tool additionally validates input formatting and decimal precision, clears stale results after edits, and exports the assumptions with the result.
function funnelScenario(counts, recovery, contribution) {
if (!Array.isArray(counts) || counts.length !== 4 ||
counts.some((n,i) => !Number.isSafeInteger(n) || n < 0 ||
n > 100000000 || (i > 0 && n > counts[i-1])) ||
!Number.isFinite(recovery) || recovery < 0 || recovery > 1 ||
!Number.isFinite(contribution) || contribution < 0 ||
contribution > 1000000) throw new Error("Invalid closed funnel");
return counts.slice(0,-1).map((entered,i) => {
const advanced = counts[i+1];
const dropped = entered - advanced;
const extraAdvanced = dropped * recovery;
const downstream = advanced === 0 ? null : counts[3] / advanced;
const extraPurchases = extraAdvanced === 0 ? 0 :
downstream === null ? null : extraAdvanced * downstream;
return { dropped, extraAdvanced, extraPurchases,
extraContribution: extraPurchases === null ? null :
extraPurchases * contribution };
});
}
const example = funnelScenario([10000,1000,600,300], 0.1, 30);
// extraContribution: [8100, 600, 900], separately, never summed.A zero denominator is not a zero opportunity. If nobody has advanced beyond a step, there is no observed downstream completion rate to carry forward. The implementation returns null for a positive-recovery scenario that cannot be estimated. If the recovery assumption is zero, extra contribution is zero regardless. Do not replace missing rates with an industry average without visibly introducing and testing a separate assumption.
Validate the model using known examples, all-zero counts, equal counts, a zero downstream denominator and descending-order violations. Increasing contribution should scale contribution outputs but must not change purchasing-unit estimates. Increasing the recovery assumption should scale a defined scenario linearly. Multiplying every cohort count by the same factor should preserve rates and scale volumes. These checks catch percentage, denominator and unit mistakes that a screenshot cannot.
Choose one intervention and an evidence plan
The largest scenario is not automatically the best project. A broad product-page rewrite might have uncertain reach and a high implementation cost. A reproducible checkout defect may have a smaller arithmetic opportunity but a clearer mechanism and a faster remedy. Rank observed evidence, plausible reach, implementation cost, accessibility and operational risk alongside the sensitivity calculation.
Write a one-sentence mechanism: “Showing delivery cost before checkout may reduce cost surprise for eligible mobile shoppers.” Define the audience before launch. Specify the primary purchase outcome, contribution and error guardrails, assignment unit and observation window. Ask an analyst to plan sample size and duration using an appropriate experiment method. This calculator does not perform power analysis, significance testing or causal estimation.
Separate measurement repairs from behavioral experiments. Fixing duplicate purchase events may reduce reported conversion while improving the quality of your decisions. Record the release and validate event delivery before comparing periods. If traffic is insufficient for a useful controlled test, use direct defect evidence and smaller reversible changes, while honestly retaining uncertainty about incremental sales.
What the team should do next
The analyst owns the funnel contract and reconciliation. Product or engineering owns the proposed change and regression checks. The growth lead owns audience selection and the experiment decision. Finance validates the contribution boundary. Agree a review date, a response to severe errors and what evidence is required before a broader rollout. A worksheet without ownership will not improve a customer journey.
Start with the checklist, calculate the three separate scenarios, then ask the companion prompt to identify unsupported assumptions. Its answer is a review aid, not an approval. Keep customer identifiers out of prompts and exports. Do not allow an assistant to modify live checkout or spend budgets merely because the scenario is positive.
The useful outcome is not a prettier funnel chart. It is one well-defined customer problem, one proportionate next action and a way to learn whether that action helped. Better measurement and clearer interactions can improve decisions immediately; more sales still depend on audience fit, offer quality, execution and evidence from real customers.