Why moving now is the right call: a full crawl of uglyjohns.com, the issues found, and confirmation that every lead form runs on DealerSpike. Prep for the Jun 12 meeting.
The 7 location/marina/storage pages are near-identical boilerplate. marine-slip and marine-slip-and-dry-storage are 100% identical (two URLs, one page). Tulsa ↔ Lake Eufaula ↔ Carlton Landing ↔ Beaver Lake ↔ Lake Travis all measure 96–99% identical. Google reads these as thin duplicate pages — near-zero local-SEO value for a 6-location dealer whose customers search "boat service near [lake]".
✅ SequenceMatcher across crawled markdown + 2 screenshots
🔴 F2Strategy / UX
Homepage has no value proposition — it opens with a wall of boat-brand logos
On mobile, above the fold is the Ugly John's logo then a stacked grid of manufacturer tiles (Nautique, Monterey, Premier, Harris, Sea Ray, Pardo). No hero, no headline, no "full-service, friction-free boat ownership" story — the exact relationship message Eric said they want. It reads as a catalog, not an experience. (A "View Models" label also visually overlaps the Nautique logo — a layout bug.)
✅ mobile screenshot
🟠 F3Content gap
Zero per-location amenity data — the precise thing Eric wants surfaced
Location pages carry only hours + a map + a "Contact Us" button. Nothing on slip count, fuel availability, food, on-site vs on-water mechanics, dry storage — the location-uniqueness data Eric flagged on today's call. The site cannot answer "if my boat breaks down, which location helps me?" This is the questionnaire we build for tomorrow.
✅ screenshots + crawl
🟠 F4Reliability
Intermittent HTTP 500 on the Terms & Conditions page
During the crawl, /read-our-terms-and-conditions--xterms returned a 500 server error under full render. Two spaced plain re-fetches returned 200, so it is flaky-under-load rather than hard-down — but a legal page throwing intermittent 5xx is a reliability smell on aging infrastructure.
Sitemap last updated 2020, and contains a malformed URL
sitemap.xml's content map shows lastmod 2020-09-18 and ends with a broken concatenated entry: "uglyjohns.comhttps://twitter.com/UglyJohns". It also lists ghost pages (a Lake Travis / Austin TX location and an electric-cars/collector-cars page) that don't match the live navigation — so the sitemap, nav, and footer disagree about how many locations exist.
✅ raw sitemap.xml
🟡 F6Security / Tech debt
jQuery 1.10.2 (2013) — end-of-life with known XSS CVEs
The site runs jQuery 1.10.2 plus jQuery-Migrate 1.2.1 on a classic ASP stack (default.asp). jQuery 1.x is unsupported and carries documented cross-site-scripting vulnerabilities. Roughly 10 third-party script origins load on the homepage (GTM, FareHarbor, SnapWidget, DealerSpike modal, multiple CDNs), each one a performance and privacy dependency.
✅ raw HTML
🟡 F7Accessibility
Mobile pinch-zoom is disabled (WCAG 1.4.4 failure)
The viewport meta is set to user-scalable=no, maximum-scale=1.0 — this blocks pinch-to-zoom, a WCAG 2.1 AA failure. Notably the footer links an "Accessibility" page while the site itself violates a core accessibility requirement.
✅ raw HTML
🔵 F8Vendor lock-in
The site is wholly DealerSpike — even the footer credits the vendor
Pairwise text-similarity across the location pages. A real multi-location dealer should have distinct,
locally-optimized pages; instead these are one template with the name swapped.
Page A
Page B
Identical
marine-slip
marine-slip-and-dry-storage
100%
Tulsa
Carlton Landing
99%
Beaver Lake (Prairie Creek)
Lake Eufaula
99%
Tulsa
Lake Eufaula
98%
Lake Eufaula
Lake Travis
98%
Beaver Lake
Carlton Landing
95%
Locations index
Hours (Grand Lake)
90%
Lake Eufaula — hours + map + button. No photo, no intro, no amenities.Tulsa — same skeleton, one photo + one sentence. 98% identical to Eufaula.
Evidence — no homepage story (F2)
Mobile home, above the fold: brand logo, hamburger, then a stack of manufacturer tiles. No hero,
no value proposition. Note "View Models" overlapping the Nautique logo.
Your hypothesis was right. Every lead form submits through DealerSpike, not a self-hosted handler.
Each <form> has an empty action="" and a data-ds-form name; DealerSpike's
JavaScript posts to pdxelk.dealerspike.com:8201. The recipient inbox
(to_email/MAILTO) is filled server-side, per location, and is not visible in
the page source — so we'll need each location's lead-destination email as part of intake.
Form
DealerSpike name
Page
Contact Us
xInquiry
/contact-email…--xcontact
Schedule a Viewing
xsched_ride
/schedule-viewing-boats--xsched_ride
Get a Quote
xget_quote
/price-quote…--xget_quote
Value Your Trade
xtrade_value
/trade-in-value…--xtrade_value
Service Request
xservice_request
/service-request…--xservice_request
Parts Request
xparts_request
/request-parts…--xparts_request
Other third-party integrations the MVP must account for: FareHarbor (rentals/charters booking
widget), SnapWidget (Instagram feed), secure-financing.dealerspike.com (credit
app), and a separate orderuglyjohns.com domain for Ugly's Grill ordering. The lead-form schema is
inventory-aware (year/make/model/stock#, plus campaign + opportunity IDs) — relevant if the MVP keeps an
inventory-inquiry path.
What this means for the MVP
Lead capture is the one thing we can't fake. Decide now: keep posting to DealerSpike's
pipeline (preserves their current CRM/lead routing) or stand up our own form handler and route leads
to the same per-location inboxes. Either way we need the destination emails.
Rentals = FareHarbor. Re-embed the widget; don't rebuild booking.
Inventory can be punted to a later phase (it's the heaviest DealerSpike-coupled piece);
a Phase 1A of home + 6 real location pages + brand story + working contact/quote forms is shippable fast.
Talking points for tomorrow
"Your site looks fine on the surface — the problem is underneath. Every location page is the same page.
Google can't tell your six locations apart, so none of them rank locally."
"There's nowhere on the site that answers 'which location can fix my boat / has fuel / has a slip' — that's
the relationship you described, and it's missing today."
"You don't own your website — it's a DealerSpike rental, down to the copyright line. We build you something
you own."
"Normally I'd want months of testing before launch. I'm telling you the opposite here because the current
site is broken enough that a focused replacement is strictly better, fast."
Methodology & provenance
40 URLs (sitemap + live nav) crawled 2026-06-11 via the Aspire NAS Crawl4AI container
(192.168.5.230:11235) with humanistic pacing — full-browser render, 2–6s built-in stealth delay plus 3–7s
added jitter, serial (no parallel hammering), ~11 minutes total. Form HTML pulled separately to read
<form> actions. 39/40 pages returned 200; 1 intermittent 500 (see F4). Claims are tagged by
source above; the only non-verified item is the intermittent-500 severity. No client-facing assets were
touched — this is internal strategy.