Site Audit for J.M. Field

Comprehensive SEO, performance, and accessibility audit of devsite.jmfield.com. Astro SSR site with bilingual EN/ES content, 64 indexed pages, and full schema markup.

SEO
91
Dev noindex excluded from scoring
Accessibility
96
Best Practices
100
Performance
87
CLS from ticker images

Executive Summary

devsite.jmfield.com is well-built with strong technical foundations. The site runs on Astro SSR with proper schema markup, bilingual support, and clean URL architecture. Key areas for improvement are Spanish content parity, ticker image dimensions, and contrast fixes.

64
Sitemap URLs
48
English Pages
16
Spanish Pages
0
Broken Links
BR
Compression
8
Blog Posts

Key Findings

  • Spanish content gap: 32 pages missing Spanish versions (48 EN vs 16 ES). Printing, promo products, graphic design sub-pages, blog, about, FAQ all need translation.
  • Ticker logo CLS: 72 logo images in the client ticker lack width/height attributes, causing Cumulative Layout Shift on page load.
  • CTA contrast: The "Ready to Simplify Your Supply Chain" banner has text contrast of 3.68:1 (WCAG requires 4.5:1).
  • llms.txt updated: AI crawler file now references the correct nested fulfillment URLs.
  • Hreflang incomplete: Pages include only 1 hreflang tag instead of the required 3 (en, es, x-default).
  • Strong foundations: Schema markup, robots.txt, sitemap, canonical tags, OG tags, HTTPS, and Brotli compression all properly configured.

Technical SEO

Core technical infrastructure is solid. Two items need attention.

Hreflang implementation incomplete
SEO Low priority

Each page currently includes only 1 hreflang tag. Google requires reciprocal hreflang annotations: each page should declare en, es, and x-default alternates.

The sitemap correctly includes all 3 hreflang annotations per URL, which partially compensates. However, on-page hreflang is stronger signal.

Fix: Update BaseLayout.astro to output all 3 hreflang link tags in the <head> for every page: hreflang="en", hreflang="es", and hreflang="x-default".
2 orphan draft pages publicly accessible
Technical Info

/printing-review/ and /printing-v2/ are draft/review pages that are publicly accessible and could be indexed by search engines.

Fix: Either delete these files or add <meta name="robots" content="noindex"> to prevent indexing.

Passing Checks

llms.txt updated with correct nested fulfillment URLs for AI crawler citation accuracy
robots.txt properly configured with 11 AI crawler Allow rules (GPTBot, ClaudeBot, PerplexityBot, etc.)
XML sitemap with 64 URLs, hreflang annotations, and lastmod dates
Canonical tags present and correct on all audited pages
Schema markup: 4-5 JSON-LD blocks per page (Organization, LocalBusiness, BreadcrumbList, WebSite, page-specific)
Open Graph tags (og:title, og:description) present on all pages
Clean URL structure with consistent trailing slashes
HTTPS enforced with HSTS (max-age: 15552000)
Security headers: X-Frame-Options, X-XSS-Protection, X-Content-Type-Options, Referrer-Policy, Permissions-Policy

On-Page SEO

All audited pages have unique titles, descriptions, proper heading hierarchy, and schema markup. No issues found.

Page Title Length Desc Length H1 Schemas Status
/ 61 107 Fulfillment, Printing & Marketing 4 Pass
/fulfillment/ 35 112 Fulfillment Services That Ship On Time 5 Pass
/fulfillment/ecommerce-fulfillment/ 45 110 Ecommerce Fulfillment Built for Brands 5 Pass
/printing/ 43 106 Commercial Printing Services 5 Pass
/contact/ 46 105 Let's Talk About Your Fulfillment Needs 5 Pass
/blog/ 47 121 Fulfillment & Marketing Blog 4 Pass
/es/ 53 130 Logistica, impresion y marketing 4 Pass
All pages have unique, descriptive titles (35-61 characters)
Meta descriptions are 105-130 characters with clear calls to action
Single H1 per page with logical H2-H3 hierarchy
All images have descriptive alt text
Internal linking is consistent across nav, footer, and in-content CTAs

Performance

Overall performance is good with Brotli compression and minimal JS. Main issue is CLS from ticker images.

44KB
Homepage HTML
BR
Brotli Enabled
1
CSS Bundles
0
Render-Blocking JS
4hr
Image Cache TTL
Local
Font Loading
72 ticker logo images missing width/height dimensions
Performance High priority

The client logo ticker on the homepage contains 72 <img> tags (36 logos duplicated for infinite scroll) without explicit width and height attributes. This causes Cumulative Layout Shift (CLS) as images load and the browser recalculates layout.

Affected images include: masa.webp, ncl.svg, victory-cruises.svg, sixthman.svg, oceania-cruises.webp, supersmart.webp, regent.webp, and 29 others.

