resourceJuly 21, 2026#audit#b2b#seo#performance#checklist

The B2B Ecommerce Site Audit Checklist

The working checklist we use to audit B2B and distributor ecommerce sites: performance, SEO, catalog quality, buying experience, and the ERP integration questions nobody else asks. Free, no email required.

This is the actual checklist we work through when a distributor or manufacturer asks us to look at their store. It takes 60 to 90 minutes with a browser, DevTools, and honesty. Nothing here needs special tools or site access, and none of it involves probing anything that isn’t publicly served: if a check would require guessing credentials or poking at endpoints, it’s not on this list.

Print this page and fill it in on paper, or copy it into a doc. If you get stuck on what a finding means, the “how to check” notes under each section explain what you’re looking at.

Lighthouse & Core Web Vitals (mobile)

Run Lighthouse in Chrome DevTools (mobile preset, incognito window so extensions don’t pollute the score). Run it three times and take the middle result; single runs lie.

Category Score Notes
Performance ___/100
Accessibility ___/100
Best Practices ___/100
SEO ___/100
Metric Result Target
LCP (Largest Contentful Paint) _______ under 2.5s
INP (Interaction to Next Paint) _______ under 200ms
CLS (Cumulative Layout Shift) _______ under 0.1
FCP (First Contentful Paint) _______ under 1.8s
TTFB (Time to First Byte) _______ under 0.8s

Top Lighthouse flags:




How to check: the lab numbers above are simulated. For what real visitors experience, look the domain up in PageSpeed Insights: if the site has enough traffic you’ll get a “Core Web Vitals Assessment” from field data, and that’s the number Google actually uses. A site that passes in the lab and fails in the field usually has a slow host or a heavy tag stack.

SEO fundamentals

Homepage title tag: _________________________________

  • Length OK? (50-60 chars) [ ] Yes [ ] No
  • Includes primary keyword? [ ] Yes [ ] No

Homepage meta description: __________________________

  • Exists at all? [ ] Yes [ ] No
  • Length OK? (150-160 chars) [ ] Yes [ ] No

H1 tags on homepage: ________________________________

  • Exactly one H1? [ ] Yes [ ] No [ ] Zero H1s
  • Is the H1 meaningful, or is it the logo? ________________

Product page title tag (sample): _____________________

  • Unique per product? [ ] Yes [ ] No [ ] All identical

Product page meta description (sample): ______________

  • Unique per product? [ ] Yes [ ] No [ ] Missing entirely

Canonical tags:

  • Present? [ ] Yes [ ] No
  • Self-referencing correctly? [ ] Yes [ ] No
  • Issues spotted: ______________________________________

Domain canonicalization:

  • http:// redirects to https:// in ONE hop? [ ] Yes [ ] Chain [ ] No
  • www and bare domain resolve to a single winner? [ ] Yes [ ] Both serve 200
  • Trailing-slash URLs consistent (pick one, 301 the other)? [ ] Yes [ ] No

How to check: curl -sI http://domain.com in a terminal, or paste the variants into httpstatus.io. You want exactly one 301 to the canonical form. Every extra hop wastes crawl budget and dilutes links; two variants both serving 200 means the site competes with itself.

Robots.txt:

  • Exists? [ ] Yes [ ] No
  • References sitemap? [ ] Yes [ ] No
  • Unusual disallow rules? ______________________________

How to check: type domain.com/robots.txt directly in the address bar. It’s a plain text file at the root of every site, no DevTools needed. You’ll see something like:

User-agent: *
Disallow: /admin/
Disallow: /checkout/
Disallow: /customer/
Sitemap: https://domain.com/sitemap.xml

User-agent: * means the rules apply to all crawlers. Disallow lines tell Google not to crawl a path. Admin, checkout, and account pages blocked is normal and correct. What you don’t want to see is Disallow: / (blocks the entire site) or product and category paths blocked accidentally. Check for a Sitemap: line at the bottom; if it’s missing, that’s a small finding. On Magento sites specifically, look for Disallow: /catalog/ or Disallow: /catalogsearch/: common, and sometimes overly aggressive. A 404 at /robots.txt means they don’t have one at all. Not catastrophic, but sloppy and worth mentioning.

