Relevance
Technical SEO Audit Specialist using Firecrawl

Technical SEO Audit Specialist using Firecrawl

agent Agent

Creator

Connected apps

Google Search
Firecrawl web scraper

Description

Comprehensive technical SEO auditing agent that crawls websites, analyzes technical SEO factors, and delivers actionable improvement reports with specific recommendations for better search engine visibility and performance.

Clones

Clone
8

Category

Example Task

Technical SEO Audit Specialist using Firecrawl
Firecrawl web scraper
Firecrawl web scraper
Firecrawl web scraper
Firecrawl web scraper
Firecrawl web scraper
Firecrawl web scraper
Firecrawl web scraper
Firecrawl web scraper
Firecrawl web scraper
Firecrawl web scraper
Firecrawl web scraper
Firecrawl web scraper
Firecrawl web scraper
Page Speed Insights
Page Speed Insights
Technical SEO Audit Specialist using Firecrawl

Technical SEO Audit Specialist using Firecrawl

provided an update

Technical SEO Audit: https://marketplace.relevanceai.com/

Executive Summary

  • Overall site health score (1–10): 7.5
  • Top 3 critical issues
    1. Broken hreflang: homepage advertises an es locale that 404s (https://marketplace.relevanceai.com/es/ returns 404).
    2. Sitemap issues: robots.txt points to /sitemap.xml which times out; /sitemap_index.xml returns a 404 HTML page.
    3. Inconsistent canonicalization of search listing: /search self-resolves to homepage via canonical, while category listings self-canonicalize. This can dilute relevance and cause duplicate signals.
  • Estimated impact
    • Fixing hreflang prevents international mis-signals and possible demotions due to invalid language alternates.
    • Restoring a valid sitemap coverage will improve discovery and freshness, especially for new/updated listings/builders.
    • Correct canonicalization on search templates will prevent index bloat or dilution and improve SERP clarity for listing pages.
    • Page speed improvements (JS reduction, image optimization, font strategy) can improve Core Web Vitals and CTR.

Critical Issues (High Priority)

  1. Broken hreflang on homepage
  • Evidence: Homepage contains hreflang links to en and es. Requesting https://marketplace.relevanceai.com/es/ returns a 404 “Page not found”.
  • Affected pages: Homepage (and any page with the same hreflang set, if applied globally).
  • Why it matters: Invalid hreflang targets can cause search engines to ignore language alternates, and may waste crawl budget on 404s.
  • Remediation
    • If no localized Spanish content exists: remove hreflang="es" entirely.
    • If you intend to ship Spanish: publish the localized pages at /es/ and ensure each page has a reciprocal hreflang pair.
    • Code example (remove invalid):
    • Code example (correct pair, once translated):
  1. Sitemap referenced in robots.txt is unavailable
  • Evidence:
  • Affected: Full site discovery and update cadence.
  • Remediation
    • Generate a valid XML sitemap (or sitemap index), include only canonical, indexable URLs (homepage, listings, builder profiles, builders index; avoid internal search result pages).
    • Ensure it’s served fast (static build or fast server-side generation) and update robots.txt to the correct URL(s).
    • Sample structure (sitemap index): https://marketplace.relevanceai.com/sitemaps/sitemap-pages.xml https://marketplace.relevanceai.com/sitemaps/sitemap-listings.xml https://marketplace.relevanceai.com/sitemaps/sitemap-builders.xml
    • robots.txt:
      Sitemap: https://marketplace.relevanceai.com/sitemap_index.xml
    • Validation: Fetch live XML in browser; test with Search Console “Sitemaps”.
  1. Inconsistent canonicalization of search pages
  • Evidence:
    • /search (all agents): canonical points to homepage (https://marketplace.relevanceai.com/), yet the page is indexable (meta robots index, follow). Title is generic; pagination exists with rel next/prev.
    • /search?category=sales: self-canonical and indexable (good).
  • Why it matters: Canonical to homepage can confuse search engines, causing duplication and diluted relevance for “All Agents” results.
  • Remediation options (pick one strategy sitewide):
    • Option A (index a canonical listing hub): Make /search the canonical, with a descriptive title/description, and ensure all refined variants (sort, page) self-canonical to their own page or to the base /search (depending on content uniqueness). Keep meta robots index, follow.
    • Option B (noindex search results): Add to /search and any parameterized result pages you do not want indexed, keep category landing pages indexable with self-canonical.
  • Recommended for marketplaces: Keep category pages indexable/self-canonical; either noindex /search or ensure /search self-canonical with unique metadata.
  • Code example (noindex search):
  • Code example (indexable search):

Important Improvements (Medium Priority)

  1. Open Graph/Twitter image consistency
  • Evidence: Homepage OG/Twitter image observed as an SVG icon in one scrape; elsewhere OG.png. Prefer a large raster (1200×630) for consistent previews.
  • Fix: Ensure uniform across templates.
  1. Schema markup consistency on listing/category
  • Evidence: Listing detail pages include Product and BreadcrumbList JSON-LD (good). Search base shows ItemList and SearchAction. Some category pages returned no jsonld_types.
  • Fix: Ensure category templates output ItemList JSON-LD with item elements linking to listing URLs.
    {
    "@context": "https://schema.org",
    "@type": "ItemList",
    "itemListElement": [
    {"@type": "ListItem","position": 1,"url": "https://marketplace.relevanceai.com/listing/..."},
    ...
    ]
    }
  1. Titles and meta descriptions
  • Evidence: /search’s title came through as “Acme Marketplace” (generic). Category titles are good (“Sales - Acme Marketplace”).
  • Fix: Ensure each template has unique, descriptive and meta description. For /search (All Agents): title like “All AI Agents – Acme Marketplace” and a matching meta description.</li> </ul> <ol start="4"> <li>Pagination hygiene</li> </ol> <ul> <li>Evidence: Builders index and category/search include rel prev/next and page query parameters.</li> <li>Fix: Keep canonical to the current page for paginated series; retain rel prev/next (while Google no longer uses them as signals, they help UX and some crawlers). Ensure each page shows content unique to that page (not repeating the first page’s items).</li> </ul> <p>Enhancement Opportunities (Low Priority)</p> <ul> <li>Homepage schema: consider adding Organization and BreadcrumbList JSON-LD for richer entity understanding.</li> <li>Add a site-level WebSite schema with SearchAction (if not already uniform) to enable sitelinks search in SERP.</li> <li>Internal linking: From listing pages, link clearly to category pages and builder profile pages (already seen via breadcrumb and “More by” sections—keep strengthening).</li> <li>Consider curated category landing content (intro paragraph, FAQs) to improve topical relevance and long-tail capture (FAQPage schema if appropriate).</li> </ul> <p>Mobile & Performance (Core Web Vitals via PageSpeed Insights)<br>Tested pages:</p> <ul> <li>Homepage: opportunities identified<ul> <li>Reduce unused JS (e.g., /_astro/client..., Tech Solutions Inc. scripts); defer analytics until after user interaction or idle.</li> <li>Avoid render-blocking resources:<ul> <li>Inline critical CSS or use media/async techniques.</li> <li>Preload key font files; add font-display: swap.</li> <li>Example:<link rel="preload" href="/fonts/inter-var.woff2" as="font" type="font/woff2" crossorigin> @font-face { font-family: Inter; src: url('/fonts/inter-var.woff2') format('woff2'); font-display: swap; }</li> </ul> </li> <li>Optimize images:<ul> <li>Serve responsive images with width/height attributes and sizes/srcset; ensure avatars/thumbnails are not 1–1.5MB for 20–48px display.<br><img src="/img/agent-48.webp" width="48" height="48" srcset="/img/agent-48.webp 48w, /img/agent-96.webp 96w" sizes="(max-width: 600px) 48px, 48px" loading="lazy" decoding="async"></li> </ul> </li> <li>Preconnect to third parties you must load (fonts.gstatic, ph.relevanceai.com) and defer the rest; remove duplicated JS and legacy transpiled bundles where possible.</li> </ul> </li> <li>Listing detail (example): generally strong LCP/CLS, but:<ul> <li>Reduce total payload (~3.2MB) via image compression and script trimming.</li> <li>Minify/trim unused CSS/JS; avoid non-composited animations.</li> <li>Eliminate unnecessary lazy-loading for the LCP image (ensure discoverable in HTML).</li> </ul> </li> </ul> <p>I. Sitemaps & Robots.txt</p> <ul> <li>Current:<ul> <li>robots.txt allows all; shows Sitemap: <a href="https://marketplace.relevanceai.com/sitemap.xml">https://marketplace.relevanceai.com/sitemap.xml</a></li> <li>Disallow examples are commented out; fine.</li> </ul> </li> <li>Issues: sitemap.xml unavailable; sitemap_index.xml is 404.</li> <li>Fix:<ul> <li>Publish sitemaps and point robots.txt to the correct location (e.g., Sitemap: <a href="https://marketplace.relevanceai.com/sitemap_index.xml">https://marketplace.relevanceai.com/sitemap_index.xml</a>).</li> <li>Include main pages: homepage, builders index, builder profiles, listing detail pages. Exclude search results (/search, unless you want them indexed and canonicalized).</li> <li>Validate in Search Console.</li> </ul> </li> </ul> <p>Technical Implementation Guide</p> <ul> <li><p>Hreflang</p> <ul> <li>Remove invalid hreflang references immediately. Only include alternates that exist and reciprocate.</li> <li>Validation: Use the Hreflang Tags Testing Tool; check that each alternate 200s and contains reciprocal link tags.</li> </ul> </li> <li><p>Canonicalization for search templates</p> <ul> <li>Decide strategy:<ul> <li>Indexable: Use self-canonical and unique metadata; keep prev/next.</li> <li>Noindex: Add <meta name="robots" content="noindex,follow"> for /search and parameterized versions; keep category pages indexable.</li> </ul> </li> <li>Validation: View source to ensure only one canonical tag present and it matches intended URL.</li> </ul> </li> <li><p>Sitemap generation (Astro/static)</p> <ul> <li>During build, generate sitemaps from your routes (pages, listing data, builder IDs).</li> <li>Example Node build snippet (pseudo):<br>const urls = [...staticPages, ...listings.map(u=><code>/listing/${u.id}</code>), ...builders.map(u=><code>/builders/${u.id}</code>)];<br>// Write to /dist/sitemaps/*.xml with lastmod</li> <li>Deploy; confirm 200 and proper content-type (application/xml).</li> </ul> </li> <li><p>JSON-LD</p> <ul> <li>Ensure category pages output ItemList JSON-LD (see example above).</li> <li>Listing pages already include Product and BreadcrumbList JSON-LD (good). Verify required Product fields (name, description, image, brand, offers).</li> </ul> </li> <li><p>Page speed tooling and steps</p> <ul> <li>Bundle analysis: run a JS treemap, remove duplicate/legacy JS.</li> <li>Defer analytics: load Tech Solutions Inc. only after user interaction or via requestIdleCallback when possible:<br>window.addEventListener('load', () => {<br> requestIdleCallback(() => { /* load analytics */ });<br>});</li> <li>Fonts: self-host Inter, preload WOFF2, set font-display: swap.</li> <li>Images: audit largest images; serve AVIF/WebP, correct sizes, width/height attributes to reduce CLS.</li> <li>Validate: Use PSI and Web Vitals field data, re-test top templates (home, category, listing, builder profile).</li> </ul> </li> </ul> <p>Tool recommendations for ongoing monitoring</p> <ul> <li>Google Search Console (coverage, sitemaps, enhancement reports)</li> <li>PageSpeed Insights + Lighthouse CI on key templates</li> <li>Log-based monitoring of 404s (catch any future hreflang or internal link issues)</li> <li>Structured Data Testing Tool / Rich Results Test for JSON-LD validation</li> </ul> <p>Validation steps to confirm fixes</p> <ul> <li>Crawl key templates with a fetch-and-render (ensure meta robots, canonical, hreflang, JSON-LD appear in the server-rendered HTML).</li> <li>Re-test with PSI: target LCP < 2.5s, CLS < 0.1, TBT as low as possible.</li> <li>Re-fetch sitemaps in GSC; check indexed pages match intent (exclude search if noindex, include listings/builders).</li> </ul> <p>Observed page type coverage (sampled)</p> <ul> <li>Homepage: indexable, canonical to self, hreflang included (fix needed), JSON-LD WebSite present.</li> <li>Builders index: indexable, self-canonical, rel prev/next present.</li> <li>Builder profile pages: indexable, self-canonical, Organization JSON-LD present, rel prev/next on pagination present.</li> <li>Listing detail pages: indexable, self-canonical, Product + BreadcrumbList JSON-LD present (good).</li> <li>Search base (/search): indexable but canonical to homepage (inconsistent); pagination exists; adjust per strategy.</li> <li>Category search (/search?category=sales): indexable, self-canonical, pagination present (good).</li> <li>Robots.txt: allows all; sitemap listed but unavailable (fix).</li> <li>Sitemap endpoints: /sitemap.xml timeouts; /sitemap_index.xml 404 (fix).</li> </ul> <p>Prioritized action plan (summary)</p> <ul> <li>Today: Remove invalid hreflang es or ship /es/; fix /search canonical (self-canonical or noindex); restore working sitemaps and update robots.txt.</li> <li>This week: Normalize OG/Twitter images; ensure ItemList JSON-LD on category pages; ensure unique page titles/meta; verify pagination canonicals.</li> <li>Next 1–2 weeks: Performance pass (JS trimming, defer analytics, font strategy, image optimization); implement build-time sitemap generation; add Organization schema on homepage if desired.</li> </ul> <p>If you want, I can provide a ready-to-drop HTML head snippet for each template (home, search, category, listing) reflecting the above recommendations.</p> </div></div></div></div><div class="px-xxs py-s"><button type="button" class="button group/button outline-none shrink-0 focus:!outline-none active:ring-[1.5px] focus:ring-[1.5px] focus:shadow-[0_0_0_1px_rgba(0,0,0,0)] active:!outline-none transition-all duration-100 disabled:cursor-not-allowed disabled:bg-background-elevation-sunken disabled:!shadow-none disabled:!border-transparent disabled:!text-text-disabled disabled:active:ring-0 disabled:focus:shadow-0 disabled:active:!bg-transparent inline-flex items-center select-none cursor-pointer py-xs px-m paragraph-medium-m gap-xs ghost text-text-secondary hover:bg-background-hover hover:text-text-primary focus:ring-border-focus focus:shadow-border-focus active:!bg-background-active active:!text-text-primary disabled:bg-transparent rounded-radius-xs !pr-s mt-s">Show more<svg class="icon max-w-full aspect-square shrink-0 icon-m text-icon-tertiary group-hover/button:text-icon-primary transition-transform " width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg></button></div></div></div></div></div></div><div class="absolute border-l-[1.5px] border-l-border-default-solid border-dashed -z-10" style="left:18px;top:0px;height:calc(100% - 36px)"></div></div></div></div></div></div><div class="absolute w-full h-[100px] left-0 bottom-0 pointer-events-none bg-gradient-to-t from-background-primary to-transparent z-10"></div></div><!--astro:end--></astro-island> </div> <!-- Fallback Illustration (only if no media and no example task) --> <!-- Description --> <div class="mb-xl"> <div class="prose prose-sm prose-indigo max-w-none"><p>Comprehensive technical SEO auditing agent that crawls websites, analyzes technical SEO factors, and delivers actionable improvement reports with specific recommendations for better search engine visibility and performance.</p> </div> </div> </div> </div> <!-- Reviews Section (Full Width) --> <!-- More by Creator (Full Width) --> <!-- You Might Also Like (Full Width) --> <div class="mt-xl"> <h3 class="heading-xl text-text-primary mb-l">You might also like</h3> <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-l"> <a href="/listing/e05c4587-1ea0-469e-8cda-0a0a2f7300ff" class="block h-full overflow-visible listing-card-link" data-listing-id="e05c4587-1ea0-469e-8cda-0a0a2f7300ff" data-listing-name="Gmail & TickTick Task Assistant" data-entity-type="agent" data-builder-id="0e6ddde9-7cbb-499c-a7cb-c7fe7eb4e085" data-builder-name="Luke Wilson" data-clone-count="0" data-astro-cid-m5gpva63> <div class="border border-border-default rounded-radius-m hover:bg-gray-50 hover:shadow-md transition-all duration-200 h-full p-l flex flex-col overflow-visible" data-astro-cid-m5gpva63> <!-- Top section: App Icon and Vendor Apps --> <div class="flex items-start justify-between mb-l overflow-visible" data-astro-cid-m5gpva63> <!-- App Icon --> <div class="w-12 h-12 bg-background-secondary rounded-radius-m flex-shrink-0 overflow-hidden" data-astro-cid-m5gpva63> <img src="https://cdn.jsdelivr.net/gh/RelevanceAI/content-cdn@latest/agents/agent_avatars/agent_avatar_22.svg" alt="Gmail & TickTick Task Assistant" class="w-full h-full object-cover" loading="lazy" data-astro-cid-m5gpva63> </div> <!-- Vendor Apps in Cards (Top Right) --> <div class="flex items-center gap-xs max-w-[60%] flex-shrink-0 overflow-visible" data-astro-cid-m5gpva63> <div class="group relative vendor-icon-wrapper" title="Gmail - Add Label to Email" data-astro-cid-m5gpva63> <div class="bg-background-secondary rounded-radius-xs p-xxs" data-astro-cid-m5gpva63> <img src="https://assets.pipedream.net/s.v0/app_OQYhq7/logo/orig" alt="Gmail - Add Label to Email" class="w-5 h-5 flex-shrink-0" title="Gmail - Add Label to Email" data-astro-cid-m5gpva63> </div> <div class="vendor-tooltip-container hidden md:block absolute top-full left-1/2 -translate-x-1/2 mt-2 opacity-0 group-hover:opacity-100 transition-opacity duration-200 pointer-events-none z-[9999]" data-astro-cid-m5gpva63> <div class="px-3 py-1.5 bg-gray-900 text-white text-xs rounded-md shadow-lg whitespace-nowrap" data-astro-cid-m5gpva63> Gmail - Add Label to Email </div> </div> </div><div class="group relative vendor-icon-wrapper" title="TickTick - Create Complete Task (Custom API)" data-astro-cid-m5gpva63> <div class="bg-background-secondary rounded-radius-xs p-xxs" data-astro-cid-m5gpva63> <img src="https://assets.pipedream.net/s.v0/app_XGehK5/logo/orig" alt="TickTick - Create Complete Task (Custom API)" class="w-5 h-5 flex-shrink-0" title="TickTick - Create Complete Task (Custom API)" data-astro-cid-m5gpva63> </div> <div class="vendor-tooltip-container hidden md:block absolute top-full left-1/2 -translate-x-1/2 mt-2 opacity-0 group-hover:opacity-100 transition-opacity duration-200 pointer-events-none z-[9999]" data-astro-cid-m5gpva63> <div class="px-3 py-1.5 bg-gray-900 text-white text-xs rounded-md shadow-lg whitespace-nowrap" data-astro-cid-m5gpva63> TickTick - Create Complete Task (Custom API) </div> </div> </div> </div> </div> <!-- App Name --> <h3 class="heading-xl text-text-primary mb-s font-semibold" data-astro-cid-m5gpva63>Gmail & TickTick Task Assistant</h3> <!-- Rating and Clone count --> <div class="flex items-center gap-x-xs mb-s" data-astro-cid-m5gpva63> <img src="/icons/pd/agent.svg" alt="agent" class="w-4 h-4" data-astro-cid-m5gpva63> <span class="paragraph-regular-m text-text-secondary" data-astro-cid-m5gpva63> Agent </span> <span class="paragraph-regular-m text-text-secondary" data-astro-cid-m5gpva63>•</span> <div class="flex items-center" data-astro-cid-m5gpva63> <img src="/icons/pd/copy.svg" alt="Clone" class="w-4 h-4 text-text-secondary" style="filter: brightness(0) saturate(100%) invert(60%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(90%) contrast(80%);" data-astro-cid-m5gpva63> </div> <span class="paragraph-regular-m text-text-secondary" data-astro-cid-m5gpva63>0</span> </div> <!-- Description --> <div class="flex-1 mb-l" data-astro-cid-m5gpva63> <p class="paragraph-regular-m text-text-secondary line-clamp-2" data-astro-cid-m5gpva63> ## Arlo - Your AI Inbox Assistant 🚀 Arlo transforms your Gmail inbox into an intelligent task management system. It analyses every email, identifies actionable requests, and automatically creates perfectly formatted tasks in TickTick complete with accurate due dates, priority levels, and check items. Fully customizable to any workflow. - 📥 Creates tasks with email summary, thread link, and check items - ⚡ Keeps your list focused by filtering out non-actionable emails - 📅 Converts natural language deadlines to accurate due dates - 🎯 Sorts and routes tasks by priority using time-based logic - ✅ Two-way sync removes Gmail labels when you complete tasks ## Getting Started After cloning, go to the run tab in the agent to view the full setup instructions and a step-by-step video guide. --- Current Version: 1.0 Creator 👉 https://link.me/lukejohnwilson Made with ❤️ and ☕ Built for the Liam Ottley × AAA Accelerator Hackathon </p> </div> <!-- Bottom section: Builder Profile and Price --> <div class="flex items-center justify-between mt-auto" data-astro-cid-m5gpva63> <!-- Builder Profile --> <div class="flex items-center space-x-xs" data-astro-cid-m5gpva63> <astro-island uid="4apq9" component-url="/_astro/BuilderAvatar.idD99amA.js" component-export="default" renderer-url="/_astro/client.BBKXMyYs.js" props="{"name":[0,"Luke Wilson"],"profilePictureUrl":[0,"https://d3vsyq079t1eom.cloudfront.net/marketplace/images/0e6ddde9-7cbb-499c-a7cb-c7fe7eb4e085/profile/a7349509-da99-4624-a21a-2f15d27e0336.webp"],"size":[0,"s"],"data-astro-cid-m5gpva63":[0,true]}" ssr client="only" opts="{"name":"BuilderAvatar","value":"react"}"></astro-island> <span class="paragraph-regular-m text-text-secondary" data-astro-cid-m5gpva63>Luke Wilson</span> </div> <!-- Price (Bottom Right) --> <div data-astro-cid-m5gpva63> <span class="paragraph-regular-m text-text-secondary" data-astro-cid-m5gpva63> Free </span> </div> </div> </div> </a> <a href="/listing/fb85de3d-bb4f-4d57-b4b8-27cea441f6b6" class="block h-full overflow-visible listing-card-link" data-listing-id="fb85de3d-bb4f-4d57-b4b8-27cea441f6b6" data-listing-name="WhatsApp AI Agent Template" data-entity-type="agent" data-builder-id="6c363790-461b-490f-81fc-086b5b5bc559" data-builder-name="Relevance AI" data-clone-count="13" data-astro-cid-m5gpva63> <div class="border border-border-default rounded-radius-m hover:bg-gray-50 hover:shadow-md transition-all duration-200 h-full p-l flex flex-col overflow-visible" data-astro-cid-m5gpva63> <!-- Top section: App Icon and Vendor Apps --> <div class="flex items-start justify-between mb-l overflow-visible" data-astro-cid-m5gpva63> <!-- App Icon --> <div class="w-12 h-12 bg-background-secondary rounded-radius-m flex-shrink-0 overflow-hidden" data-astro-cid-m5gpva63> <img src="https://cdn.jsdelivr.net/gh/RelevanceAI/content-cdn@latest/agents/agent_avatars/agent_avatar_13.svg" alt="WhatsApp AI Agent Template" class="w-full h-full object-cover" loading="lazy" data-astro-cid-m5gpva63> </div> <!-- Vendor Apps in Cards (Top Right) --> <div class="flex items-center gap-xs max-w-[60%] flex-shrink-0 overflow-visible" data-astro-cid-m5gpva63> <div class="group relative vendor-icon-wrapper" title="Create Google calendar event" data-astro-cid-m5gpva63> <div class="bg-background-secondary rounded-radius-xs p-xxs" data-astro-cid-m5gpva63> <img src="https://cdn.jsdelivr.net/gh/RelevanceAI/content-cdn@latest/vendors/icons/google-calendar.svg" alt="Create Google calendar event" class="w-5 h-5 flex-shrink-0" title="Create Google calendar event" data-astro-cid-m5gpva63> </div> <div class="vendor-tooltip-container hidden md:block absolute top-full left-1/2 -translate-x-1/2 mt-2 opacity-0 group-hover:opacity-100 transition-opacity duration-200 pointer-events-none z-[9999]" data-astro-cid-m5gpva63> <div class="px-3 py-1.5 bg-gray-900 text-white text-xs rounded-md shadow-lg whitespace-nowrap" data-astro-cid-m5gpva63> Create Google calendar event </div> </div> </div><div class="group relative vendor-icon-wrapper" title="Google Search" data-astro-cid-m5gpva63> <div class="bg-background-secondary rounded-radius-xs p-xxs" data-astro-cid-m5gpva63> <img src="https://cdn.jsdelivr.net/gh/RelevanceAI/content-cdn@latest/vendors/icons/google.svg" alt="Google Search" class="w-5 h-5 flex-shrink-0" title="Google Search" data-astro-cid-m5gpva63> </div> <div class="vendor-tooltip-container hidden md:block absolute top-full left-1/2 -translate-x-1/2 mt-2 opacity-0 group-hover:opacity-100 transition-opacity duration-200 pointer-events-none z-[9999]" data-astro-cid-m5gpva63> <div class="px-3 py-1.5 bg-gray-900 text-white text-xs rounded-md shadow-lg whitespace-nowrap" data-astro-cid-m5gpva63> Google Search </div> </div> </div> </div> </div> <!-- App Name --> <h3 class="heading-xl text-text-primary mb-s font-semibold" data-astro-cid-m5gpva63>WhatsApp AI Agent Template</h3> <!-- Rating and Clone count --> <div class="flex items-center gap-x-xs mb-s" data-astro-cid-m5gpva63> <img src="/icons/pd/agent.svg" alt="agent" class="w-4 h-4" data-astro-cid-m5gpva63> <span class="paragraph-regular-m text-text-secondary" data-astro-cid-m5gpva63> Agent </span> <span class="paragraph-regular-m text-text-secondary" data-astro-cid-m5gpva63>•</span> <div class="flex items-center" data-astro-cid-m5gpva63> <img src="/icons/pd/copy.svg" alt="Clone" class="w-4 h-4 text-text-secondary" style="filter: brightness(0) saturate(100%) invert(60%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(90%) contrast(80%);" data-astro-cid-m5gpva63> </div> <span class="paragraph-regular-m text-text-secondary" data-astro-cid-m5gpva63>13</span> </div> <!-- Description --> <div class="flex-1 mb-l" data-astro-cid-m5gpva63> <p class="paragraph-regular-m text-text-secondary line-clamp-2" data-astro-cid-m5gpva63> Managing customer chats, bookings, and info requests on WhatsApp can get messy fast. The WhatsApp AI Agent keeps things smooth by handling messages, scheduling, and responses intelligently. ## What It Does - Understands intent and context, not just keywords - Books meetings via Google Calendar - Searches the web for real-time info - Manages threads to keep chats organized - Adapts tone for professional, human replies - Protects privacy with no data stored beyond the chat ## Benefits - Faster replies and fewer mistakes - Everything managed in WhatsApp—no app switching - Consistent tone and reduced workload The WhatsApp AI Agent simplifies communication so you can focus on higher-value work. </p> </div> <!-- Bottom section: Builder Profile and Price --> <div class="flex items-center justify-between mt-auto" data-astro-cid-m5gpva63> <!-- Builder Profile --> <div class="flex items-center space-x-xs" data-astro-cid-m5gpva63> <astro-island uid="ZSBdrY" component-url="/_astro/BuilderAvatar.idD99amA.js" component-export="default" renderer-url="/_astro/client.BBKXMyYs.js" props="{"name":[0,"Relevance AI"],"profilePictureUrl":[0,"https://d3vsyq079t1eom.cloudfront.net/marketplace/images/6c363790-461b-490f-81fc-086b5b5bc559/profile/3c800c3e-393a-44b6-923d-6e414b4af484.webp"],"size":[0,"s"],"data-astro-cid-m5gpva63":[0,true]}" ssr client="only" opts="{"name":"BuilderAvatar","value":"react"}"></astro-island> <span class="paragraph-regular-m text-text-secondary" data-astro-cid-m5gpva63>Relevance AI</span> </div> <!-- Price (Bottom Right) --> <div data-astro-cid-m5gpva63> <span class="paragraph-regular-m text-text-secondary" data-astro-cid-m5gpva63> Free </span> </div> </div> </div> </a> <a href="/listing/037955fe-5ed1-4770-9527-fbc1d4ae20d7" class="block h-full overflow-visible listing-card-link" data-listing-id="037955fe-5ed1-4770-9527-fbc1d4ae20d7" data-listing-name="Gmail & Trello Task Assistant" data-entity-type="agent" data-builder-id="0e6ddde9-7cbb-499c-a7cb-c7fe7eb4e085" data-builder-name="Luke Wilson" data-clone-count="6" data-astro-cid-m5gpva63> <div class="border border-border-default rounded-radius-m hover:bg-gray-50 hover:shadow-md transition-all duration-200 h-full p-l flex flex-col overflow-visible" data-astro-cid-m5gpva63> <!-- Top section: App Icon and Vendor Apps --> <div class="flex items-start justify-between mb-l overflow-visible" data-astro-cid-m5gpva63> <!-- App Icon --> <div class="w-12 h-12 bg-background-secondary rounded-radius-m flex-shrink-0 overflow-hidden" data-astro-cid-m5gpva63> <img src="https://cdn.jsdelivr.net/gh/RelevanceAI/content-cdn@latest/agents/agent_avatars/agent_avatar_18.svg" alt="Gmail & Trello Task Assistant" class="w-full h-full object-cover" loading="lazy" data-astro-cid-m5gpva63> </div> <!-- Vendor Apps in Cards (Top Right) --> <div class="flex items-center gap-xs max-w-[60%] flex-shrink-0 overflow-visible" data-astro-cid-m5gpva63> <div class="group relative vendor-icon-wrapper" title="Gmail - Add Label to Email" data-astro-cid-m5gpva63> <div class="bg-background-secondary rounded-radius-xs p-xxs" data-astro-cid-m5gpva63> <img src="https://assets.pipedream.net/s.v0/app_OQYhq7/logo/orig" alt="Gmail - Add Label to Email" class="w-5 h-5 flex-shrink-0" title="Gmail - Add Label to Email" data-astro-cid-m5gpva63> </div> <div class="vendor-tooltip-container hidden md:block absolute top-full left-1/2 -translate-x-1/2 mt-2 opacity-0 group-hover:opacity-100 transition-opacity duration-200 pointer-events-none z-[9999]" data-astro-cid-m5gpva63> <div class="px-3 py-1.5 bg-gray-900 text-white text-xs rounded-md shadow-lg whitespace-nowrap" data-astro-cid-m5gpva63> Gmail - Add Label to Email </div> </div> </div> </div> </div> <!-- App Name --> <h3 class="heading-xl text-text-primary mb-s font-semibold" data-astro-cid-m5gpva63>Gmail & Trello Task Assistant</h3> <!-- Rating and Clone count --> <div class="flex items-center gap-x-xs mb-s" data-astro-cid-m5gpva63> <img src="/icons/pd/agent.svg" alt="agent" class="w-4 h-4" data-astro-cid-m5gpva63> <span class="paragraph-regular-m text-text-secondary" data-astro-cid-m5gpva63> Agent </span> <span class="paragraph-regular-m text-text-secondary" data-astro-cid-m5gpva63>•</span> <div class="flex items-center" data-astro-cid-m5gpva63> <img src="/icons/pd/copy.svg" alt="Clone" class="w-4 h-4 text-text-secondary" style="filter: brightness(0) saturate(100%) invert(60%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(90%) contrast(80%);" data-astro-cid-m5gpva63> </div> <span class="paragraph-regular-m text-text-secondary" data-astro-cid-m5gpva63>6</span> </div> <!-- Description --> <div class="flex-1 mb-l" data-astro-cid-m5gpva63> <p class="paragraph-regular-m text-text-secondary line-clamp-2" data-astro-cid-m5gpva63> ## Jasper - Your AI Inbox Assistant 🚀 Jasper transforms your Gmail inbox into an intelligent task management system. It analyses every email, identifies actionable requests, and automatically creates perfectly formatted cards in Trello with accurate due dates, labels and checklist items. Fully customizable to any workflow. - 📥 Creates cards with email summary, thread link, and checklist items - ⚡ Keeps your board focused by filtering out non-actionable emails - 📅 Converts natural language deadlines to accurate due dates - 🎯 Sorts and routes cards by urgency to your predefined lists and labels - ✅ Two-way sync removes Gmail labels when you archive cards ## Getting Started After cloning, go to the run tab in the agent to view the full setup instructions and a step-by-step video guide. --- Current Version: 1.0 Creator 👉 https://link.me/lukejohnwilson Made with ❤️ and ☕ Built for the Liam Ottley × AAA Accelerator Hackathon </p> </div> <!-- Bottom section: Builder Profile and Price --> <div class="flex items-center justify-between mt-auto" data-astro-cid-m5gpva63> <!-- Builder Profile --> <div class="flex items-center space-x-xs" data-astro-cid-m5gpva63> <astro-island uid="4apq9" component-url="/_astro/BuilderAvatar.idD99amA.js" component-export="default" renderer-url="/_astro/client.BBKXMyYs.js" props="{"name":[0,"Luke Wilson"],"profilePictureUrl":[0,"https://d3vsyq079t1eom.cloudfront.net/marketplace/images/0e6ddde9-7cbb-499c-a7cb-c7fe7eb4e085/profile/a7349509-da99-4624-a21a-2f15d27e0336.webp"],"size":[0,"s"],"data-astro-cid-m5gpva63":[0,true]}" ssr client="only" opts="{"name":"BuilderAvatar","value":"react"}"></astro-island> <span class="paragraph-regular-m text-text-secondary" data-astro-cid-m5gpva63>Luke Wilson</span> </div> <!-- Price (Bottom Right) --> <div data-astro-cid-m5gpva63> <span class="paragraph-regular-m text-text-secondary" data-astro-cid-m5gpva63> Free </span> </div> </div> </div> </a> </div> </div> </div> <script> (function() { function setupCtaHandler() { // Back button handler (if in embedded mode) const backBtn = document.getElementById('back-button-embedded'); if (backBtn) { backBtn.addEventListener('click', function() { window.history.back(); }); } // CTA button/link handler (Clone or Buy) const cloneBtn = document.getElementById('clone-agent-btn'); const cloneLink = document.querySelector('a[href*="marketplace-clone"]'); const ctaElement = cloneBtn || cloneLink; if (ctaElement) { ctaElement.addEventListener('click', function(e) { // Use global iframe detection if (window.__marketplaceIframe?.isEmbedded) { e.preventDefault(); e.stopPropagation(); const listingId = ctaElement.getAttribute('data-listing-id') || ''; const listingName = ctaElement.getAttribute('data-listing-name') || ''; const priceUsdCents = parseInt(ctaElement.getAttribute('data-price') || '0', 10); // Extract listing ID from href if not in data attribute let finalListingId = listingId; if (!finalListingId && ctaElement.href) { const match = ctaElement.href.match(/cloneMarketplaceListingId=([^&]+)/); if (match) finalListingId = match[1]; } // Check if this is a paid listing (checkout) or free (clone) if (priceUsdCents > 0) { // Paid listing → Send CHECKOUT_LISTING window.__marketplaceIframe.sendToParent('CHECKOUT_LISTING', { listingId: finalListingId }); } else { // Free listing → Send CLONE_AGENT const url = 'https://app.relevanceai.com/marketplace-clone?cloneMarketplaceListingId=' + finalListingId; window.__marketplaceIframe.sendToParent('CLONE_AGENT', { url: url, listingId: finalListingId, listingName: listingName || '' }); } } // If not in iframe, let the link/button work normally }); } } // Wait for DOM to be ready if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', setupCtaHandler); } else { setupCtaHandler(); } })(); </script> <script type="module">const product = {"id":"8241366a-520f-4c99-8a48-50157fe1c21b","name":"Technical SEO Audit Specialist using Firecrawl","description":"Comprehensive technical SEO auditing agent that crawls websites, analyzes technical SEO factors, and delivers actionable improvement reports with specific recommendations for better search engine visibility and performance.","entityDescription":"Comprehensive technical SEO auditing agent that crawls websites, analyzes technical SEO factors, and delivers actionable improvement reports with specific recommendations for better search engine visibility and performance.","price":0,"category":"agent","imageUrl":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/agent-emoji-firecrawl-logo.png/800d13a3-e5ee-4d75-85d4-f11c549248fe.png","images":["https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/agent-emoji-firecrawl-logo.png/800d13a3-e5ee-4d75-85d4-f11c549248fe.png"],"seller":{"name":"Firecrawl","profilePictureUrl":"https://d3vsyq079t1eom.cloudfront.net/marketplace/images/bdf7791f-c526-4528-adc8-bed2ce890f51/profile/262d5601-a6d7-4a39-ace4-ecdbd97ca81d.webp"},"tags":[],"inStock":true,"createdAt":"2025-11-04T10:54:28.848Z","entityType":"agent","cloneCount":8,"rating":0,"reviewCount":0,"rawListing":{"builder_name":"Firecrawl","builder_profile_picture_url":"https://d3vsyq079t1eom.cloudfront.net/marketplace/images/bdf7791f-c526-4528-adc8-bed2ce890f51/profile/262d5601-a6d7-4a39-ace4-ecdbd97ca81d.webp","categories":[],"published_at":"2025-11-04T10:54:28.848Z","description":"Comprehensive technical SEO auditing agent that crawls websites, analyzes technical SEO factors, and delivers actionable improvement reports with specific recommendations for better search engine visibility and performance.","display_id":"8241366a-520f-4c99-8a48-50157fe1c21b","entity_type":"agent","image":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/agent-emoji-firecrawl-logo.png/800d13a3-e5ee-4d75-85d4-f11c549248fe.png","name":"Technical SEO Audit Specialist using Firecrawl","tags":[],"agents":[{"icon":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/agent-emoji-firecrawl-logo.png/800d13a3-e5ee-4d75-85d4-f11c549248fe.png","title":"Technical SEO Audit Specialist using Firecrawl","description":"Comprehensive technical SEO auditing agent that crawls websites, analyzes technical SEO factors, and delivers actionable improvement reports with specific recommendations for better search engine visibility and performance.","display_id":"f80dc443-935c-4af0-b1c3-139d223ee81a","version_display_id":"497627a4-acb2-4e3c-a3a5-41797645cf5d","region":"f1db6c","project_display_id":"bdf7791f-c526-4528-adc8-bed2ce890f51"}],"connections":[{"from_display_id":"f80dc443-935c-4af0-b1c3-139d223ee81a_497627a4-acb2-4e3c-a3a5-41797645cf5d","to_display_id":"e478b09f-1294-4b0f-8be7-e00a11298a50_e7a0721c-40ef-4af1-9e08-805b7d38af66"},{"from_display_id":"f80dc443-935c-4af0-b1c3-139d223ee81a_497627a4-acb2-4e3c-a3a5-41797645cf5d","to_display_id":"e0933889-d0cf-4431-9def-926072031ea4_97abb4f9-d6fc-4bf0-8b27-4bd74be06fc0"},{"from_display_id":"f80dc443-935c-4af0-b1c3-139d223ee81a_497627a4-acb2-4e3c-a3a5-41797645cf5d","to_display_id":"93784275-0101-4e49-a8a7-1eb72d59f28b_9a4d5148-55f2-47b3-936b-83faaf2f90e3"}],"tools":[{"icon":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/notebook-emoji-favicon_48.png/4ef8b2f8-816e-4b3f-8f47-ac9146afb557.png","title":"Page Speed Insights","description":"Measure the performance of a web page.\nGet suggestions on how to improve the page's performance, accessibility, and SEO.","display_id":"e478b09f-1294-4b0f-8be7-e00a11298a50","version_display_id":"e7a0721c-40ef-4af1-9e08-805b7d38af66","region":"f1db6c","project_display_id":"bdf7791f-c526-4528-adc8-bed2ce890f51"},{"icon":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/notebook-emoji-firecrawl-logo.png/d0671486-9693-4acd-9579-d2ba963b2514.png","title":"Firecrawl web scraper","description":"Cloned for agent 'SEO Tech Audit Agent'. Crawl a website and its pages given a URL.","display_id":"e0933889-d0cf-4431-9def-926072031ea4","version_display_id":"97abb4f9-d6fc-4bf0-8b27-4bd74be06fc0","region":"f1db6c","project_display_id":"bdf7791f-c526-4528-adc8-bed2ce890f51"},{"icon":"https://cdn.jsdelivr.net/gh/RelevanceAI/content-cdn@latest/vendors/icons/google.svg","title":"Google Search","description":"","display_id":"93784275-0101-4e49-a8a7-1eb72d59f28b","version_display_id":"9a4d5148-55f2-47b3-936b-83faaf2f90e3","region":"f1db6c","project_display_id":"bdf7791f-c526-4528-adc8-bed2ce890f51"}],"workforces":[],"oauth_accounts":{},"triggers":[],"integrations":{"93784275-0101-4e49-a8a7-1eb72d59f28b":{"serper_google_search":[{"api_key_provider":"serper","logo_key":"google"}]},"e0933889-d0cf-4431-9def-926072031ea4":{"firecrawl":[{"api_key_provider":"firecrawl"}]}},"price_usd_cents":null,"clone_count":8,"example_task":{"title":"RelevanceAI Marketplace Audit Summary","messages":[{"type":"user-message","text":"https://marketplace.relevanceai.com/\n\nAudit this subdomain","display":{"name":"Fire Crawl"},"item_id":"37ca3b27-b6e3-4231-a0ff-2978dec401af"},{"type":"tool-run","tool_config":{"title":"Firecrawl web scraper","description":"Crawl a website and its pages given a URL.","emoji":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/notebook-emoji-firecrawl-logo.png/d0671486-9693-4acd-9579-d2ba963b2514.png"},"item_id":"538b578c-3dc8-46ba-9f99-2d0734c8e9c5"},{"type":"tool-run","tool_config":{"title":"Firecrawl web scraper","description":"Crawl a website and its pages given a URL.","emoji":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/notebook-emoji-firecrawl-logo.png/d0671486-9693-4acd-9579-d2ba963b2514.png"},"item_id":"e2fbf367-7c69-4b9d-980e-3e5dd8bc6648"},{"type":"tool-run","tool_config":{"title":"Firecrawl web scraper","description":"Crawl a website and its pages given a URL.","emoji":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/notebook-emoji-firecrawl-logo.png/d0671486-9693-4acd-9579-d2ba963b2514.png"},"item_id":"d2f01f18-f823-4343-a88c-6c7bcc1149fb"},{"type":"tool-run","tool_config":{"title":"Firecrawl web scraper","description":"Crawl a website and its pages given a URL.","emoji":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/notebook-emoji-firecrawl-logo.png/d0671486-9693-4acd-9579-d2ba963b2514.png"},"item_id":"d7bf98aa-ddf3-422c-b144-ebb768ff8919"},{"type":"tool-run","tool_config":{"title":"Firecrawl web scraper","description":"Crawl a website and its pages given a URL.","emoji":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/notebook-emoji-firecrawl-logo.png/d0671486-9693-4acd-9579-d2ba963b2514.png"},"item_id":"aa9cbc5d-d263-4427-a4fd-5c41cb2ff123"},{"type":"tool-run","tool_config":{"title":"Firecrawl web scraper","description":"Crawl a website and its pages given a URL.","emoji":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/notebook-emoji-firecrawl-logo.png/d0671486-9693-4acd-9579-d2ba963b2514.png"},"item_id":"823bd56f-0f0c-48af-9358-2d3812268eef"},{"type":"tool-run","tool_config":{"title":"Firecrawl web scraper","description":"Crawl a website and its pages given a URL.","emoji":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/notebook-emoji-firecrawl-logo.png/d0671486-9693-4acd-9579-d2ba963b2514.png"},"item_id":"5a5e2dfc-eb11-4129-9c5f-6d5a08ebe18e"},{"type":"tool-run","tool_config":{"title":"Firecrawl web scraper","description":"Crawl a website and its pages given a URL.","emoji":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/notebook-emoji-firecrawl-logo.png/d0671486-9693-4acd-9579-d2ba963b2514.png"},"item_id":"4423bf0d-b93e-40ad-b051-f8cfb70c801b"},{"type":"tool-run","tool_config":{"title":"Firecrawl web scraper","description":"Crawl a website and its pages given a URL.","emoji":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/notebook-emoji-firecrawl-logo.png/d0671486-9693-4acd-9579-d2ba963b2514.png"},"item_id":"728325be-f056-4b70-a023-6bc73e54d00c"},{"type":"tool-run","tool_config":{"title":"Firecrawl web scraper","description":"Crawl a website and its pages given a URL.","emoji":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/notebook-emoji-firecrawl-logo.png/d0671486-9693-4acd-9579-d2ba963b2514.png"},"item_id":"1c45db2c-140d-4595-b84a-db5645fd691e"},{"type":"tool-run","tool_config":{"title":"Firecrawl web scraper","description":"Crawl a website and its pages given a URL.","emoji":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/notebook-emoji-firecrawl-logo.png/d0671486-9693-4acd-9579-d2ba963b2514.png"},"item_id":"94a604b6-e63b-4435-ba0c-70070045d74e"},{"type":"tool-run","tool_config":{"title":"Firecrawl web scraper","description":"Crawl a website and its pages given a URL.","emoji":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/notebook-emoji-firecrawl-logo.png/d0671486-9693-4acd-9579-d2ba963b2514.png"},"item_id":"dd04b6cf-572d-476d-87e9-f68682581229"},{"type":"tool-run","tool_config":{"title":"Firecrawl web scraper","description":"Crawl a website and its pages given a URL.","emoji":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/notebook-emoji-firecrawl-logo.png/d0671486-9693-4acd-9579-d2ba963b2514.png"},"item_id":"f71ad28f-5349-4510-82ca-3c79fee82967"},{"type":"tool-run","tool_config":{"title":"Page Speed Insights","description":"Measure the performance of a web page.\nGet suggestions on how to improve the page's performance, accessibility, and SEO.","emoji":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/notebook-emoji-favicon_48.png/4ef8b2f8-816e-4b3f-8f47-ac9146afb557.png"},"item_id":"9c6d8c36-6f74-46f9-8216-84da1d17c89e"},{"type":"tool-run","tool_config":{"title":"Page Speed Insights","description":"Measure the performance of a web page.\nGet suggestions on how to improve the page's performance, accessibility, and SEO.","emoji":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/notebook-emoji-favicon_48.png/4ef8b2f8-816e-4b3f-8f47-ac9146afb557.png"},"item_id":"66d5fa19-8874-4160-b2cb-1eb9f98de7fd"},{"type":"agent-message","text":"Technical SEO Audit: https://marketplace.relevanceai.com/\n\nExecutive Summary\n- Overall site health score (1–10): 7.5\n- Top 3 critical issues\n 1) Broken hreflang: homepage advertises an es locale that 404s (https://marketplace.relevanceai.com/es/ returns 404).\n 2) Sitemap issues: robots.txt points to /sitemap.xml which times out; /sitemap_index.xml returns a 404 HTML page.\n 3) Inconsistent canonicalization of search listing: /search self-resolves to homepage via canonical, while category listings self-canonicalize. This can dilute relevance and cause duplicate signals.\n- Estimated impact\n - Fixing hreflang prevents international mis-signals and possible demotions due to invalid language alternates.\n - Restoring a valid sitemap coverage will improve discovery and freshness, especially for new/updated listings/builders.\n - Correct canonicalization on search templates will prevent index bloat or dilution and improve SERP clarity for listing pages.\n - Page speed improvements (JS reduction, image optimization, font strategy) can improve Core Web Vitals and CTR.\n\nCritical Issues (High Priority)\n1) Broken hreflang on homepage\n- Evidence: Homepage contains hreflang links to en and es. Requesting https://marketplace.relevanceai.com/es/ returns a 404 “Page not found”.\n- Affected pages: Homepage (and any page with the same hreflang set, if applied globally).\n- Why it matters: Invalid hreflang targets can cause search engines to ignore language alternates, and may waste crawl budget on 404s.\n- Remediation\n - If no localized Spanish content exists: remove hreflang=\"es\" entirely.\n - If you intend to ship Spanish: publish the localized pages at /es/ and ensure each page has a reciprocal hreflang pair.\n - Code example (remove invalid):\n <!-- REMOVE this until /es/ exists -->\n <!-- <link rel=\"alternate\" hreflang=\"es\" href=\"https://marketplace.relevanceai.com/es/\"> -->\n - Code example (correct pair, once translated):\n <link rel=\"alternate\" hreflang=\"en\" href=\"https://marketplace.relevanceai.com/\">\n <link rel=\"alternate\" hreflang=\"es\" href=\"https://marketplace.relevanceai.com/es/\">\n <link rel=\"alternate\" hreflang=\"x-default\" href=\"https://marketplace.relevanceai.com/\">\n\n2) Sitemap referenced in robots.txt is unavailable\n- Evidence:\n - robots.txt: Sitemap: https://marketplace.relevanceai.com/sitemap.xml\n - Attempts to fetch /sitemap.xml time out.\n - /sitemap_index.xml returns the site’s 404 HTML.\n- Affected: Full site discovery and update cadence.\n- Remediation\n - Generate a valid XML sitemap (or sitemap index), include only canonical, indexable URLs (homepage, listings, builder profiles, builders index; avoid internal search result pages).\n - Ensure it’s served fast (static build or fast server-side generation) and update robots.txt to the correct URL(s).\n - Sample structure (sitemap index):\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <sitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n <sitemap><loc>https://marketplace.relevanceai.com/sitemaps/sitemap-pages.xml</loc></sitemap>\n <sitemap><loc>https://marketplace.relevanceai.com/sitemaps/sitemap-listings.xml</loc></sitemap>\n <sitemap><loc>https://marketplace.relevanceai.com/sitemaps/sitemap-builders.xml</loc></sitemap>\n </sitemapindex>\n - robots.txt:\n Sitemap: https://marketplace.relevanceai.com/sitemap_index.xml\n - Validation: Fetch live XML in browser; test with Search Console “Sitemaps”.\n\n3) Inconsistent canonicalization of search pages\n- Evidence:\n - /search (all agents): canonical points to homepage (https://marketplace.relevanceai.com/), yet the page is indexable (meta robots index, follow). Title is generic; pagination exists with rel next/prev.\n - /search?category=sales: self-canonical and indexable (good).\n- Why it matters: Canonical to homepage can confuse search engines, causing duplication and diluted relevance for “All Agents” results.\n- Remediation options (pick one strategy sitewide):\n - Option A (index a canonical listing hub): Make /search the canonical, with a descriptive title/description, and ensure all refined variants (sort, page) self-canonical to their own page or to the base /search (depending on content uniqueness). Keep meta robots index, follow.\n - Option B (noindex search results): Add <meta name=\"robots\" content=\"noindex,follow\"> to /search and any parameterized result pages you do not want indexed, keep category landing pages indexable with self-canonical.\n- Recommended for marketplaces: Keep category pages indexable/self-canonical; either noindex /search or ensure /search self-canonical with unique metadata.\n- Code example (noindex search):\n <meta name=\"robots\" content=\"noindex,follow\">\n <link rel=\"canonical\" href=\"https://marketplace.relevanceai.com/search\">\n- Code example (indexable search):\n <meta name=\"robots\" content=\"index,follow\">\n <link rel=\"canonical\" href=\"https://marketplace.relevanceai.com/search\">\n\nImportant Improvements (Medium Priority)\n1) Open Graph/Twitter image consistency\n- Evidence: Homepage OG/Twitter image observed as an SVG icon in one scrape; elsewhere OG.png. Prefer a large raster (1200×630) for consistent previews.\n- Fix:\n <meta property=\"og:image\" content=\"https://marketplace.relevanceai.com/OG.png\">\n <meta name=\"twitter:card\" content=\"summary_large_image\">\n Ensure uniform across templates.\n\n2) Schema markup consistency on listing/category\n- Evidence: Listing detail pages include Product and BreadcrumbList JSON-LD (good). Search base shows ItemList and SearchAction. Some category pages returned no jsonld_types.\n- Fix: Ensure category templates output ItemList JSON-LD with item elements linking to listing URLs.\n {\n \"@context\": \"https://schema.org\",\n \"@type\": \"ItemList\",\n \"itemListElement\": [\n {\"@type\": \"ListItem\",\"position\": 1,\"url\": \"https://marketplace.relevanceai.com/listing/...\"},\n ...\n ]\n }\n\n3) Titles and meta descriptions\n- Evidence: /search’s title came through as “Acme Marketplace” (generic). Category titles are good (“Sales - Acme Marketplace”).\n- Fix: Ensure each template has unique, descriptive <title> and meta description. For /search (All Agents): title like “All AI Agents – Acme Marketplace” and a matching meta description.\n\n4) Pagination hygiene\n- Evidence: Builders index and category/search include rel prev/next and page query parameters.\n- Fix: Keep canonical to the current page for paginated series; retain rel prev/next (while Google no longer uses them as signals, they help UX and some crawlers). Ensure each page shows content unique to that page (not repeating the first page’s items).\n\nEnhancement Opportunities (Low Priority)\n- Homepage schema: consider adding Organization and BreadcrumbList JSON-LD for richer entity understanding.\n- Add a site-level WebSite schema with SearchAction (if not already uniform) to enable sitelinks search in SERP.\n- Internal linking: From listing pages, link clearly to category pages and builder profile pages (already seen via breadcrumb and “More by” sections—keep strengthening).\n- Consider curated category landing content (intro paragraph, FAQs) to improve topical relevance and long-tail capture (FAQPage schema if appropriate).\n\nMobile & Performance (Core Web Vitals via PageSpeed Insights)\nTested pages:\n- Homepage: opportunities identified\n - Reduce unused JS (e.g., /_astro/client..., Tech Solutions Inc. scripts); defer analytics until after user interaction or idle.\n - Avoid render-blocking resources:\n - Inline critical CSS or use media/async techniques.\n - Preload key font files; add font-display: swap.\n - Example:\n <link rel=\"preload\" href=\"/fonts/inter-var.woff2\" as=\"font\" type=\"font/woff2\" crossorigin>\n @font-face { font-family: Inter; src: url('/fonts/inter-var.woff2') format('woff2'); font-display: swap; }\n - Optimize images:\n - Serve responsive images with width/height attributes and sizes/srcset; ensure avatars/thumbnails are not 1–1.5MB for 20–48px display.\n <img src=\"/img/agent-48.webp\" width=\"48\" height=\"48\"\n srcset=\"/img/agent-48.webp 48w, /img/agent-96.webp 96w\"\n sizes=\"(max-width: 600px) 48px, 48px\" loading=\"lazy\" decoding=\"async\">\n - Preconnect to third parties you must load (fonts.gstatic, ph.relevanceai.com) and defer the rest; remove duplicated JS and legacy transpiled bundles where possible.\n- Listing detail (example): generally strong LCP/CLS, but:\n - Reduce total payload (~3.2MB) via image compression and script trimming.\n - Minify/trim unused CSS/JS; avoid non-composited animations.\n - Eliminate unnecessary lazy-loading for the LCP image (ensure discoverable in HTML).\n\nI. Sitemaps & Robots.txt\n- Current:\n - robots.txt allows all; shows Sitemap: https://marketplace.relevanceai.com/sitemap.xml\n - Disallow examples are commented out; fine.\n- Issues: sitemap.xml unavailable; sitemap_index.xml is 404.\n- Fix:\n - Publish sitemaps and point robots.txt to the correct location (e.g., Sitemap: https://marketplace.relevanceai.com/sitemap_index.xml).\n - Include main pages: homepage, builders index, builder profiles, listing detail pages. Exclude search results (/search, unless you want them indexed and canonicalized).\n - Validate in Search Console.\n\nTechnical Implementation Guide\n- Hreflang\n - Remove invalid hreflang references immediately. Only include alternates that exist and reciprocate.\n - Validation: Use the Hreflang Tags Testing Tool; check that each alternate 200s and contains reciprocal link tags.\n\n- Canonicalization for search templates\n - Decide strategy:\n - Indexable: Use self-canonical and unique metadata; keep prev/next.\n - Noindex: Add <meta name=\"robots\" content=\"noindex,follow\"> for /search and parameterized versions; keep category pages indexable.\n - Validation: View source to ensure only one canonical tag present and it matches intended URL.\n\n- Sitemap generation (Astro/static)\n - During build, generate sitemaps from your routes (pages, listing data, builder IDs).\n - Example Node build snippet (pseudo):\n const urls = [...staticPages, ...listings.map(u=>`/listing/${u.id}`), ...builders.map(u=>`/builders/${u.id}`)];\n // Write to /dist/sitemaps/*.xml with lastmod\n - Deploy; confirm 200 and proper content-type (application/xml).\n\n- JSON-LD\n - Ensure category pages output ItemList JSON-LD (see example above).\n - Listing pages already include Product and BreadcrumbList JSON-LD (good). Verify required Product fields (name, description, image, brand, offers).\n\n- Page speed tooling and steps\n - Bundle analysis: run a JS treemap, remove duplicate/legacy JS.\n - Defer analytics: load Tech Solutions Inc. only after user interaction or via requestIdleCallback when possible:\n window.addEventListener('load', () => {\n requestIdleCallback(() => { /* load analytics */ });\n });\n - Fonts: self-host Inter, preload WOFF2, set font-display: swap.\n - Images: audit largest images; serve AVIF/WebP, correct sizes, width/height attributes to reduce CLS.\n - Validate: Use PSI and Web Vitals field data, re-test top templates (home, category, listing, builder profile).\n\nTool recommendations for ongoing monitoring\n- Google Search Console (coverage, sitemaps, enhancement reports)\n- PageSpeed Insights + Lighthouse CI on key templates\n- Log-based monitoring of 404s (catch any future hreflang or internal link issues)\n- Structured Data Testing Tool / Rich Results Test for JSON-LD validation\n\nValidation steps to confirm fixes\n- Crawl key templates with a fetch-and-render (ensure meta robots, canonical, hreflang, JSON-LD appear in the server-rendered HTML).\n- Re-test with PSI: target LCP < 2.5s, CLS < 0.1, TBT as low as possible.\n- Re-fetch sitemaps in GSC; check indexed pages match intent (exclude search if noindex, include listings/builders).\n\nObserved page type coverage (sampled)\n- Homepage: indexable, canonical to self, hreflang included (fix needed), JSON-LD WebSite present.\n- Builders index: indexable, self-canonical, rel prev/next present.\n- Builder profile pages: indexable, self-canonical, Organization JSON-LD present, rel prev/next on pagination present.\n- Listing detail pages: indexable, self-canonical, Product + BreadcrumbList JSON-LD present (good).\n- Search base (/search): indexable but canonical to homepage (inconsistent); pagination exists; adjust per strategy.\n- Category search (/search?category=sales): indexable, self-canonical, pagination present (good).\n- Robots.txt: allows all; sitemap listed but unavailable (fix).\n- Sitemap endpoints: /sitemap.xml timeouts; /sitemap_index.xml 404 (fix).\n\nPrioritized action plan (summary)\n- Today: Remove invalid hreflang es or ship /es/; fix /search canonical (self-canonical or noindex); restore working sitemaps and update robots.txt.\n- This week: Normalize OG/Twitter images; ensure ItemList JSON-LD on category pages; ensure unique page titles/meta; verify pagination canonicals.\n- Next 1–2 weeks: Performance pass (JS trimming, defer analytics, font strategy, image optimization); implement build-time sitemap generation; add Organization schema on homepage if desired.\n\nIf you want, I can provide a ready-to-drop HTML head snippet for each template (home, search, category, listing) reflecting the above recommendations.","agent_details":{"name":"Technical SEO Audit Specialist using Firecrawl","emoji":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/agent-emoji-firecrawl-logo.png/800d13a3-e5ee-4d75-85d4-f11c549248fe.png"},"item_id":"e49210da-3f73-4cd0-abca-9be2ca75a312"}]},"assets":null,"youtube_url":null,"review_stats":{"average_rating":0,"total_count":0}}}; import { trackListingViewed, trackListingCloned } from '../../util/analytics'; // Get project_display_id based on entity type const getProjectDisplayId = (product) => { if (product.entityType === 'agent' && product.rawListing.agents?.[0]) { return product.rawListing.agents[0].project_display_id; } else if (product.entityType === 'tool' && product.rawListing.tools?.[0]) { return product.rawListing.tools[0].project_display_id; } else if (product.entityType === 'workforce' && product.rawListing.workforces?.[0]) { return product.rawListing.workforces[0].project_display_id; } return undefined; }; // Track listing viewed on page load if (product) { trackListingViewed({ listing_id: product.id, listing_name: product.name, category: product.categories?.[0], entity_type: product.entityType, source: 'direct', price_usd_cents: product.rawListing.price_usd_cents, builder_id: getProjectDisplayId(product), builder_name: product.seller?.name, clone_count: product.cloneCount || 0, rating: product.rating, review_count: product.reviewCount }); } // Track clone button clicks window.addEventListener('DOMContentLoaded', () => { const cloneBtnEmbedded = document.getElementById('clone-agent-btn'); const cloneLinkRegular = document.querySelector('a[href*="marketplace-clone"]'); const handleCloneClick = () => { if (product) { trackListingCloned({ listing_id: product.id, listing_name: product.name, category: product.categories?.[0], entity_type: product.entityType, builder_id: getProjectDisplayId(product), builder_name: product.seller?.name, source: 'listing_page', price_usd_cents: product.rawListing.price_usd_cents }); } }; if (cloneBtnEmbedded) { cloneBtnEmbedded.addEventListener('click', handleCloneClick); } if (cloneLinkRegular) { cloneLinkRegular.addEventListener('click', handleCloneClick); } }); </script> <script type="application/ld+json">{"@context":"https://schema.org","@type":"Product","name":"Technical SEO Audit Specialist using Firecrawl","description":"Comprehensive technical SEO auditing agent that crawls websites, analyzes technical SEO factors, and delivers actionable improvement reports with specific recommendations for better search engine visibility and performance.","image":"https://userdata-f1db6c.stack.tryrelevance.com/files/public/bdf7791f-c526-4528-adc8-bed2ce890f51/agent-emoji-firecrawl-logo.png/800d13a3-e5ee-4d75-85d4-f11c549248fe.png","url":"https://marketplace.relevanceai.com/listing/8241366a-520f-4c99-8a48-50157fe1c21b","brand":{"@type":"Organization","name":"Firecrawl"},"offers":{"@type":"Offer","price":"0.00","priceCurrency":"USD","availability":"https://schema.org/InStock","url":"https://marketplace.relevanceai.com/listing/8241366a-520f-4c99-8a48-50157fe1c21b"}}</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Marketplace","item":"https://marketplace.relevanceai.com/"},{"@type":"ListItem","position":2,"name":"Agents","item":"https://marketplace.relevanceai.com/search?entityType=agent"},{"@type":"ListItem","position":3,"name":"Technical SEO Audit Specialist using Firecrawl","item":"https://marketplace.relevanceai.com/listing/8241366a-520f-4c99-8a48-50157fe1c21b"}]}</script> </main> <!-- Footer --> <footer class="bg-background-secondary text-text-primary border-t border-border-default"> <div class="max-w-[90rem] mx-auto px-m"> <!-- Main Footer Content --> <div class="py-xxl"> <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-xl"> <!-- Company Info --> <div class="space-y-m"> <div class="flex items-center space-x-xs"> <img src="/icons/relevance/RelevanceLogoIcon.svg" alt="Relevance" class="w-6 h-6"> <span class="heading-m text-text-primary">Relevance Marketplace</span> </div> <p class="paragraph-regular-s text-text-secondary max-w-xs"> Discover amazing AI agents from trusted builders. Find everything you need in our curated marketplace. </p> <div class="flex space-x-s"> <a href="https://linkedin.com/company/relevanceai" target="_blank" rel="noopener noreferrer" class="text-text-tertiary hover:text-text-primary transition-colors"> <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"> <path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"></path> </svg> </a> <a href="https://github.com/relevanceai" target="_blank" rel="noopener noreferrer" class="text-text-tertiary hover:text-text-primary transition-colors"> <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"> <path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"></path> </svg> </a> <a href="https://www.youtube.com/@relevanceai" target="_blank" rel="noopener noreferrer" class="text-text-tertiary hover:text-text-primary transition-colors"> <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"> <path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"></path> </svg> </a> </div> </div> <!-- Marketplace --> <div class="space-y-s"> <h3 class="heading-s text-text-primary">Marketplace</h3> <ul class="space-y-xs"> <li><a href="/" class="paragraph-regular-s text-text-secondary hover:text-text-primary transition-colors">Home</a></li> <li><a href="/category/marketing" class="paragraph-regular-s text-text-secondary hover:text-text-primary transition-colors">Marketing</a></li> <li><a href="/category/sales" class="paragraph-regular-s text-text-secondary hover:text-text-primary transition-colors">Sales</a></li> <li><a href="/category/customer_support" class="paragraph-regular-s text-text-secondary hover:text-text-primary transition-colors">Customer Support</a></li> <li><a href="/category/hr_recruitment" class="paragraph-regular-s text-text-secondary hover:text-text-primary transition-colors">HR & Recruitment</a></li> <li><a href="/category/research" class="paragraph-regular-s text-text-secondary hover:text-text-primary transition-colors">Research</a></li> </ul> </div> <!-- Resources --> <div class="space-y-s"> <h3 class="heading-s text-text-primary">Resources</h3> <ul class="space-y-xs"> <li><a href="https://docs.relevanceai.com" target="_blank" rel="noopener noreferrer" class="paragraph-regular-s text-text-secondary hover:text-text-primary transition-colors">Documentation</a></li> <li><a href="https://relevanceai.com/blog" target="_blank" rel="noopener noreferrer" class="paragraph-regular-s text-text-secondary hover:text-text-primary transition-colors">Blog</a></li> <li><a href="https://community.relevanceai.com" target="_blank" rel="noopener noreferrer" class="paragraph-regular-s text-text-secondary hover:text-text-primary transition-colors">Community</a></li> <li><a href="https://relevanceai.com/changelog" target="_blank" rel="noopener noreferrer" class="paragraph-regular-s text-text-secondary hover:text-text-primary transition-colors">Changelog</a></li> <li><a href="https://relevanceai.com/book-a-demo" target="_blank" rel="noopener noreferrer" class="paragraph-regular-s text-text-secondary hover:text-text-primary transition-colors">Talk to Sales</a></li> </ul> </div> <!-- Company --> <div class="space-y-s"> <h3 class="heading-s text-text-primary">Company</h3> <ul class="space-y-xs"> <li><a href="https://relevanceai.com/careers" target="_blank" rel="noopener noreferrer" class="paragraph-regular-s text-text-secondary hover:text-text-primary transition-colors">Careers</a></li> <li><a href="https://trust.relevanceai.com/" target="_blank" rel="noopener noreferrer" class="paragraph-regular-s text-text-secondary hover:text-text-primary transition-colors">Trust Center</a></li> <li><a href="https://relevanceai.com/privacy-policy" target="_blank" rel="noopener noreferrer" class="paragraph-regular-s text-text-secondary hover:text-text-primary transition-colors">Privacy Policy</a></li> <li><a href="https://relevanceai.com/terms-and-conditions" target="_blank" rel="noopener noreferrer" class="paragraph-regular-s text-text-secondary hover:text-text-primary transition-colors">Terms of Service</a></li> <li><a href="https://app.relevanceai.com/" target="_blank" rel="noopener noreferrer" class="paragraph-regular-s text-text-secondary hover:text-text-primary transition-colors">Sign In</a></li> </ul> </div> </div> </div> <!-- Bottom Bar --> <div class="py-l border-t border-border-divider"> <div class="flex flex-col md:flex-row justify-between items-center space-y-s md:space-y-0"> <p class="paragraph-regular-s text-text-tertiary"> © 2025 Relevance AI. All rights reserved. </p> <div class="flex items-center space-x-l"> <span class="paragraph-regular-s text-text-tertiary">Powered by</span> <a href="https://relevanceai.com" target="_blank" rel="noopener noreferrer" class="flex items-center space-x-xs"> <img src="/icons/relevance/RelevanceLogoIcon.svg" alt="Relevance AI" class="w-4 h-4"> <span class="paragraph-regular-s text-text-link hover:text-text-primary transition-colors">Relevance AI</span> </a> </div> </div> </div> </div> </footer> <!-- PostHog PageView Tracker (Vanilla JS - No React) --> <script type="module">function t(){if(typeof window<"u"&&window.posthog){const e=new URLSearchParams(window.location.search);window.posthog.capture("$pageview",{$current_url:window.location.href,$pathname:window.location.pathname,$search:window.location.search,$title:document.title,...e.get("category")&&{category:e.get("category")},...e.get("q")&&{search_query:e.get("q")}})}}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",t):t();window.addEventListener("popstate",t);</script> <!-- Global Listing Card Click Tracking --> <script type="module"> import { trackListingViewed } from '../util/analytics'; document.addEventListener('click', (e) => { const target = e.target; const listingCard = target.closest('.listing-card-link'); if (listingCard) { const listingId = listingCard.getAttribute('data-listing-id'); const listingName = listingCard.getAttribute('data-listing-name'); const category = listingCard.getAttribute('data-category'); const entityType = listingCard.getAttribute('data-entity-type'); const priceUsdCents = listingCard.getAttribute('data-price-usd-cents'); const builderId = listingCard.getAttribute('data-builder-id'); const builderName = listingCard.getAttribute('data-builder-name'); const cloneCount = listingCard.getAttribute('data-clone-count'); // Determine source based on current page const pathname = window.location.pathname; let source = 'search'; // default if (pathname === '/' || pathname === '') { source = 'homepage'; } else if (pathname.startsWith('/category/')) { source = 'category'; } else if (pathname.startsWith('/builders/')) { source = 'builder_profile'; } else if (pathname.startsWith('/search')) { source = 'search'; } if (listingId && listingName && entityType) { trackListingViewed({ listing_id: listingId, listing_name: listingName, category: category || undefined, entity_type: entityType, source: source, price_usd_cents: priceUsdCents ? parseInt(priceUsdCents) : null, builder_id: builderId || undefined, builder_name: builderName || undefined, clone_count: cloneCount ? parseInt(cloneCount) : 0 }); } } }); </script> <!-- Global Navigation Interceptor for Embedded Mode --> <script type="module">document.addEventListener("DOMContentLoaded",()=>{const o=document.querySelector(".category-dropdown"),t=document.querySelector(".category-dropdown-menu");o&&t&&(o.querySelector("button")?.addEventListener("click",e=>{e.stopPropagation(),t.classList.toggle("hidden")}),document.addEventListener("click",()=>{t.classList.add("hidden")}),t.addEventListener("click",e=>{e.stopPropagation()}))});</script> <!-- Global Iframe Messaging Handler (always loads, detects iframe at runtime) --> <script> // Global iframe messaging utilities window.__marketplaceIframe = (function() { // Detect if we're in an iframe const isInIframe = window.self !== window.top; // Persist embedded mode in sessionStorage for reliability const urlParams = new URLSearchParams(window.location.search); const embeddedParam = urlParams.get('embedded'); if (isInIframe && embeddedParam) { try { sessionStorage.setItem('marketplaceEmbeddedMode', embeddedParam); } catch (e) {} } const embeddedMode = isInIframe ? (embeddedParam || sessionStorage.getItem('marketplaceEmbeddedMode')) : null; // Only setup if we're actually in an iframe if (!isInIframe) { return { isEmbedded: false }; } const ALLOWED_ORIGINS = [ 'https://app.relevanceai.com', 'https://app-staging.relevanceai.com', 'http://localhost:3000', 'http://localhost:5173', 'http://localhost:4322', ]; function isAllowedOrigin(origin) { if (window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1') { return true; } return ALLOWED_ORIGINS.includes(origin); } function getListingIdFromPath(pathname) { const match = pathname.match(/^\/listing\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/i); return match ? match[1] : null; } // Central function to send messages to parent function sendToParent(type, payload) { if (!isInIframe) return; try { window.parent.postMessage({ type, payload }, '*'); console.log('[Iframe] Sent message:', type, payload); } catch (error) { console.error('[Iframe] Failed to send message:', error); } } function notifyUrlChanged(path, listingId) { // Check if we should skip (prevent circular updates) try { const skipFlag = sessionStorage.getItem('skipNextUrlChanged'); if (skipFlag === 'true') { sessionStorage.removeItem('skipNextUrlChanged'); return; } } catch (e) {} sendToParent('URL_CHANGED', { path, listingId }); } function navigateToProduct(listingId) { try { sessionStorage.setItem('skipNextUrlChanged', 'true'); } catch (e) {} const embedded = embeddedMode || 'relevanceAppMarketplace'; window.location.href = '/listing/' + listingId + '?embedded=' + embedded; } // Listen for NAVIGATE_TO_PRODUCT messages window.addEventListener('message', function(event) { if (!isAllowedOrigin(event.origin)) return; const message = event.data; if (message?.type === 'NAVIGATE_TO_PRODUCT' && message.payload?.listingId) { navigateToProduct(message.payload.listingId); } }); // Send URL_CHANGED on load window.addEventListener('load', function() { const path = window.location.pathname; const listingId = getListingIdFromPath(path); notifyUrlChanged(path, listingId); }); // Send URL_CHANGED on back/forward navigation window.addEventListener('popstate', function() { const path = window.location.pathname; const listingId = getListingIdFromPath(path); notifyUrlChanged(path, listingId); }); // Public API return { isEmbedded: true, sendToParent: sendToParent, notifyUrlChanged: notifyUrlChanged }; })(); </script> </body> </html>