Fix: Add explicit width and height attributes to all ticker <img> tags in index.astro. Since these are contained within a fixed-height ticker, use consistent dimensions like width="120" height="48" with object-fit: contain.
Image cache TTL too short (4 hours)
Performance Medium priority

Static image assets like hero images and logos return Cache-Control: public, max-age=14400 (4 hours). For versioned static assets, a much longer cache duration would reduce repeat-visit load times.

Fix: Configure the server or CDN to set Cache-Control: public, max-age=31536000, immutable for static assets in /img/ and use cache-busting query strings or hashed filenames for cache invalidation.
Homepage HTML size is 44KB
Performance Low priority

The homepage HTML document is 44KB (compressed with Brotli). This is acceptable but on the higher end. Inline SVG icons and the ticker markup contribute to the size.

Fix: Consider extracting frequently-used SVG icons to a shared sprite file. Low priority since Brotli compression handles this well.
Brotli compression enabled (content-encoding: br)
Single CSS bundle (BaseLayout.CAGrmfKJ.css) with hash-based filename
No render-blocking JavaScript resources
No external font loading (system/local fonts only)
HTTPS with HSTS enabled
Cloudflare CDN with HTTP/2

Accessibility

Strong accessibility score of 96/100. One contrast issue to fix.

CTA banner text fails WCAG contrast ratio
Accessibility Medium priority

The "Ready to Simplify Your Supply Chain" CTA section has a paragraph with foreground color #333333 on background color #888b8d, producing a contrast ratio of 3.68:1. WCAG AA requires a minimum of 4.5:1 for normal text.

Element: section.cta-banner > div.container > p

Fix: Change the paragraph text color to #ffffff (white) for a contrast ratio of 5.18:1, or darken the background. Alternatively, increase text size to 18px+ (large text only requires 3:1).
Lighthouse Accessibility score: 96/100
Proper heading hierarchy (single H1, logical H2-H3 flow)
All form inputs have associated labels
All images have descriptive alt text
Keyboard navigation works for nav dropdowns and mobile menu
lang attribute set correctly on html element (en/es)
Skip-to-content and ARIA labels properly implemented

Content & Internationalization

Bilingual infrastructure is in place but Spanish content coverage is significantly behind English.

48
English Pages
16
Spanish Pages
32
Missing ES Pages
8
Blog Posts
32 Spanish page translations missing
Content High priority

The site has 48 English pages but only 16 Spanish equivalents. Missing Spanish versions include:

Service sub-pages (25): All 8 printing sub-pages, all 6 promotional products sub-pages, all 6 graphic design sub-pages, and 5 other pages.

Core pages (7): /about/, /blog/, /case-studies/, /faq/, /industries/, /privacy/, /terms/

J.M. Field is based in Fort Lauderdale with a significant Spanish-speaking customer base. Full bilingual coverage could capture untapped organic traffic.

Fix: Prioritize translating core pages (about, FAQ, industries) first, then service sub-pages. Blog posts can remain English-only initially. Use the existing Nav/Footer translation infrastructure.
Blog has only 8 posts
Content Medium priority

The blog currently has 8 posts covering fulfillment, printing, and promotional products topics. For a site targeting competitive B2B fulfillment keywords, a consistent publishing cadence would strengthen topical authority.

Current topics: amazon FBA vs 3PL, choosing a fulfillment company, kitting services, commercial printing technology, promotional products (2 posts), graphic design, warehousing costs.

Fix: Target 2-4 posts per month focusing on long-tail fulfillment and logistics keywords. Topics like "fulfillment center vs in-house shipping," "3PL pricing models," and "subscription box fulfillment guide" have strong search intent.
Bilingual navigation and footer fully implemented
Proper lang="en" / lang="es" attributes on html element
Hreflang annotations in XML sitemap
Spanish URL structure uses localized slugs (/es/servicios-de-cumplimiento/)

URL Architecture

Clean nested hierarchy with logical content siloing.

/fulfillment/ 5 pages
/fulfillment/ecommerce-fulfillment/
/fulfillment/marketing-fulfillment/
/fulfillment/product-fulfillment/
/fulfillment/kitting/

/printing/ 9 pages
/printing/brochures/ · /postcards/ · /business-forms/ · /marketing-materials/
/printing/packaging/ · /product-catalogs/ · /stationery/ · /trade-show/

/promotional-products/ 7 pages
/promotional-products/apparel/ · /bags-totes/ · /desk-office/
/promotional-products/drinkware/ · /hats-caps/ · /tech-accessories/

/graphic-design/ 7 pages
/graphic-design/illustration/ · /logo-brand/ · /packaging/
/graphic-design/photography/ · /print-design/ · /proofs-concepts/

/blog/ 8 posts
/all-in-view/ · /web-services/ standalone
/about/ · /industries/ · /case-studies/ · /faq/ · /contact/
/privacy/ · /terms/