Sitemap.xml:

  • Exists? [ ] Yes [ ] No
  • Looks current? [ ] Yes [ ] No
  • Approximate URL count: ________________________________

Indexed pages (site:domain.com): ___________________

  • Expected product count: _______________________________
  • Match? [ ] Yes [ ] Way off, possible crawl or index issues

How to check: the site: count is an approximation, so don’t read it to the digit. What matters is the order of magnitude. Ten thousand products and 300 indexed pages is a crisis; ten thousand products and 60,000 indexed pages usually means faceted-navigation URLs are being crawled as duplicate pages. Try site:domain.com inurl:? to spot parameter-URL bloat.

Image alt text:

  • Images missing alt text (Lighthouse flags this): ______________
  • Product images have descriptive alts? [ ] Yes [ ] No [ ] Generic filenames

Schema / structured data

Test a product page at search.google.com/test/rich-results.

Product page:

  • Valid Product schema? [ ] Yes [ ] No [ ] Not present
  • Includes price? [ ] Yes [ ] No
  • Includes availability? [ ] Yes [ ] No
  • Includes brand? [ ] Yes [ ] No
  • Includes SKU? [ ] Yes [ ] No
  • Includes aggregateRating/reviews? [ ] Yes [ ] No

Homepage:

  • Organization or LocalBusiness schema? [ ] Yes [ ] No

BreadcrumbList schema:

  • Present? [ ] Yes [ ] No

Honesty check:

  • Review/aggregateRating schema backed by real, visible, attributed reviews? [ ] Yes [ ] No, ratings appear from nowhere (policy risk)

Overall schema assessment:

  • Solid: complete and valid
  • Partial: present but missing key fields
  • Bare minimum: technically there but not competitive
  • None: zero structured data

Notes: _____________________________________________

How to check: Cmd+U (view source), then Cmd+F for application/ld+json. That’s the container for JSON-LD, the format Google prefers. A healthy product page looks like:

{
  "@type": "Product",
  "name": "Widget 123",
  "description": "Industrial-grade widget for heavy applications",
  "sku": "WDG-123",
  "brand": { "@type": "Brand", "name": "Acme Industrial" },
  "offers": {
    "@type": "Offer",
    "price": "45.99",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  }
}

Partial schema is common and worth calling out precisely: “Google knows this is a product and what it costs, but not whether it’s in stock” is a finding a business owner can act on. And if you see 5-star rating schema with no visible reviews anywhere on the page, flag it: fabricated-looking structured data is a Google policy violation waiting to be enforced.

Homepage & first impressions

  • Does it clearly say what they sell within 5 seconds? [ ] Yes [ ] No
  • Is there a clear value proposition? [ ] Yes [ ] No
  • Primary CTA visible above the fold? [ ] Yes [ ] No
    • What is it? _________________________________________
  • Hero image/banner: relevant or stock? ______________
  • Trust signals present? (logos, certifications, reviews) [ ] Yes [ ] No
  • Phone number / contact visible? [ ] Yes [ ] No

First impression notes:


  • Main nav categories (list them):
  • Can you find a specific product in 3 clicks or fewer? [ ] Yes [ ] No
  • Mega menu or dropdowns? [ ] Yes [ ] No
  • Category structure makes sense? [ ] Yes [ ] Confusing [ ] Too flat [ ] Too deep
  • Dead-end pages found? [ ] Yes [ ] No
    • Where? _______________________________________________
  • Breadcrumbs present? [ ] Yes [ ] No

Product pages

Sample product URL: _________________________________

  • Clear product name in H1? [ ] Yes [ ] No
  • Product images: [ ] Multiple angles [ ] Single image [ ] Low quality [ ] None
  • Pricing visible? [ ] Yes [ ] Login required [ ] Request quote [ ] Missing
  • Add to cart / CTA prominent? [ ] Yes [ ] Buried [ ] Missing
  • Description quality: [ ] Detailed [ ] Minimal [ ] Copy-pasted from manufacturer
  • Specs / data sheets available? [ ] Yes [ ] No
  • Stock / availability shown? [ ] Yes [ ] No
  • Related / recommended products? [ ] Yes [ ] No
  • Reviews on product page? [ ] Yes [ ] No

