OPENCART SEO AUDIT · SEO URLS · PRODUCT SCHEMA · DUPLICATE CONTENT

Free OpenCart SEO Audit

OpenCart SEO depends on SEO URL rewrite configuration, per-product keyword field completeness, canonical management for parameter-generated duplicate URLs, Product schema with aggregateRating, sitemap generation, and PHP e-commerce performance. DeepSEOAnalysis audits your live OpenCart store — validating SEO URL patterns, structured data, sitemap coverage, real CrUX Core Web Vitals, and AI visibility — with template file paths and admin panel settings for every finding.

Audit my OpenCart store →How we score

WHAT WE CHECK

6 OpenCart-specific SEO checks

OpenCart SEO auditing covers SEO URL rewrite configuration and keyword field completeness, URL parameter duplicate content patterns, Product schema and aggregateRating validation, XML sitemap coverage, Core Web Vitals from real CrUX data, and AI visibility — with OpenCart template paths and admin panel settings for each finding.

🔧

SEO URL configuration and meta tag coverage

OpenCart\'s SEO foundation starts with the SEO URL setting and per-product/category keyword fields. The audit checks: SEO URL activation (whether product and category URLs use the keyword-based path `/running-shoes` vs the ID-based path `?route=product/product&product_id=12` — ID-based URLs indicate the SEO URL setting is disabled or the `.htaccess` rewrite isn\'t functioning); keyword field completeness (empty SEO keyword fields for products or categories fall back to ID-based URLs — the audit detects this pattern across crawled pages); URL slug quality (non-descriptive slugs like `product-42` or slugs that are the product model number rather than a keyword-descriptive name); `title` tag presence and uniqueness per page (OpenCart\'s default title format uses the meta title field or falls back to the product name — duplicate titles across products with similar names are a common issue); `meta name="description"` presence and length (50–160 characters); and canonical tag configuration (OpenCart generates duplicate URLs from session parameters `?route=...` and filter combinations — the canonical should point to the clean SEO URL version on every page). The audit also checks for the `link rel="canonical"` self-reference on all crawled pages, since OpenCart session ID parameters and sort/filter parameters can generate significant duplicate content without proper canonical coverage.

🔗

Duplicate content from URL parameter patterns

OpenCart generates duplicate content through several URL parameter patterns that accumulate crawl budget waste and confuse Google\'s indexation: **Session IDs** — older OpenCart 2.x installations or misconfigured stores may include session IDs in URLs (`?token=abc123`), creating a unique URL per visitor. These must be blocked in `robots.txt` (`Disallow: /*?token=`) and excluded from the sitemap. **Sort and filter parameters** — category pages with sort options (`?sort=p.price&order=ASC`) and pagination with sort (`?page=2&sort=p.price`) create parameter combinations that multiply the number of unique URLs for each category. Canonical tags on parameter URLs should point to the base category URL. **Currency and language parameters** — multi-currency and multi-language OpenCart stores using URL parameters (`?currency=EUR`, `?language=de`) for switching create separate URLs per currency and language. Multi-language stores using OpenCart\'s language code routing need hreflang tags, not duplicate parameter URLs. **Manufacturer and attribute pages** — OpenCart\'s manufacturer filter pages and attribute filter pages can create additional thin, near-duplicate category views. The audit detects crawled pages with `?route=product/manufacturer&manufacturer_id=` and `?sort=`, `?filter_category_id=` patterns and checks whether canonical tags correctly point these to the base category or product URL.

📋

Product schema and aggregateRating validation

OpenCart doesn\'t output Product JSON-LD by default — the audit checks whether an SEO extension or custom template modification has added it, and validates its correctness when present. Required Product schema properties for Rich Results: `name` (product title), `description` (full or truncated product description — not the meta description), `image` (full URL to the main product image, must resolve with 200 response), `offers` with nested `Offer` type containing: `price` (as a string, not a number), `priceCurrency` (ISO 4217 code, e.g. "USD"), `availability` (must use the full URI `https://schema.org/InStock` or `https://schema.org/OutOfStock` — the common shorthand `InStock` without the namespace is invalid), `url` (the canonical product URL). For aggregateRating (required for star ratings in search results): `ratingValue` (average rating, must be a decimal between 1.0 and 5.0), `reviewCount` (total number of reviews, must be ≥1 — schema with `reviewCount: 0` is invalid), `bestRating` (5), `worstRating` (1). The audit validates each of these properties for type correctness, enum URI format, value range, and cross-checks the price in schema against the visible price on the page. Schema properties that exist in the code but don\'t match the visible page (e.g., price in schema is the base price but the page shows the sale price) are flagged as consistency errors.

