Shop for 10,000+ products: catalog, site map, speed
A large catalog breaks not where it is poured, but where it is then read - by the buyer and the crawler. On July 31, 2026, we took indicators from live stores: 54,302 products and 635 categories give the first response in 413.8 ms; 55,321 product pages on another store — in 840.5 ms; 116,841 addresses — in 1,544.5 ms. The same engine, different cache, theme and number of modules. The job here is not to "make a shop", but to hold three things at the same time: an import that does not put the server, a sitemap without duplicates and a category page that is assembled faster than a second. The reference period is from 40 working days; the volume depends on how many addresses you actually have, and this is only visible after parsing the download.
54,302 products and 635 categories with a TTFB of 413.8 ms
after a free audit
Price
30
Guarantee
days after project sign-off
54,302
The largest catalog we measured
products and 635 categories with a TTFB of 413.8 ms
index of 32 files, 110,096 addresses in two languages
Site map of the same store
OpenCart search returned 54,501–54,600 items, 0.4% difference
Cross-validation of the directory
duplicate addresses: 33,493 records for 8,690 unique ones
What breaks most often
40–70
Guide
working days; estimate after analysis of export
Process steps
Transparent stages with approval at every step
Total duration:40–70 days
1
Catalog audit and measurement of the current state
4-6 working days
We count addresses in the site map, unique cards, duplicates, remove TTFB and HTML weight. This is the base with which we then compare the result in the act of acceptance.
2
TK and import scheme
4-6 working days
Mapping of price fields to OpenCart fields, category and attribute rules, update schedule. Here we decide what to do with items that are not available.
3
Catalog and filter prototype
4-7 working days
Category structure, set of characteristics for the filter, pagination behavior. We agree with the design: it is expensive to redo the filter after layout.
4
Design and layout
8-14 working days
Category page, product card, checkout. We fix the target weight of the page in the TK: in the sample, the spread of HTML on the same engine is from 103.2 to 751.2 KB.
5
Store build and integration
9-16 working days
Payment, delivery, analytics, feeds. In parallel, MySQL indexes and a cache for the actual volume of the directory.
6
Catalog import and duplicate cleaning
7-14 working days
Filling in batches with an error log, comparing the number using two methods, assembling the sitemap-index with submaps, canonical on duplicates.
7
Load check, transmission, start-up
4-7 working days
TTFB remeasurements and HTML weights, going through the import script with your manager, handing over accesses and instructions.
Technologies & integrations
What we build on and what it connects to
Stack
OpenCart 4.x is set by default
OpenCart 3.x — when you need a module that is not yet available under 4.x
PHP
MySQL
nginx
HTTP/2
Cloudflare
sitemap-index with submaps of 3,000 URLs
ocmod
NeoSeo modules
themes chameleon, revolution, UniShop
Integrations
LiqPay
monobank "Purchase in installments"
non-cash VAT settlement
installment plan online
Nova Poshta
Meest Express
Rozetka Delivery
Rozetka site
integration with 1C (balances and prices)
Google Tag Manager
GA4
Google Ads
Binotel
eSputnik
Google Sign-In
What's included
Complete list of work and what you get as a result
Audit of the current directory: how many real cards, how many addresses in the site map, how many of them are duplicates
Console price import in batches with an error log — without uploading through the admin
Mapping your CSV or XML fields to OpenCart fields: article, price, balance, category, attributes
Price and balance update schedule: Daily or hourly, depending on how fast inventory moves
Filter by characteristics with a cached count so that the counter next to the value is not recalculated on each click
Sitemap-index with submaps of 3,000 addresses: separate products, categories, information pages
Cleaning duplicates: one card — one canonical address, the rest are closed canonical
View MySQL indexes and category cache under the actual volume of the directory
TTFB measurements and HTML weights of the category page before and after, recorded in the acceptance certificate
Transfer: accesses, import instructions, going through the price update scenario with your manager
When this service isn't right
What's not included — so there are no surprises at delivery
Filling the cards with content: you prepare the descriptions, characteristics and photos
Copywriting of descriptions for thousands of items
Post-launch promotion and advertising
Hosting, domain, CDN payment
Data correction in the supplier's price: if the source is porridge, the import will transfer the porridge
Who it's for
Situations where this service delivers results
Scenario 1 of 4
Supplier price for 10-60 thousand items
The file arrives daily or hourly, and it must be filled so that the site remains alive. This is not done because of the admin: it falls after the timeout. Requires console batch import with error log, revised MySQL indexes and category cache for actual volume.
We'll review your situation in a free audit
Scenario 2 of 4
The store is already there, but the category takes a few seconds to assemble
The reason is almost always in three places: uncached product count in the filter, heavy theme and modules that load on every page. On the same OpenCart in our sample, the spread of the first response is from 126.3 ms to 1,544.5 ms. Speed is not cosmetic here: the longer the page takes, the greater the proportion of people go before seeing the product.
Scenario 3 of 4
Google does not see the entire directory
A standard OpenCart sitemap of this volume either gives an empty body or takes tens of seconds to assemble. In the pro tool store, we recorded 34.2 seconds to generate a map and an average of 3.9 addresses per item. The crawling budget is spent on duplicates, and part of the catalog does not reach the index at all.
Scenario 4 of 4
Two language versions on a large catalog
Each language doubles the number of addresses: 110,096 addresses in the equipment store are 54,302 items in two languages, plus categories and information pages. If only one branch is included in the sitemap, the second branch does not exist for searching. We found exactly this defect in three sample stores.
Big catalog: OpenCart vs. SaaS builder and self-written solution
How this option differs from the alternative
SaaS-designer / resumeOur approach
Position limitSaaS: rate limit. Self-writing: there is no limit, but the catalog, shopping cart and checkout are written from scratchlimited by hardware and cache, not platform: 54,302 items delivered in 413.8ms
Import priceSaaS: Through an interface or API with quotas. Self-writing: how to writeconsole, batch, scheduled, with error log
Site map for 50,000 addressesSaaS: platform generated, manage nothing. Autograph: written separatelyindex with submaps of 3,000 addresses
Entrance feeSaaS: lower start, subscription fee increases with catalog. Samopis: an order of magnitude more expensive startone-time work, then only hosting
Who fixes it when it's brokenSaaS: service support only. Self-writing: only the author of the codeany PHP developer: the code is open and documented
Contract, act and 30-day warranty
Every project gets a written contract: scope, deadlines, amount, acceptance procedure. After delivery — act and invoice, then 30 calendar days of warranty.
Sole proprietor & bank transfer
The contractor is a registered sole proprietor. Payment by invoice with closing documents.
Rights & access — yours
Code, design and materials transfer to you after full payment. Domain, hosting, repository and analytics are registered to you.
Client portal instead of email chains
During the project you get access to a portal: contracts, invoices, acts and project status in one place.
European clients
Among our work — projects for Norway, Bulgaria, Moldova and Spain.
Verifiable numbers
Every case in the portfolio comes with a link to a live site and a technical measurement.
Audit first, then pricing
There is no price list on the site intentionally: the scope of the same work differs multiples between clients.
We say "no" when unsure
If the task isn't ours or the deadline is unrealistic — we tell you upfront.
Did not find your case?
Describe how it works on your side — we will tell you whether “Online store with a large catalog on OpenCart” fits and what it means in your situation. No brief and no call: one question, one answer.
What affects the price
Why two seemingly identical tasks are priced differently
The actual volume of the catalogThe difference between 10,000 and 50,000 items is not a price multiplier, but a different import scheme: batches, separate indexes, category cache. So the first thing we do is count how many addresses you actually have using two independent methods.
Price statusA ready-made CSV with SKU, price, balance and attributes is a few days of mapping. The price, where all the characteristics are written in one field, has to be analyzed by a parser, and this is a separate line of the estimate.
Number of language versionsThe second language doubles the number of addresses and adds a separate branch to the sitemap. The multilingual module is a separate line of the estimate and takes about five business days.
Filter depthFilter by 5 characteristics and filter by 40 are different requests to the database. On a large catalog, the count of the number of items in each value has to be cached separately, otherwise each click on the filter reassembles the page.
Exchange with accounting systemOne-way price import is included in the work. Two-way exchange with 1C or BAS - a separate line of the estimate and about ten working days: this is the synchronization of balances and statuses of orders, not reading a file.
The state of the current store, if transferredEdits in the core, self-written modules and accumulated duplicate addresses increase the volume. We give an assessment after inspecting the files and the database: this is not visible from the admin's screenshot.
Cases
Tasks and results in numbers — all metrics measured by us
online store of tactical equipment, catalog of more than 50,000 items
Task
Maintain an extremely large assortment with detailed filtering by characteristics and do not lose the speed of rendering pages.
Solution
OpenCart 3 by Cloudflare, two language versions, sitemap as an index of 32 product files of 3,500 addresses.
Result
54,302 products and 635 categories, confirmed by two methods: sitemap index gives 110,096 addresses in two languages, cross-checking with OpenCart search — 54,501–54,600 items, discrepancy 0.4%. TTFB 413.8ms, full HTML load 511.1ms at 421.5KB. Nine types of JSON-LD. Measured on 07/31/2026.
garden equipment and spare parts store with deep nesting of categories
Task
Sell equipment and spare parts for it with filters by power and type of engine, nesting of categories up to four levels.
Solution
OpenCart 3.x, nginx, HTTP/2. Eight payment methods, four carriers. The site map is divided into submaps of 3,000 addresses.
Result
55,321 product pages (18 subcards with 3,000 addresses plus 1,321 in the nineteenth) and 3,868 categories — 59,189 addresses in total. At this volume, the first server response is 840.5 ms, the full HTML download is 997.4 ms at 454.5 KB. This is the slowest TTFB among measured stores with a catalog of over 50k items. Measured on 07/31/2026.
wholesale store of underwear, catalog of over 13,000 items
Task
Give selection by size and color inside the model and keep the site map clean in this volume.
Solution
OpenCart, dimensional grids and packing, wholesale prices by levels, eight calculation methods.
Result
13,590 addresses in the site map — 13,428 product pages, 161 categories and the main one — of which there is only one duplicate, 0.007%. TTFB 289 ms with a catalog of 13 thousand items. Defect found: the main HTML is 751.2 KB, the heaviest document in the sample, and the working site map is at a non-standard address. Measured on 07/31/2026.
online store of professional tools, catalog of over 6,000 items
Task
Sell tool simultaneously to retail craftsman and company with VAT, catalog with filters by type of tool.
Solution
OpenCart, two language versions, ten payment methods, four delivery methods.
Result
25,537 entries in the site map for 6,857 unique addresses — 6,486 product cards and 361 categories. That is, each product is indexed an average of 3.9 times under different category paths, and the map itself is assembled in 34.2 seconds. TTFB 671.2ms with 407.8KB HTML. Measured on 07/31/2026.
What we need from you
We can't start without this — best to prepare in advance
1Export the price in the form in which it comes from the supplier is what determines the volume of import work.
2Access to the current site and database, if the store already exists: without it, the number of address duplicates cannot be counted.
3The list of characteristics by which the buyer should filter, with priority — a filter for 40 fields and for 7 costs differently.
4Access to hosting: on such a directory it is important to see the real resources of the server before, and not after, the start.
5Access to Search Console, if the site is already indexed - to remove the basic figures for the works.
6One person with the right to make decisions on the structure of the directory.
If something is missing — let us know, we'll help you gather it or do it as a separate task.
FAQ
Most frequently asked questions — with concrete answers
How many products will OpenCart actually support?
We measured 54,302 products at a first response of 413.8 ms and 55,321 product pages at 840.5 ms. Both stores are alive and well. The limitation here is not in the number of rows in the database, but in the way the category page is assembled: how many requests it makes, whether the count is cached in the filter, how many modules hang on each download.
What version of OpenCart are you building a large catalog on?
Defaults to 4.x. The volume of the directory itself is almost independent of the kernel version: it is held by MySQL indexes, the category cache, and how the site map is divided. Our largest measurement — 54,302 items with a first server response of 413.8ms — was made on 3.x; we have not yet measured stores of this volume at 4.x, so we do not promise a figure for four. Another thing depends on the version — the modules: in 4.x, the event system was rewritten, and part of the Ukrainian assemblies (console import of prices, sitemap-index generators, uploading to platforms) so far only works under 3.x. Therefore, we compare the list of modules for your catalog on the brief: everything critical is under 4.x — we put 4.x; there is nothing yet - we discuss 3.x at the start, so as not to rely on it at the stage of integrations.
How much does it cost and why is the fork so wide?
The cost here is determined not by the number of items, but by the state of export — and that is why it is impossible to name the amount before analysis. The difference is that two different tasks are hidden inside. The first: one net price, one language, filter by seven characteristics is the lower limit. The second: several data sources with different formats, two languages, a deep filter and tens of thousands of accumulated duplicate addresses that need to be analyzed. You can see exactly where your project ends up after analyzing the download.
Why 40-70 business days and not sooner?
Half term is not design. 4-6 day audit and measurement, TK and import scheme 4-6, catalog and filter prototype 4-7, design and layout 8-14, assembly and integration 9-16, import and cleanup of duplicates 7-14, load check and transfer 4-7. The longest stages are build and import, and they are the ones that cannot be compressed: pouring batches with validation takes as long as it does.
How do you calculate how many items I actually have?
We compare the results using two independent methods. The first is the site map: we count the entries in each submap. The second is a regular OpenCart search with an empty query and a limit of 100 per page. In the gear shop, the first method gave 54,302 items, the second gave 54,501-54,600: a 0.4% difference, which is fine. If the methods differ many times, then there are duplicates in the site map, and this is already a separate line of work.
What's wrong with duplicate addresses and why does it cost money?
A duplicate is when the same card is available in multiple category paths and they all end up in the sitemap. We recorded 33,493 records for 8,690 unique addresses in the garden equipment store, 25,537 in 6,857 in the tool store, 3,971 in 590 in the spice store. The crawler spends the budget to look at the same thing, and part of the directory is left out of the index. Analysis of such addresses is a separate stage, and it is longer, the more history has accumulated.
Why does the sitemap take tens of seconds to generate and is this a problem?
Problem. The standard OpenCart generator collects the entire map in one request, and on a large catalog it takes 34.2 seconds - that's how long we recorded in the tool's store. The crawler doesn't wait that long. The solution is a sitemap index: separate submaps of 3,000 addresses for products, categories and information pages. This is how it was done in the equipment store: 32 files instead of one.
And if the catalog is updated every hour?
The import is then scheduled and runs in batches in the background, rather than a one-time download. It is important to separate two things: a full import with the creation of new cards and a quick update of only prices and balances. The second is performed many times faster and does not affect the rest of the fields. We fix the schedule for your frequency in the TOR at the stage of the import scheme.
Do you guarantee that the directory will be indexed?
No, and no honest person will make such a promise. The speed and completeness of scanning is determined by Google. Our zone is that there are no duplicates in the sitemap, that it is rendered quickly and with submaps, that the category page is assembled faster in a second, and that the canonicals are correct. This is something we can measure before and after and show with numbers in the act.
Send a price download - let's count how many addresses you actually have.
In response, the number of cards by two methods, an estimate of duplicates in the current site map, an import scheme and an estimate by stages with calendar dates.
From measured cases55,321 product pages (18 subcards with 3,000 addresses plus 1,321 in the nineteenth) and 3,868 categories
There is no price list on the site on purpose: the same work differs several times over between two clients, and a “from” figure explains nothing in that case. First a free audit — we count your pages, duplicates and speed — then we name the sum and the deadline and fix both in the contract.