Product page notes:


Catalog & data quality

The section most audits skip, and the one that decides whether B2B buyers can actually use the store. Pick five products at random and grade the catalog, not the theme.

  • Duplicate listings: search for the same product two ways (name, then SKU). One result or several? [ ] Clean [ ] Duplicates found
  • Title consistency: [ ] Clean and human [ ] ALL-CAPS shouting [ ] Vendor codes pasted as titles [ ] Mixed mess
  • Of your 5 random products, how many have:
    • A real description (not a spec dump)? ___/5
    • At least one decent image? ___/5
    • Complete specs for the category? ___/5
    • Consistent units of measure? ___/5
  • Category pages dominated by out-of-stock items? [ ] Yes [ ] No
  • Orphaned products (reachable only by search, in no category)? [ ] Found [ ] Not found
  • Variant structure: are size/color/pack-count variants on one page, or scattered as separate near-identical products? [ ] One page [ ] Scattered

Catalog notes:


  • Search bar prominent? [ ] Yes [ ] Hidden [ ] Missing
  • Search by product name works? [ ] Yes [ ] Bad results [ ] Broken
  • Search by SKU works? [ ] Yes [ ] No
  • Search by a customer’s part-number alias works? [ ] Yes [ ] No [ ] N/A
  • Partial match / typo tolerance? [ ] Yes [ ] No
  • Autocomplete / suggestions? [ ] Yes [ ] No
  • Filters on results page? [ ] Yes [ ] No

Search notes: _______________________________________

Mobile experience

  • Responsive? [ ] Yes [ ] No [ ] Partially (broken elements)
  • Nav works on mobile? [ ] Yes [ ] No
  • Buttons/links tappable? [ ] Yes [ ] Too small [ ] Overlapping
  • Text readable without zooming? [ ] Yes [ ] No
  • Forms usable on mobile? [ ] Yes [ ] No [ ] Didn’t test
  • Mobile CTA visible? [ ] Yes [ ] Buried below fold

Mobile issues spotted:


Checkout & B2B buying experience

  • Guest checkout available? [ ] Yes [ ] Account required [ ] Couldn’t tell
  • Account required to see pricing? [ ] Yes [ ] No
  • Checkout steps: ______ (count)
  • Payment options visible: ___________________________
  • PO number field at checkout? [ ] Yes [ ] No
  • Net terms / invoice payment available? [ ] Yes [ ] No [ ] N/A
  • Quick order pad (paste SKUs + quantities)? [ ] Yes [ ] No
  • Reorder from order history? [ ] Yes [ ] No
  • Customer-specific pricing shown when logged in? [ ] Yes [ ] No [ ] Couldn’t tell
  • Tax-exempt purchasing handled? [ ] Yes [ ] Manual workaround [ ] Not at all
  • Freight-only or restricted items (heavy, hazmat) handled sanely? [ ] Yes [ ] They ship a drum of chemicals like it’s a t-shirt [ ] N/A

Checkout notes: _____________________________________

ERP & integration hygiene

You can’t see the integration from the outside, but you can see its symptoms, and the owner can answer the rest in five minutes. These questions find the expensive problems.

Observable from the site:

  • Stock status looks alive? (varies by item, changes over days) [ ] Yes [ ] Everything perpetually “in stock” [ ] No stock shown
  • Order confirmation email arrives fast? [ ] Under a minute [ ] Hours [ ] Never tested
  • Tracking email arrives when shipped? [ ] Yes [ ] No [ ] Unknown

Ask the owner:

  • Who owns the ERP connector, and is that vendor still alive? (Check the vendor’s site: acquired, “closed to new customers,” last blog post 2022? That’s end-of-life with extra steps.) ______________________
  • How does an order get from the store to the ERP? [ ] Automatic [ ] CSV and prayer [ ] Manual rekeying
  • What happens when an order fails to import? [ ] Alert + retry [ ] Someone notices eventually [ ] Nobody knows
  • Web price vs invoice price: do they ever disagree? [ ] Never [ ] Sometimes (find out why) [ ] Don’t know
  • How often does inventory sync? [ ] Near-real-time [ ] Nightly [ ] Manually
  • When did someone last reconcile web orders against ERP orders? __________

