Surprise Castle

Surprise Castle

surprisecastle.com

Generated

June 8, 2026

Overall Score

49/100

Needs Work

SEO Score

33/100

GEO Score

38/100

01

Summary

What's working

  • Clean category navigation covering Movies, Music, Toys, Books, Video Games, Electronics, and Gifts. Collectors can orient themselves quickly without digging through menus.
  • Cart page has a free-shipping progress bar ($75 threshold), a discount code field, and an order notes box. That's a solid friction-reduction setup most stores skip.
  • Seven active social media profiles (Instagram, TikTok, YouTube, Facebook, Pinterest, Snapchat, X) show genuine brand investment outside the storefront.

Critical problems

  • Every canonical tag, og:url, and JSON-LD URL on the site reads "http://localhost:3000" instead of the real domain. Google sees a different website than the one customers visit. SEO attribution is completely broken.
  • No About page exists. The link goes to a 404. There's no brand story, no founder context, no "why we exist." Customers and search engines have no way to understand who runs this store.
  • Zero reviews on any product. The entire review section shows "No Reviews Yet!" across every single item. Without social proof, collector-minded buyers won't pull the trigger.

The real opportunity here

Surprise Castle has good bones. The catalog is broad, the navigation is logical, the cart UX is thoughtful, and the social presence is real. But the store is running on broken infrastructure. The localhost URL bug alone is costing the site every Google ranking signal it should be accumulating. Fix that one environment variable and the SEO score jumps significantly overnight. From there, adding reviews and building a genuine brand story page would close most of the remaining gap. None of this requires rebuilding anything from scratch.

02

Screenshots

Surprise Castle homepage — desktop
Homepage — Desktop (1440px)
Alien 4K Ultra HD product page
Product Page — Alien (4K Ultra HD)
Shopping cart page
Cart Page — Free shipping bar visible
Toys and Collectibles collection page
Collection — Toys & Collectibles
Search results page
Search — Results page (query: funko pop)
Blog article page
Blog — Sci-Fi Movies Collector's Guide
Surprise Castle homepage on mobile
Homepage — Mobile (390px, full page)
Product page on mobile
Product Page — Mobile (390px, full page)
03

Per-page issues