🗺️

XML sitemap configuration and coverage

OpenCart includes a built-in Google Sitemap feed at `/index.php?route=extension/feed/google_sitemap` (in OpenCart 3.x; path varies by version). For SEO URL-enabled stores, this URL itself is not SEF — consider redirecting it to a clean `/sitemap.xml` path via the `.htaccess` rewrite rules. The audit checks: sitemap accessibility at the path declared in `robots.txt` (Sitemap directive must point to the accessible sitemap URL); URL format in the sitemap (sitemap entries should use the SEF keyword-based URLs, not the `?route=product/product&product_id=N` ID-based URLs); `lastmod` population (OpenCart\'s built-in sitemap uses the product or category date_modified for `lastmod` — verify these fields are being updated on product changes); coverage completeness (all active, non-draft products and all active categories with public URLs should appear; inactive or zero-stock hidden products should be excluded); and absence of parameter URLs (sitemap entries that include `?sort=`, `?page=`, `?token=` or other parameter variants are pollution that waste crawl budget on near-duplicate pages). For multi-store OpenCart installations, each store should have its own sitemap with only that store\'s content, listed in the robots.txt for the store\'s domain.

Core Web Vitals for OpenCart

OpenCart is a PHP-rendered e-commerce platform — pages are generated server-side and returned as HTML, so there\'s no JavaScript rendering gap for product content. Performance varies significantly by theme, hosting, extension load, and caching configuration. **LCP** — OpenCart product pages typically use a large hero product image as the LCP element. Add `fetchpriority="high"` and `loading="eager"` to the first product image in the template (`catalog/view/theme/[theme]/template/product/product.twig`); serve WebP via a PHP image processing library (Intervention Image, PHP image resize) or a CDN image transformation service. **INP** — OpenCart\'s default themes load jQuery and custom JavaScript for product option selection, quantity controls, and add-to-cart functionality. Audit the network tab for blocking or slow JavaScript. Extensions frequently add their own JavaScript files — each installed extension may add 1–3 additional JavaScript includes that delay INP. Defer non-critical extension JavaScript using `async` or `defer` in the template layout file. **CLS** — product images without explicit width/height attributes in the `img` tag cause layout shift as images load; OpenCart\'s built-in image resize should return the correct dimensions — verify the template outputs `width` and `height`. **TTFB** — OpenCart query performance degrades on large catalogues without proper indexing. Enable OpenCart\'s SEO Cache extension or a page caching plugin (LiteSpeed Cache for LiteSpeed servers, Varnish at the nginx layer) to serve cached HTML rather than regenerating on every request. The audit uses real CrUX field data for LCP, INP, and CLS on mobile and desktop.

🧠

AI visibility for OpenCart stores

Add `llms.txt` to the OpenCart root directory (the same directory as `index.php` and `.htaccess`). The file lists your store\'s product categories, key pages, and content sections in plain text — deployed as a static file accessible at `/llms.txt`. Verify AI crawlers are not blocked in `robots.txt` — check that GPTBot, ClaudeBot, and PerplexityBot are not caught by any `Disallow: /` or broad user-agent block. OpenCart\'s default robots.txt (if present) typically disallows the `admin/` directory, which is correct, but AI crawlers should be allowed access to the public catalogue. For FAQPage JSON-LD: add FAQ sections to category description pages and product pages using OpenCart\'s built-in custom fields or the template twig file. Output a `script type="application/ld+json"` FAQPage block on pages with questions — e.g., "What are the shipping times?", "What is the return policy?" on category and product pages. For question-format headings in product descriptions and category descriptions: structure the description content with H2 subheadings phrased as questions ("How does [product] compare to alternatives?", "What sizes are available?") where relevant. The audit checks all five AI visibility signals — llms.txt, AI crawler access, FAQPage/HowTo JSON-LD in server-rendered HTML, question-heading ratio (≥20%), and content chunkability (avg section ≤400w) — with OpenCart template file paths and admin panel settings for each fix.

HOW IT WORKS

Audit your OpenCart store in 60 seconds

  1. Enter your OpenCart store URL. No admin access, database credentials, or FTP needed — the audit crawls the public HTTP output as Googlebot would. Works with all OpenCart versions (2.x, 3.x, 4.x), any theme, and with or without SEO extensions installed.
  2. We crawl and analyse. The engine checks SEO URL patterns across crawled product and category pages, detects parameter-based duplicate URL patterns, validates Product JSON-LD in the raw server HTTP response, checks sitemap URL format and coverage, measures CrUX Core Web Vitals from real Chrome field data, and evaluates all five AI visibility signals.
  3. You get a prioritised report. OpenCart-specific issues first — disabled SEO URLs, empty keyword fields, parameter duplicate content, missing Product schema, sitemap URL format errors — then general SEO, each with the OpenCart admin panel path, template file location (`catalog/view/theme/[theme]/template/`), or server configuration for the fix.

FAQ

Questions about the OpenCart SEO audit

Does OpenCart have good SEO features built in?

OpenCart includes basic built-in SEO controls in its core: per-product and per-category meta title, meta description, and meta keywords fields in the admin panel; SEO-friendly URL generation (when enabled via Settings → Server → Use SEO URLs, requires Apache mod_rewrite or nginx URL rewriting); an XML sitemap accessible at `/index.php?route=extension/feed/google_sitemap` (or a dedicated sitemap extension); and canonical URL generation to prevent duplicate content from OpenCart\'s default session-based and filter-based URL parameters. However, OpenCart\'s core SEO capabilities have important gaps: no JSON-LD structured data output by default, no Product schema with aggregateRating, no automatic hreflang for multi-language OpenCart stores, and no built-in breadcrumb schema. The most comprehensive OpenCart SEO extensions: OpenCart SEO Pack, D-SEO, SEO Backpack (commercial), or SEO Suite Ultimate. The audit validates what\'s present in the server-rendered HTML regardless of whether the core settings or an extension provides it.

How do I enable SEO-friendly URLs in OpenCart?

SEO-friendly URLs in OpenCart require two steps: (1) In the OpenCart admin panel: System → Settings → Server → Use SEO URLs → Yes. Save settings. (2) At the server level: rename (or copy) the `.htaccess.txt` file in the OpenCart root to `.htaccess`. This file contains the Apache mod_rewrite rules that rewrite clean URLs like `/running-shoes` to OpenCart\'s internal routing. For nginx: add the rewrite rules to your nginx server block (`try_files $uri $uri/ @opencart;` with an `@opencart` location block that passes to `index.php`). For OpenCart stores on shared hosting: the default `.htaccess.txt` file should work after renaming, but verify with your hosting provider that mod_rewrite is enabled. After enabling SEO URLs: each product and category needs its own unique SEO keyword field filled in (Catalog → Products → SEO tab → Keyword field). OpenCart uses these SEO keyword values as the URL slug. If the keyword field is empty, OpenCart falls back to the internal ID-based URL pattern (`?route=product/product&product_id=12`). Verify after enabling by checking that product URLs show the keyword-based path rather than the ID-based path.

How do I add Product schema to OpenCart?

OpenCart\'s core doesn\'t output Product JSON-LD or aggregateRating schema. Adding structured data requires either an extension or manual theme modification. Options: (1) SEO extension with schema support — several commercial OpenCart extensions (SEO Backpack, D-SEO) include Product JSON-LD output including aggregateRating from OpenCart\'s built-in review system. (2) Theme modification — edit the product template file (`catalog/view/theme/[theme]/template/product/product.twig` in OpenCart 3.x or `product.tpl` in 2.x) to output a `script type="application/ld+json"` block with Product schema using template variables: product name, description, price, currency, availability (based on stock status), and aggregateRating from the OpenCart review data (average rating and review count). The availability value must use the full URI: `https://schema.org/InStock` not the shorthand `InStock`. (3) Controller override — create a controller extension that injects JSON-LD data into the page header via the event system, keeping schema output separate from the template. The audit checks that Product JSON-LD appears in the server-rendered HTTP response (not injected via JavaScript after page load) and validates all required properties.

Is the OpenCart SEO audit free?

Yes. The complete audit is free with no signup and no email gate. Paid plans add saved history, scheduled monitoring, larger crawls (up to 1,000 pages), and agency workflows.