Integration notes:


Email & deliverability

  • Order/transactional email from-address matches the store domain? [ ] Yes [ ] No
  • SPF record exists? [ ] Yes [ ] No
  • DKIM signing? [ ] Yes [ ] No
  • DMARC policy? [ ] none [ ] quarantine [ ] reject [ ] Missing entirely
  • Marketing email has working unsubscribe? [ ] Yes [ ] No [ ] N/A

How to check: mxtoolbox.com, enter the domain, look up SPF/DKIM/DMARC. Or in a terminal: dig txt domain.com and dig txt _dmarc.domain.com. A B2B store whose order confirmations land in spam is quietly bleeding reorders, and nobody inside ever sees it happen.

Analytics sanity

  • Analytics installed? [ ] GA4 [ ] Other: __________ [ ] None found
  • Actually firing? (DevTools Network tab, filter collect, reload) [ ] Yes [ ] Installed but silent
  • Double-tagged? (two page_views per load = two GA snippets or GTM + hardcoded) [ ] Clean [ ] Duplicated
  • Purchase/conversion event wired? [ ] Yes [ ] Page views only
  • Consent banner, if present, actually blocks tags before consent? [ ] Yes [ ] Cosmetic only

Technical & security (passive checks only)

  • SSL / HTTPS: [ ] Valid [ ] Mixed content [ ] Issues
  • 404 page: [ ] Branded and helpful [ ] Generic server error [ ] Broken
  • Open Graph tags present? [ ] Yes [ ] No
    • Would a LinkedIn share look good? [ ] Yes [ ] Broken preview
  • Google Business Profile: [ ] Claimed and filled out [ ] Exists but bare [ ] Not found
  • Console errors? [ ] None [ ] Some [ ] Many
    • Notable errors: ______________________________________
  • JS file count (Network tab): ______________________
  • Total page weight (homepage): ______________________
  • Admin login at a default path, publicly visible? [ ] Yes (note it, don’t touch it) [ ] No
  • Platform/version leaking in headers or page source? [ ] Yes: __________ [ ] No

Platform-specific findings

Fill in based on the identified platform.

Magento:

  • Full-page cache working (X-Magento-Cache-Debug: HIT)? [ ] Yes [ ] No
  • Using default Luma theme? [ ] Yes [ ] No
  • Layered nav creating duplicate URLs? [ ] Yes [ ] No
  • B2B modules (SharedCatalog, Company)? [ ] Yes [ ] No
  • Magento 1 (end-of-life risk)? [ ] Yes [ ] No
  • Patch currency: version in page source vs latest 2.4.x? __________

Shopify:

  • App bloat: how many third-party script hosts in the Network tab? __________
  • Leftover code from uninstalled apps? [ ] Yes [ ] No
  • Using default Dawn theme? [ ] Yes [ ] No
  • Plan tier, if discoverable? [ ] Plus [ ] Standard [ ] Can’t tell
  • Collection pages have descriptions? [ ] Yes [ ] No
  • Blog being used? [ ] Yes [ ] No
  • Variant-limit workarounds visible (duplicate products per size/pack)? [ ] Yes [ ] No

WooCommerce:

  • Plugin count visible in page source? ________________________________
  • /wp-admin exposed to the world? [ ] Yes [ ] No
  • SEO plugin (Yoast/RankMath) configured? [ ] Yes [ ] No [ ] Not installed

Other / custom:

  • SSR or client-side rendered? [ ] SSR [ ] Client-side (SEO risk)
  • Platform identified as: _______________________________

Overall assessment

What they’re doing well:




Biggest issues found (worst first):






Three fixes worth doing this month (cheap, high impact):





This checklist is maintained by Keyway Systems. Use it freely, share it freely, no email required. If working through it surfaced integration questions you can’t answer from the outside, that’s the part we do.

Working through something similar?

Most of what we publish comes straight from engagements. If the problem in this piece looks like yours, we've probably already built the fix once.

Book a discovery call