Page Issue Category Severity Recommendation
All pages Every canonical tag, og:url, and JSON-LD URL points to http://localhost:3000 instead of https://surprisecastle.com. This is a Hydrogen/Oxygen deployment misconfiguration where PUBLIC_STORE_DOMAIN was never set in production environment variables. Technical 🔴 Critical Set the PUBLIC_STORE_DOMAIN (or equivalent) environment variable to https://surprisecastle.com in your Oxygen deployment settings. Redeploy. Verify with a curl check on the rendered HTML.
All pages React hydration error #418 fires on every page load. The client-side React tree doesn't match what the server rendered, causing the browser to throw and recover. Users may see brief flickers or broken states on slower connections. Technical 🔴 Critical Check for date/time rendering, random values, or browser-only APIs used during SSR. The error decoder at reactjs.org/docs/error-decoder.html?invariant=418 gives more detail. Sentry is already capturing these — check the Sentry dashboard for the full stack trace.
Product pages Meta description and og:description contain raw HTML tags. The description reads: <p>The one that started it all...</p> — these angle brackets will display literally in Google search snippets. SEO 🔴 Critical Strip HTML from the product description string before inserting it into the meta description tag. A simple regex replace or a dedicated HTML-to-text utility in the Hydrogen loader handles this cleanly.
Homepage No H1 tag. The page jumps straight to H2 ("All Categories", "Trending Products"). Search engines and screen readers rely on H1 to understand the primary topic of a page. SEO 🟡 Warning Add an H1 that clearly states what Surprise Castle is and who it's for. Something like "Books, Movies, Music & Collectibles — Surprise Castle" works fine. It can be visually hidden if the design doesn't accommodate a large headline, but it needs to be in the DOM.
Footer — About No About page exists anywhere on the site. The footer has no About link, and navigating to /pages/about silently redirects to the homepage without a 404. There is no brand story, founder information, or company background. GEO / Brand 🟡 Warning Create a real /pages/about page with the founding story, who runs the business, where you're based (St. Petersburg, FL), and what makes Surprise Castle different from eBay or Amazon. This is the single biggest GEO improvement available.
Footer — Collab "Want to Collab?" link in the footer leads to a broken page showing "Boo! Page missing!" — a 404 state. This is a dead link in front of every visitor and every crawler. UX 🟡 Warning Either create a /pages/collab page (a simple contact form works) or remove the link from the footer until the page is ready.
Product pages Zero reviews on every product. The section shows "No Reviews Yet! Be the first one to share your experience" across the entire catalog. No social proof = hesitation at the point of purchase. CRO 🟡 Warning Install Judge.me (free plan available). Set up an automated post-purchase review request email. Even 10-15 reviews on your top products changes buyer behavior significantly.
Search Search results for "funko pop" returned 0 visible product cards. The page title confirms the query was processed, but no items rendered. The Hydrogen SPA may need an explicit JS hydration pass before product cards mount. Technical 🟡 Warning Test the search page on a JS-disabled browser and in Google Search Console's URL inspection tool. If results only appear after JS runs, ensure the initial HTML from the server includes product data (SSR, not client-only fetch).
robots.txt Crawl-delay: 10 applied globally. For a store with a large catalog this slows Google's ability to discover and re-index new arrivals. No AI crawler directives (GPTBot, ClaudeBot, PerplexityBot) are present. SEO 🟢 Info Google ignores Crawl-delay — it doesn't hurt you with Google specifically. However, you may want to add directives for third-party AI crawlers if you have a preference about whether ChatGPT, Perplexity, etc. can index your content.
Product pages Product structured data is missing GTIN (barcode) and MPN fields. These are important for Google Shopping eligibility and product knowledge graph matching. SEO / GEO 🟢 Info Your supplier feed from Alliance Entertainment (aent-m.com) likely includes ISBNs, UPCs, and EANs. Pass these through to the Product schema as gtin13 or gtin. This unlocks Google Shopping's rich product results.
Blog Blog articles have no visible author byline or publication date in the rendered HTML. Articles like the 2000-word Sci-Fi guide lack attribution, which weakens the E-E-A-T signals Google uses to assess content quality. GEO 🟢 Info Add author name, publication date, and ideally a short author bio to blog post templates. The Hydrogen blog template supports this natively through Shopify's metafields.
Cart The "Go to checkout" button is blocked by a hidden div with pointer-events, making it unclickable for automated agents and potentially problematic for assistive technology users who navigate via keyboard. UX / Accessibility 🟢 Info Inspect the hidden overlay div that sits above the checkout button on desktop. It appears to be a layout artifact from the dual-column cart layout. Remove the pointer-event interception or restructure the z-index stack.
Organization schema The Organization schema in JSON-LD includes all seven social profiles via sameAs, which is good. However, it lacks foundingDate, founders, address, and the contactPoint is missing telephone and email fields. GEO 🟢 Info Enrich the Organization schema with foundingDate, address (you have it: 4604 49th St N Ste 1054, St. Petersburg FL), and contactPoint with contactType "customer service" and an email or phone.
04

GEO audit — AI search readiness

38

/ 100

Not AI-Optimized

The localhost URL bug means all structured data, canonical signals, and og metadata point to a non-existent domain. Until that's fixed, AI systems that rely on structured signals to understand and cite the store are working with broken inputs. The content itself has potential — the blog has real articles and product descriptions are reasonably detailed — but infrastructure problems are holding everything back.

9 GEO dimensions scored

Non-commodity content quality

Product descriptions appear to be syndicated from the Alliance Entertainment distributor feed (images come from mediacdn.aent-m.com). The text is readable but generic — it doesn't reflect first-hand curation, collector context, or anything a buyer couldn't find on Amazon. The blog has some genuine depth (the Sci-Fi guide runs 2,000+ words) but lacks author attribution.

32

Entity clarity and brand authority

No About page exists. No founder story. No brand origin. The Organization schema has correct social profiles via sameAs but the URL is localhost:3000. Google's Knowledge Graph has nothing solid to attach to this brand name beyond a few social profiles.

22

Technical crawlability and indexing

Robots.txt is well-structured. Sitemap.xml is present and linked. Meta robots on all checked pages is set to index,follow with max-snippet:-1 — no nosnippet directives found. The main crawlability concern is whether JS-rendered content (search results, some product grids) is present in the initial HTML.

58

Content structure and semantic HTML

Product pages have a sensible H1 → H2 hierarchy (H1 for product name, H2 for Highlights, Specifications, About this item). The homepage has no H1 at all. Blog articles lack structured heading hierarchies. Semantic elements (article, section, nav) are used in some places but inconsistently.

