1<!DOCTYPE html><html lang="en"><head> 2 <meta charset="UTF-8"> 3 <link rel="icon" type="image/svg+xml" href="/favicon.svg"> 4 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover"> 5 <meta name="theme-color" content="#FAF9F5"> 6 7 <!-- No static <title>/<meta description> here. Every route emits its 8 own via <SEO/> (components/common/SEO.jsx), and vite-react-ssg 9 injects those into the prerendered HTML at build time. A static 10 fallback would just duplicate the per-page tags in dist/*.html. --> 11 12 <!-- Site-wide social-card tags. Constant across routes, so they live in 13 the static head; per-page og:title/description/url/image come from 14 <SEO/> (components/common/SEO.jsx). --> 15 <meta property="og:type" content="website"> 16 <meta property="og:site_name" content="Great Experts"> 17 <meta name="twitter:card" content="summary_large_image"> 18 <!-- Google restricts preview image size unless told otherwise, and it picks 19 page thumbnails itself rather than honouring og:image the way Facebook 20 and WhatsApp do. This is the one directive it documents for that. 21 Deliberately ONLY the image directive: index/follow are the defaults 22 anyway, and asserting them here would sit in the same head as the 23 `noindex` that SEO.jsx and server.js inject for auth-walled routes and 24 dead handles. One tag saying index and another saying noindex is a 25 conflict nobody should have to reason about. --> 26 <meta name="robots" content="max-image-preview:large"> 27 28 <!-- Site-wide structured data. Per Tom's handout §8 these live in the 29 static head, not per-page, so AI search and rich results pick 30 them up regardless of which route is being crawled. --> 31
31<script type="application/ld+json"> 32 { 33 "@context": "https://schema.org", 34 "@type": "Organization", 35 "name": "Great Experts", 36 "url": "https://greatexperts.ai", 37 "logo": { 38 "@type": "ImageObject", 39 "url": "https://greatexperts.ai/brand/ge-mark.png", 40 "width": 1024, 41 "height": 1024 42 }, 43 "image": "https://greatexperts.ai/og/main.jpg", 44 "description": "A multi-expert AI chat platform where domain experts build AI agents grounded in their own knowledge base via Retrieval-Augmented Generation.", 45 "parentOrganization": { 46 "@type": "Organization", 47 "name": "Great Spirits Limited", 48 "address": { 49 "@type": "PostalAddress", 50 "addressLocality": "Abu Dhabi", 51 "addressRegion": "ADGM", 52 "addressCountry": "AE" 53 } 54 }, 55 "sameAs": [] 56 } 57 </script>
57 58
58<script type="application/ld+json"> 59 { 60 "@context": "https://schema.org", 61 "@type": "SoftwareApplication", 62 "name": "Great Experts", 63 "applicationCategory": "BusinessApplication", 64 "operatingSystem": "Web", 65 "url": "https://greatexperts.ai", 66 "description": "RAG-bounded AI experts. Domain experts build AI agents grounded in their own knowledge base; users get answers grounded in real, verifiable expertise.", 67 "offers": { 68 "@type": "AggregateOffer", 69 "priceCurrency": "USD", 70 "lowPrice": "0", 71 "highPrice": "29.99" 72 } 73 } 74 </script>
74 75 76 <!-- Google Tag Manager - PRODUCTION HOSTNAMES ONLY. 77 The in-container BLOCK exceptions are Page View triggers, and GTM 78 exceptions only block tags firing on the same event type - so 79 Initialization tags (GA4/GAds base), timer, click and custom-event 80 tags sailed straight past them on staging/localhost. Verified live 81 on staging 2026-08-21: 6 Google Ads requests with exceptions active. 82 Gating the loader itself closes every present and future tag type 83 at once. Trade-off, accepted: GTM Preview only works against 84 production; staging verification is the Conversions API test path. --> 85
85<script>(function(w,d,s,l,i){if(!/^(www\.)?greatexperts\.ai$/.test(location.hostname))return; 86 w[l]=w[l]||[];w[l].push({'gtm.start': 87 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 88 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 89 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 90 })(window,document,'script','dataLayer','GTM-P4WK7NLF');</script>
90 91 <!-- End Google Tag Manager --> 92 93 <link rel="preconnect" href="https://fonts.googleapis.com"> 94 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> 95 96 <!-- Booking widget (home #book-a-call): warm up Calendly and pre-fetch its 97 script so the embed is ready by the time the user scrolls to it. --> 98 <link rel="preconnect" href="https://calendly.com"> 99 <link rel="preconnect" href="https://assets.calendly.com"> 100 <link rel="preload" as="script" href="https://assets.calendly.com/assets/external/widget.js"> 101 <link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300..600;1,9..144,300..600&family=Inter:wght@400;450;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet"> 102 103 <!-- GA4 is loaded by GTM (GA4 - Base Tag), NOT here. A direct gtag.js 104 snippet used to sit in this spot; it double-configured G-HM0SSYPTYT 105 next to GTM's tag and, unlike GTM tags, could not be hostname-guarded, 106 so every localhost/staging session polluted analytics. GTM is the one 107 owner of every tracking script on this site. --> 108
108<script> 109 // Light-only â brand has no ratified dark-mode token set yet. 110 // Strip any stale html.dark applied by an earlier build. 111 document.documentElement.classList.remove('dark'); 112 </script>
112 113
113<script type="module" async="" crossorigin="" src="/assets/app-DJaygaB4.js"></script>
113 114 <link rel="stylesheet" crossorigin="" href="/assets/app-BN3aRuHV.css"> 115 <title>Great Experts pricing | Pick your plan</title><meta name="description" content="0% commission, always. You keep 100% of what you earn."/><link rel="canonical" href="https://greatexperts.ai/pricing"/><meta property="og:title" content="Great Experts pricing | Pick your plan"/><meta property="og:description" content="0% commission, always. You keep 100% of what you earn."/><meta property="og:url" content="https://greatexperts.ai/pricing"/><meta property="og:image" content="https://greatexperts.ai/og/pricing.jpg"/><meta property="og:image:secure_url" content="https://greatexperts.ai/og/pricing.jpg"/><meta property="og:image:type" content="image/jpeg"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta name="twitter:title" content="Great Experts pricing | Pick your plan"/><meta name="twitter:description" content="0% commission, always. You keep 100% of what you earn."/><meta name="twitter:image" content="https://greatexperts.ai/og/pricing.jpg"/></head> 116 <body class="antialiased"> 117 <!-- GTM noscript intentionally removed: an <iframe> cannot be hostname- 118 gated, and a no-JS visitor executes no tags anyway. --> 119 <div id="root"></div>
120<script>window.__VITE_REACT_SSG_HASH__ = 'ao7al6dat9'</script>
120 121 122 123</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.