
Google Analytics Website Traffic: Why the Numbers Never Match
Google Analytics website traffic is a consented sample, not a head count. See where visits come from, why tools disagree and which number to trust each month.
From F&B to fintech, clinics to law firms, startups to enterprise. If your customers search on Google, we make sure they find you first, not your competitors.
One specialist team, focused only on the organic rankings that put you in front of ready-to-buy Singapore customers.
A clear, sequenced path from audit to rankings. You always know what we’re doing and why it matters for your leads.

Quick answer: This ecommerce seo guide is an execution manual rather than a plan. It runs in order: instrument your measurement, crawl the store, inventory every URL pattern, deploy facet and canonical rules in the correct sequence, rebuild the category layer, change templates before pages, then maintain it on a fixed routine.
Most writing on this subject stops at the point where the work starts. You are told that faceted navigation needs controlling, that categories carry the demand and that product descriptions should be differentiated, and then you are left at your desk on Monday morning with a store, a spreadsheet and no idea which button to press first. This ecommerce seo guide assumes the thinking is already done and shows the doing. It is written for a competent in-house marketer with admin access, a modest tool budget and no engineering background, and every step below is something you can complete yourself or brief in a sentence. The sequence matters, because several of these steps produce the input for the next one and two of them will actively damage the store if run in the wrong order. Where the work crosses into code, it says so and tells you what to ask for. If you want the commercial framing rather than the procedure, our e-commerce SEO page covers that side.
Do this in week one and never again. Without both of these you cannot tell later whether anything you did worked, and retrofitting them destroys your baseline.
Instrument one: organic revenue by landing page. In your analytics property, open the landing page report, apply a comparison or filter for the organic search channel, and add revenue and transactions as metrics alongside sessions. Export it as a dated file and save it. Do this on the first working day of every month from now on, into the same folder, named by month. That folder is the only honest record of whether this programme earned anything, and thirty seconds a month builds it.
A local detail that catches out most Singapore stores: a meaningful share of orders on smaller catalogues never touch the online checkout. They arrive as a WhatsApp enquiry, a phone call, or a PayNow transfer after a conversation. If that describes you, add a second instrument now: a source-captured enquiry log, even a manual one, recording which page the enquiry came from. Categories that generate enquiries rather than checkouts will otherwise look unprofitable and get defunded.
Instrument two: a verified domain property in Search Console. Not a URL-prefix property. A domain property, verified with a DNS record, so that every subdomain and protocol variant reports into one place. Then submit your sitemap index file, and open the page indexing report. Screenshot it. That screenshot is your before picture.
Set three alerts while you are in there. Most stores run blind between monthly reports, and the failures that matter on a catalogue are silent. At minimum you want to know when indexed page counts move sharply, when structured data errors appear, and when a scheduled crawl finds a change. If your tooling cannot alert, put a fortnightly 20 minute block in your calendar instead and treat it as non-negotiable.
Almost every in-house crawl is run on default settings, and default settings hide the exact problem you are looking for. Five settings decide whether this crawl is useful.
Crawl query strings and URL parameters. Many crawlers ignore parameterised URLs unless told otherwise. On a store, parameterised URLs are the subject of the investigation.
Ignore robots.txt for this one diagnostic run only. You want to see what exists, including the patterns somebody has blocked. A blocked URL that is already indexed is a specific and common problem, and you cannot see it in a compliant crawl. Switch this back on afterwards.
Exclude cart, checkout and account paths so you are not crawling session-generated rubbish, and so nothing odd happens to your analytics.
Run it twice, once with JavaScript rendering off and once on. Then compare the URL counts and the internal link counts. If the rendered crawl finds substantially more links than the raw one, your listings or pagination depend on scripts to be discoverable, and that is the single most important finding on the page.
Set a crawl limit you can afford. A 100,000 URL crawl on a laptop will take a day and tell you nothing the first 20,000 did not.
In our experience the dated crawl is the most valuable file an in-house marketer ever creates. Save the export with the date in the filename. You will compare against it after every significant release for the rest of the store’s life, and a dated crawl from before a change is worth more than any report. When we take over a catalogue, the first thing we ask for is an old crawl, and the accounts that have one are noticeably cheaper to fix.
Open the crawl export in a spreadsheet and build a working inventory. This file is the spine of everything that follows, so spend the hour.
Keep these columns and delete the rest: URL, status code, indexability and its reason, canonical target, title, H1, word count, number of internal links pointing in, crawl depth, and whether the URL contains a question mark.
Add a template column. Derive it from the URL rather than typing it. Extract the first path segment into a helper column, and flag parameterised URLs separately. You should end up with a dozen or so values: home, category, subcategory, product, variant, filtered, sorted, paginated, search results, tag or attribute archive, editorial, and legacy. Every row must land in exactly one bucket. Rows that refuse to fit are usually the most interesting rows on the sheet.
Add a self-canonical flag. A simple comparison of the URL against its canonical target, returning true or false. Sort by false and read what comes up.
Now build the pivot. Count of URLs by template, split by indexable and non-indexable. This single pivot table is the diagnostic that the rest of the quarter is built on, and it takes four minutes once the template column exists.
Then calculate the ratio. Total crawlable URLs divided by the number of sellable items in your admin. Under 3 to 1 is healthy on most builds. Between 3 and 10 to 1 deserves an explanation you can actually give. Above 10 to 1 means your filter and archive space is generating the majority of your store and you have found this quarter’s priority. On the Singapore catalogues we have crawled, the median sits far above the healthy range, which is why this number is the first thing worth checking.
A crawl tells you what exists. It does not tell you what earns. The join between the two is where in-house marketers gain the most and where most of them stop, usually because of a formatting problem that takes ten minutes to solve.
Export the Search Console pages report for the last 12 months, and your organic landing page revenue export from Step Zero.
Normalise the URLs in all three files before joining. This is the part that fails. Search Console returns absolute URLs, your analytics often returns paths only, and your crawler may return either. Build a helper column in each file that strips the protocol and domain, lower-cases the result and removes any trailing slash. Join on that column, not on the raw URL.
Use an exact-match lookup, and leave the misses visible rather than hiding them behind an error handler. The misses are informative. A page with impressions that does not appear in the crawl is orphaned. A page in the crawl with no impressions in twelve months is a candidate for merging or removal.
You now have one sheet where every URL has a template, an indexability state, a click and impression history and a revenue figure. Sort it by revenue, descending, and read the top 50 rows. Most store owners have never seen this list. It tells you which categories carry the business, and it is almost never the list people expect, because the most visited range is frequently the price-shopped commodity one.
Then sort by impressions with zero clicks. That block is usually filter URLs competing with the categories they were generated from, which is the clearest possible evidence for the work in the next two steps. Our e-commerce SEO results case study shows what that block can hide: faceted navigation URLs had created thousands of duplicate pages and only 34% of product pages were indexed. The check itself is doable in a spreadsheet.
You are not deciding policy from first principles here. The demand-tested logic for which facets earn a page belongs to your plan. What this step produces is the operational document: one row per template, four columns, agreed and dated.
Column one, crawl. Allowed or disallowed, and where the instruction lives.
Column two, canonical. Self-referencing, to a parent, or to a specified target.
Column three, internal linking. Whether your own navigation, breadcrumbs, related-product modules and sitemap links are permitted to point at this pattern. This column is skipped by almost everyone and it is why rules stop working.
Column four, sitemap. Included or excluded.
Fill it in for every value in your template column, including the legacy patterns left by a previous build. Then add a fifth column for your own use: who enforces this row, and is it a setting or a code change on your build. On a hosted platform most rows are theme or admin settings. On a self-hosted store most are plugin or server settings. On a custom build most are tickets, and that difference is your real timeline rather than your ambition. Where enforcement turns out to be code, this is the point at which a store needs technical SEO capacity rather than marketing capacity, and knowing that in week three is much cheaper than discovering it in month four.
This is the step that can damage the store, and the damage comes entirely from sequence. Two rules.
Never block a URL pattern in robots before it has been removed from the index. A blocked URL cannot be crawled, so the removal instruction on it can never be seen, and the address sits in the index indefinitely with no way for you to clean it up. Apply the noindex or the canonical first, wait for the pattern to drain out of the coverage report, then block crawling. On a large pattern this takes several weeks and it is worth the wait.
Remove the internal links before or alongside the rule. If your faceted navigation, breadcrumbs or footer keep linking to URLs you have disowned, you are giving contradictory instructions and spending link equity on addresses you do not want.
Then verify, because platforms lie. We have seen every one of these four checks catch a rule that the admin panel insisted was already live. Four checks, none of which take more than a minute.
Use the URL inspection tool on a live URL from each pattern and read the rendered output rather than the source, since a canonical injected by an app or a script will only appear there. Request a status code directly for a removed product URL and confirm it returns what you intended rather than a 200 with an empty page. Open the live robots file in a browser after any deployment, because caching layers and plugins overwrite it more often than anyone expects. Finally, re-run your crawl seven days later and compare the pivot from Step Two against the new one.
Log every change with a date. One line per change in a running document: what changed, which templates it affected, who deployed it, and the date. This costs nothing and it is the document that will explain next quarter’s numbers to you when nothing else does.
Now the leaking has stopped, spend your hours on the pages that carry the demand. Work down the revenue-sorted list from Step Three and treat each category as a single unit of work with a fixed routine. Budget three to six hours per category and do not skip the last step.
Fifteen minutes: decide whether the page survives. Check the product count. A category holding six items on a store with 900 products is a filter pretending to be a page, and merging it into its parent is the correct and unpopular answer.
Thirty minutes: check the query shape. What does a shopper searching this type actually ask for, and are the qualified variants big enough to deserve their own pages or small enough to remain filters.
Forty-five minutes: write what goes above the grid. Two or three short paragraphs stating what the category covers, who it suits and how to choose between the options. Above the grid, not below it. The widely repeated advice to bury 800 words under the product listing is one we would argue against every time, because almost nobody reads it and it is transparently there for a machine.
Twenty minutes: fix the title and heading. The type term as a human would phrase it, front-loaded, with the modifier that matches real demand rather than the internal merchandising name.
Thirty minutes: sort the merchandising. Default sort order, how many products appear before pagination, and whether out-of-stock items are pushed down. This is a conversion decision with a search consequence, because a listing whose first screen is full of unavailable items earns fewer clicks from the results page over time.
Sixty minutes: rebuild the links. Links in from the parent category, from sibling categories where genuinely related, from any guide covering the topic, and out to the subcategories that survived. Then check the breadcrumb renders correctly and its markup validates.
Ten minutes: record it. Date, category, what changed, and the baseline entrance figure. In twelve weeks this is how you will know whether the routine works.
Where a store also has physical outlets, run the same pass against the locations layer separately rather than folding it in, since the ranking factors barely overlap and the work is faster. We scope local SEO for Singapore businesses alongside catalogue work rather than inside it for that reason.
The economics of a catalogue reward this order absolutely. One template edit reaches 3,000 pages in an afternoon. Hand-editing 3,000 pages is a project you will not finish.
Fix the title pattern first. Product name, then the attribute that people actually search, then the brand, then your store name if it fits. Look at your zero-click impression list from Step Three before choosing the pattern, because it tells you which qualifiers real shoppers type.
Make the attribute block do the work the description is not doing. Dimensions, material, compatibility, voltage and plug type, warranty term, local delivery window. These are structured fields, they render on every product, and they answer the questions that actually precede a purchase here.
Check the structured data field by field against the rendered page. Price, currency declared as SGD, availability, condition, identifiers, brand, and review data only where reviews are genuinely collected. The mismatch between displayed and declared price is the most frequent cause of lost rich results we see on local stores, and it almost always appears after a promotion or currency feature is added post-launch.
Set the image alt pattern at template level from the product name plus its key attribute, rather than leaving 3,000 empty alt attributes or filling them by hand.
Only then write products individually, in strict revenue order, 10 to 30 a month, with genuine specifics: what it fits, what it does not fit, what the local warranty actually covers, why you would choose it over the next one up. Everything below that tier stays on the template.
Set the stock rules while you are in the template. Temporarily out of stock keeps the page, keeps it indexable and states the restock expectation. Discontinued with a successor redirects to the successor. Discontinued with nothing comparable redirects to the parent category, or returns a genuine not-found if the category has gone too. Seasonal ranges keep their URLs all year and change their copy. Set these once as rules rather than deciding case by case, because case by case means whoever is on duty decides, and they will delete the page.
Content on a store has one job: earn the queries a marketplace listing cannot serve. Everything else is optional.
Write the brief, not just the article. A workable brief is half a page: the query cluster, the decision the reader is trying to make, the three questions the article must answer, the categories it must link to, and the one thing it must not do. Without the linking instruction, guides float free of the catalogue and earn nothing commercially.
Pick topics from your own returns, enquiries and support inbox before you open a keyword tool. Sizing confusion, compatibility questions, voltage and plug queries, care and servicing, what to buy for a first apartment, what a warranty covers locally. These are the questions your buyers actually ask, and they map onto queries a marketplace listing structurally cannot answer.
Four a month is plenty, and two is fine if they are good. Volume is the wrong dial here. Each guide should link into at least two categories and one product tier item, and each of those categories should link back to the guide from above the grid.
Publish on your own domain in a structure that survives, and resist the urge to spin up a separate content subdomain, which fragments the very authority you are trying to build.
Catalogue work decays. Themes update, apps get installed, someone adds a filter, a supplier feed changes a field. A fixed routine is what separates a store that holds its gains from one that repeats this whole process in two years.
| Cadence | Task | Time | What you are looking for |
|---|---|---|---|
| Weekly | Skim index coverage and structured data reports | 15 minutes | Sudden movement in indexed counts, new error types |
| Weekly | Check the top 10 revenue categories still return 200 and are indexable | 10 minutes | Silent theme or plugin damage |
| Monthly | Export organic revenue by landing page into the dated folder | 5 minutes | The only honest record of progress |
| Monthly | Run the crawl, rebuild the pivot, compare against last month | 60 minutes | New URL patterns, ratio drift, canonical changes |
| Monthly | Rebuild two to six categories using the Step Six routine | 6 to 30 hours | Steady progress down the revenue list |
| Monthly | Write 10 to 30 tier products and 2 to 4 guides | Varies | Differentiation where it pays |
| Quarterly | Re-check the pattern table row by row against live behaviour | 3 hours | Rules that have quietly stopped being enforced |
| Quarterly | Compare the tracked set and revenue by landing page year on year | 2 hours | Whether the programme is compounding |
| After every release | Crawl a 500 URL sample and diff against the last crawl | 20 minutes | The cheapest insurance available |
The after-every-release line is the one people drop and the one that costs most. Theme and plugin updates break category indexability more often than anything else on a store, and the gap between the break and the discovery is usually a full reporting cycle.
Resist the urge to start with rankings. Work from the mechanical to the strategic, because the mechanical causes are common, fast to check and fast to fix.
One: did anything deploy? Check your change log and the platform’s own update history for the two weeks before the drop. Most unexplained declines on a store are explained here.
Two: is the page still reachable and indexable? Status code, robots directive, meta robots tag, canonical target, and whether it still appears in the sitemap.
Three: did the template change? One edit can alter thousands of pages, so check a sample across the template rather than the single page that prompted the question.
Four: did the URL space change? Compare crawl pivots. A sudden rise in parameterised URLs means a new filter, a new app or a reverted rule.
Five: did stock or merchandising change? A category whose first screen is now mostly unavailable items behaves differently, and a discontinued bestseller takes its page’s history with it if somebody deleted rather than redirected.
Six: is it demand rather than you? Compare against the same period last year and against your paid search impressions for the same terms. Singapore retail is sharply seasonal and a quiet fortnight after a sale period is not a technical problem.
Seven: only now, look at the results page itself. Who moved into the positions you lost, and is it a marketplace, which changes what a sensible response looks like.
You need far less than the vendor pages suggest. This is a workable kit for an in-house marketer on a mid-sized catalogue.
| Tool type | Why you need it | Rough SGD cost | Can you skip it |
|---|---|---|---|
| Search Console and your analytics platform | Coverage, queries, revenue by landing page | Free | No |
| Desktop crawler with parameter and rendering support | Every step from Two to Five and the monthly diff | Roughly 300 to 400 a year | No |
| Spreadsheet software | The inventory, the joins, the pivots | Already paid for | No |
| Keyword and competitor research suite | Demand sizing and monitoring | Roughly 150 to 350 a month | Yes, at first |
| Rank tracker with a frozen set | Trend on a fixed list | Roughly 30 to 120 a month | Yes, if the suite covers it |
| Structured data validator | Verifying markup against the rendered page | Free | No |
| Log file access or analysis | Crawl behaviour on catalogues above 20,000 URLs | Varies by host | Yes, under 20,000 URLs |
Buy the crawler first and the research suite last. Conventional wisdom in this market sends in-house marketers to a keyword tool on day one, and on a catalogue that is close to backwards. Your first three months of work are determined by what your own store is doing, not by what people are searching, and the crawler is the only tool that shows you that. Where a business wants an outside read before committing to tooling and hours, that is what a standalone SEO audit and consulting engagement is for.
Resist buying tools to feel productive. The kit above covers a catalogue of several thousand products comfortably, and the marginal value of a fourth subscription is close to zero next to four protected hours a week. Our pricing page shows where tooling sits relative to the cost of the hours themselves, which is the comparison that actually decides what an in-house programme can cover.
Field notes: In our ecommerce case study, the steps produced results in the same order as this walkthrough. Months 1 to 2 covered the foundations: robots.txt rules for 14 faceted navigation parameter combinations, a clean XML sitemap and more than 200 redirect chains resolved, which moved product indexation from 34% to 79%. The category step took longer, as it does for most teams: 15 top-revenue categories were rewritten as content-first landing pages over Months 3 to 5, each with a selection guide, buying criteria and a FAQ section. Revenue came last, with organic revenue climbing from S$12,400 to S$28,600 a month in Months 6 to 9. If you are running this in-house, the category step is the one to protect with fixed time in the calendar, because it is the step that competes hardest with campaign work and the one revenue depends on.
An ecommerce seo guide is only worth anything if you can act on it before the enthusiasm wears off. The order in this one exists because each step produces the input the next one needs: the crawl produces the inventory, the inventory produces the pattern table, the pattern table produces the deployment list, and the joined revenue data decides which category you rebuild first.
We recommend running the steps in the order given even when a later step looks more urgent, because skipping ahead usually means redoing the pattern table once the crawl finally gets done properly. Our team has watched the deployment list stall more often from a skipped inventory step than from any technical difficulty in the fixes themselves.
If you do only three things from this page, run the crawl with parameters and rendering configured properly, build the joined sheet so every URL carries a template and a revenue figure, and protect four hours a week for the category routine. Those three account for most of the outcome, and none of them require a budget approval.
The contrarian point worth holding is that the visible half of this work is the half that matters least. Publishing is satisfying, measurable and easy to show in a meeting. The inventory, the pattern table and the change log are dull, invisible and they are what makes the publishing worth anything. Stores that do the dull parts first get to the interesting parts faster. If your catalogue turns out to need more hours than an internal week contains, that is a resourcing conversation rather than a failure, and our e-commerce SEO services in Singapore page sets out what the split usually looks like.
Steps Zero to Five take about four to six weeks alongside a normal workload, and they front-load almost all of the technical benefit. Step Six onwards is continuous and paced by how many hours a week you can protect. A realistic first year covers instrumentation, a full URL inventory, deployed pattern rules, 30 to 60 rebuilt categories, a product tier of 150 to 300 items and 30 to 40 guides. Compressing that further usually means dropping the maintenance routine, which undoes the earlier work.
Partly. Search Console, your analytics platform and a structured data validator cover measurement and verification at no cost, and the free tier of most desktop crawlers handles a few hundred URLs. What you cannot do free is crawl a catalogue of several thousand URLs with parameters and rendering enabled, which is the step everything else depends on. Budget roughly SGD 300 to SGD 400 a year for a crawler licence and treat it as the one non-optional line.
Instrumentation first, then the crawl and inventory, then the one or two URL patterns generating the most waste, then the five categories carrying the most revenue. In a constrained month, rebuilding one category properly beats touching ten superficially, and running the crawl beats both if you have not run one in a quarter. Skip the guide layer entirely until the category layer is underway, since guides that link into unstable categories have to be redone.
It depends entirely on your build. On a hosted platform most of Steps Four to Seven are theme or admin settings you can make yourself. On a self-hosted store, robots, canonicals and parameter rules are plugin or server settings, with caching as the main complication. On a custom or headless build, most rows in your pattern table become tickets, and your job shifts to writing specifications a developer will accept, with acceptance criteria, example URLs, expected status codes and a test.
Watch indexation coverage by template and crawl allocation first, because they respond fastest, typically inside six to ten weeks. Non-branded entrances to category pages follow at three to four months. Revenue by landing page comes after that. Judging the first quarter on revenue is judging the wrong horizon and it pushes you into abandoning correct work early, which is the most common way in-house programmes fail.
Blocking URL patterns in robots before removing them from the index. It feels decisive, it is the advice most commonly given in forums, and it leaves the addresses stranded in the index with no way for the removal instruction to be seen. The correct order is noindex or canonical first, wait for the pattern to drain, then block crawling, and remove the internal links pointing at the pattern at the same time.
Not on a catalogue. Your first three months are determined by what your store is already doing: how many URLs it exposes, which of them earn, and which of your revenue categories are indexable. Research becomes essential at the point where you are deciding which qualified variants deserve their own subcategory pages, which is Step Six. Buying a research suite in week one and a crawler in month four is the wrong way round and it is a very common sequence.
Treat the marketplace share as a constraint on where your own domain should compete rather than a problem to be fixed. Your product pages carry the same supplier text as a far stronger domain, so put the original effort into category pages and the guide layer covering what a listing cannot carry: compatibility, local sizing, warranty terms, servicing and bundles. Keep your own structured data and SGD pricing accurate regardless, because that is what earns the rich results on the queries you do win.
Monthly as a routine, plus a 500 URL sample crawl after every theme, plugin or app change. The monthly crawl exists so you can rebuild the pivot and compare template counts against last month, which is how new URL patterns get caught in weeks rather than quarters. The post-release sample takes 20 minutes and catches the most common cause of sudden category losses, which is an update quietly changing indexability.
Three triggers. A replatform or major template rebuild, because the risk is concentrated and the window is short. A catalogue above roughly 5,000 SKUs, where the category rebuild queue exceeds what one person can clear in a year. And any point at which your pattern table says code where you expected settings, because the work then depends on a developer queue rather than on your own calendar. Outside of those, this routine is genuinely executable in-house, and the B2B version of it is covered in our B2B e-commerce results write-up.
If you want to check your own working before committing a quarter to it, we will run a free initial review of your store and send back the URL pattern table we would write for it, with the rows we would deploy first. Compare it against your own inventory and keep the findings either way. Get in touch with your store URL, product count and platform, and tell us which step you have reached, because the advice changes completely depending on whether the inventory exists yet.
Natalie leads SEO strategy at Singapore SEO Agency, helping local and regional businesses build organic search programmes that drive qualified leads. She specialises in technical SEO and content-led authority building for Singapore SMEs.
Get a free SEO audit for your Singapore website — we'll show you exactly where you stand, what's holding you back, and what it would take to rank on page 1.
Get Your Free SEO Audit →
Google Analytics website traffic is a consented sample, not a head count. See where visits come from, why tools disagree and which number to trust each month.

Google analytics consulting services for Singapore SMEs: what consultants do, indicative SGD costs, deliverables to demand and red flags. Buy the right scope.

Bounce rate in GA4 is not the old Universal Analytics number. Learn what it measures now, why old benchmarks fail and how to judge each page by its job.

Yoast SEO helps most when its site-wide settings are right. See which settings to choose, what the traffic lights really mean and the mistakes to avoid.

Which free keyword research tool should a Singapore clinic, firm, contractor or tutor use? Combine five free tools to find your first 30-50 keywords. See how.

SEO vs SEM is usually the wrong question. Learn what the terms really mean and how to use ads and Search Console data to decide which searches to earn or buy.
Fast, no obligation. We reply within 24 hrs.
Singapore’s specialist SEO agency for SMEs. We rank your business on Google — and only Google. No distractions, just results.
© 2026 Singapore SEO Agency. All rights reserved.