48

Structured data (supporting role)

Product schema is present with name, description, brand, SKU, and offers. Organization and WebSite schemas are also present. The fatal flaw is that all URLs inside these schemas point to localhost:3000, rendering them useless for Google's indexing and Shopping eligibility checks.

30

Multimodal readiness

Product images have meaningful alt text (e.g., "Alien (4K Ultra HD)"). Images are served from Shopify CDN with proper dimensions. No video content anywhere on the store, which is a missed opportunity for a movies/music/collectibles brand. No YouTube embeds on product pages.

44

Query fan-out readiness

Blog has articles on buying guides and collector topics (romantasy books, BL manga, beach reads, sci-fi movies). These naturally answer related queries. But product pages themselves don't address common collector questions — condition, edition differences, rarity, or compatibility. No FAQ content anywhere.

40

Google Merchant Center and Business Profile

No Google Shopping tracking events detected in the page scripts. GTM and GA4 are present but no gtag purchase events or Google Ads remarketing tags were observed. No product feed verification detected. The physical business address (St. Petersburg, FL) suggests a Google Business Profile may be worth setting up.

20

Agentic experience readiness

The Add to Cart button is accessible and has a clear label. Navigation links are properly anchored. The checkout button on the cart page is blocked by a hidden overlay div that intercepts pointer events — an agent or accessibility tool trying to complete a purchase would fail at this step.

45

GEO action plan

Action Difficulty Impact
Fix PUBLIC_STORE_DOMAIN env variable so all canonical/JSON-LD/og URLs resolve to surprisecastle.com Easy High
Create an About page with founder story, mission, business address, and what differentiates Surprise Castle from general marketplaces Easy High
Strip HTML tags from meta description fields on product pages so snippets render cleanly in search results Easy High
Add GTIN/UPC data from Alliance Entertainment feed to Product schema for Google Shopping eligibility Medium High
Write collector-specific product descriptions for top 20 products (condition, edition notes, who it's for) rather than relying solely on distributor copy Medium High
Add author bylines and publication dates to all blog posts; write short author bio Easy Medium
Add FAQ content to collection pages (e.g., "What's the difference between Blu-ray and 4K UHD?") to address natural collector questions Medium Medium
Connect to Google Merchant Center with a complete product feed; configure Shopping campaigns Medium Medium
Fix the checkout button pointer-event issue in the cart so the purchase flow is accessible and agent-navigable Easy Medium

Common GEO myths — don't waste time on these

  • Creating an llms.txt file won't get you into Google AI features. Google has explicitly said this isn't needed or used by their systems.
  • Breaking content into tiny chunks for "AI consumption" is a waste of time. Google's models read full pages and understand context across long documents.
  • Stuffing product pages with long-tail keyword variations doesn't help. AI search understands synonyms and general meaning — it doesn't need the exact phrase to find your page.
  • Chasing inauthentic citations or mentions across the web gets flagged by spam systems. Earn links through real content and partnerships.
05

Conversion funnel scorecard

Stage 1

Awareness

62

  • PartialHomepage value prop is partially clear — the tagline area shows category icons (Books, Movies, Music) but doesn't explain what makes Surprise Castle worth choosing over Amazon or eBay.
  • FailNo H1 on homepage. First crawlable heading is H2 "All Categories" — doesn't establish brand identity or audience.
  • PassTrust signals in hero area: "Secure Payment," "Free Shipping," "Easy Return 60 day," and "Fast Support" banners are visible above the fold on mobile.
  • PassTrending Products and New Arrivals sections create immediate catalog depth. Collector buyers can see variety without scrolling far.
  • PartialSearch bar is present but it's inside the header with no prominent placement. Collector searches (e.g., specific Funko POPs, ISBNs, catalog numbers) are the primary discovery path and deserve more prominence.

Stage 2

Consideration

55

  • PassCollection pages (Movies & TV, Toys & Collectibles) have filter options (Availability, Price). Filters work and product grids render correctly.
  • FailProduct cards in collections show no ratings or review counts. A 0-star or unrated product looks untrustworthy next to competitors showing star badges.
  • PassProduct pages have structured Highlights and Specifications sections. The Alien (4K Ultra HD) page lists format, runtime, starring cast, and director — solid for a collector.
  • FailZero reviews anywhere. The review section exists but is completely empty across all tested products. This is the biggest single conversion barrier on the site.
  • PartialWishlist functionality is present (heart icon on product cards) but there's no social sharing or "notify me when in stock" feature visible.

Stage 3

Purchase

58

  • PassAdd to Cart button is clearly visible, enabled, and functional. No variant selection required for tested products — one-click add worked correctly.
  • PassCart shows a free-shipping progress bar ("You're $53.01 away from free shipping"), a discount code field, and an order notes textarea. These are smart friction reducers.
  • FailCheckout button on the cart page is blocked by an invisible overlay div that intercepts pointer events. The button cannot be clicked reliably. This is a critical bug that likely causes cart abandonment.
  • FailNo cross-sell or upsell offers anywhere in the cart. No "Customers who bought this also liked..." and no bundle offers on product pages. For a catalog this broad, this is significant missed revenue.
  • PartialPayment options are not displayed on the product page or in the cart. Shopify Checkout will handle this, but showing payment icons (PayPal, Visa, etc.) earlier reduces uncertainty.

Stage 4

Retention

48

  • PassShopify Inbox live chat is installed and visible. A customer who has a post-purchase question can reach support directly from the site.
  • PassTrack Order page exists and is linked from the footer. 60-day return policy is documented on the Shipping & Returns page.
  • FailNo visible email signup incentive on the storefront. The footer has a newsletter input but no offer (no "10% off your first order," no free guide). This limits list-building significantly.
  • FailNo loyalty program, points system, or repeat-buyer incentive. For collector-focused customers who buy regularly, there's no reason anchored to the store itself to come back vs. checking competitors.
  • PartialBlog ("Read Our Blog") is linked from the footer with regular content. This is good for repeat visits but needs author attribution and a subscription mechanism to convert readers into repeat buyers.
06

App stack audit

App / Service Purpose Perf Impact Est. Cost Verdict Savings
Shopify Inbox Live chat widget for customer support Low Free Keep
Google reCAPTCHA v3 Bot protection on contact form and login Low Free Keep
Sentry (React Router) Frontend error monitoring — already capturing hydration errors Low Free tier Keep
GA4 + Google Tag Manager Web analytics and tag management Medium Free Keep
Facebook Pixel Meta Ads retargeting and conversion tracking Low Free Keep
Alliance Entertainment Feed Product catalog data from aent-m.com distributor CDN Low Keep
DM Sans (Google Fonts) Custom typography via external CDN request Medium Free Optimize
Judge.me Reviews Product reviews and star ratings — currently missing entirely Low Free plan Add
Frequently Bought Together Cross-sell and upsell — no upsell mechanism exists today Low ~$9–19/mo Add
Total potential savings $0/mo · $0/yr

No paid app waste detected

The app footprint is lean. Only essential free tools are running, and performance impact is low. The opportunity isn't in cutting costs — it's in adding the right tools that don't exist yet. A reviews app (Judge.me's free plan handles this perfectly) and a cross-sell widget would have direct revenue impact without adding meaningful page weight. Also consider self-hosting DM Sans to eliminate the Google Fonts render-blocking request.

07

Theme and code quality

Theme / Framework

Shopify Hydrogen (custom)

React Router v10.39.0 · Tailwind CSS · Oxygen hosting · DM Sans font

Code health

52/100

Technical debt findings

  • Critical PUBLIC_STORE_DOMAIN environment variable not set in the Oxygen deployment. The Hydrogen app is generating all URLs from a default of http://localhost:3000. Every canonical tag, OG tag, and JSON-LD URL on the entire site is wrong. This single environment variable fix has the highest ROI of any change on this list.
  • Critical React hydration mismatch error #418 fires on every page. The server-rendered HTML doesn't match what the client expects during rehydration. Sentry is capturing these but they haven't been resolved. Check for server/client divergence in components that use browser-only APIs (localStorage, window, Date.now()) during SSR.
  • Warning PUBLIC_CHECKOUT_DOMAIN is also missing from environment variables (console error: "consent.checkoutDomain is required"). This likely affects the Shopify Privacy Banner and consent management, which has GDPR/CCPA compliance implications for US state laws.
  • Warning Cart page has a hidden div with hidden lg:flex lg:flex-col Tailwind classes that intercepts pointer events on the checkout button. The responsive layout is creating an invisible overlay on large screens. This causes checkout button click failures and needs a z-index or layout restructure.
  • Minor Google Fonts (DM Sans) is loaded from fonts.googleapis.com via a render-blocking request. Self-hosting the font files in the Oxygen asset bundle would eliminate this external DNS lookup and potential render-block on first load.
  • Minor HTML meta description field on product pages inserts the raw product description HTML (including <p> tags) without stripping markup. This is a template-level bug in the Hydrogen product route loader — the description string should be passed through a stripHtml utility before being placed in the <meta> tag.
08

Brand identity

Logo

Surprise Castle logo
Surprise Castle logo

Color palette

#045997

Primary / CTAs

#ffffff

Background

#f4f4f4

Surface / Dividers

#000000

Text / Ink

Brand consistency

Typography

Good

DM Sans is clean and readable. Used consistently across all pages.

Color usage

Needs work

Blue (#045997) appears on buttons, but the Add to Cart button renders with a near-white background — the brand color isn't consistently applied to primary actions.

Imagery style

Needs work

Product images are syndicated from the distributor CDN (aent-m.com) — functional but not brand-curated. No lifestyle photography or collector context shots.

Tone of voice

Needs work

Generic distributor copy. No collector personality in product descriptions. The brand name "Surprise Castle" suggests playfulness that isn't reflected in the content.

Brand story

Missing

No About page. No founder story. Visitors have no way to understand who runs this store or why they should trust it over a larger marketplace.

Logo readability

Good

Logo reads well on white backgrounds. The dark background test shows it doesn't invert cleanly — consider a light/white version for dark contexts.

09

Growth roadmap

Quick wins

Fix and ship fast

  • Set PUBLIC_STORE_DOMAIN=https://surprisecastle.com in Oxygen environment variables. Redeploy. This one change fixes every canonical, og:url, and JSON-LD URL on the entire site.
  • Set PUBLIC_CHECKOUT_DOMAIN in environment variables to resolve the consent management console error.
  • Fix the cart checkout button pointer-event overlay by adjusting the hidden div's z-index or removing the pointer-event interception from the desktop cart layout.
  • Strip HTML from product meta descriptions in the Hydrogen product route — one line of code using a stripHtml helper.
  • Remove the "Want to Collab?" footer link or create the /pages/collab page. A broken link in the footer of every page erodes trust.
  • Add an H1 tag to the homepage — even a visually hidden one ("Surprise Castle — Books, Movies, Music & Collectibles") establishes the page topic for search engines.
Medium term

Build trust and discovery

  • Install Judge.me (free plan) and configure post-purchase review request emails. Target 15–20 reviews on your top 10 most-viewed products first. Star ratings on product cards change buyer behavior more than almost any other UX change.
  • Create a real About page with the founding story, the team behind Surprise Castle, the St. Petersburg FL address, and what makes this store different from Amazon. 300–500 words is enough to establish entity clarity for Google's Knowledge Graph.
  • Add an email signup incentive (10% off first order, or a free collector's guide) to the footer newsletter form. Right now it's a blank input with no reason to subscribe.
  • Pass GTIN/UPC data from the Alliance Entertainment feed through to Product schema as gtin13. This unlocks Google Shopping rich results and Merchant Center eligibility.
  • Investigate and resolve the React hydration error #418 using the Sentry dashboard. Check Sentry for the specific component and line number causing the server/client mismatch.
  • Test search results with JavaScript disabled. If the product grid doesn't render in the initial HTML, ensure the Hydrogen search route returns product data server-side so Googlebot doesn't see an empty results page.
Strategic

Compete and grow

  • Connect to Google Merchant Center with a complete product feed including prices, availability, GTINs, and high-quality images. This is the primary channel for appearing in Google Shopping results and AI product recommendations.
  • Write collector-specific product descriptions for the top 50 products — not just distributor copy. Add context: condition notes, edition differences, who the product is for, what it's worth to a collector. This is the single biggest GEO improvement available for AI citation potential.
  • Add a cross-sell / upsell widget to product pages and cart (e.g., "Customers also bought" or "Complete the set"). For a catalog spanning movies, music, books, and collectibles, there are natural bundle opportunities.
  • Build a loyalty program (Smile.io or similar) with points for purchases, reviews, and social shares. Repeat collectors are Surprise Castle's most valuable customer segment and there's currently no reason anchored to the store to return.
  • Develop collection-level buying guides — e.g., "How to Start a Funko POP Collection," "Best 4K UHD Films for Home Theater" — that target informational queries collectors actually search and naturally link to products.
  • Self-host the DM Sans font in the Oxygen asset bundle to eliminate the Google Fonts render-blocking external request and shave time off the first contentful paint.