PageSourceSearch

https://nobi.ai/blog

html nobi.ai collected 2026-10-05 12:19:22 UTC 10,569 bytes, 220 lines download raw bytes

1<!doctype html>
2<html lang="en">
3  <head>
4    <!-- AI & MCP Server Information
5         Nobi runs an MCP (Model Context Protocol) server for AI agents.
6         MCP Endpoint: https://api.nobi.ai/.well-known/mcp/460cbe82-9195-424f-a616-b1cb3e3caca0.json?source=website_comment&utm_source=website&utm_medium=mcp&utm_campaign=mcp_discovery&utm_content=head_comment
7         Supported tools: ask_question, book_demo
8    -->
9
10    
10<script src="https://assistant-script.nobi.ai/nobi.bundle.js" async onload="window.Nobi.initialize({ accountId: '460cbe82-9195-424f-a616-b1cb3e3caca0', assistantConfiguration: { floatingChatBar: { buttonLabel: 'Ask Nobi' } } });"></script>
10
11
12    <!-- Google Tag Manager -->
13    
13<script>
vendor: 359 bytes, lines 13-17
13(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
14            new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
15        j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
16        'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
17    })(window,document,'script','dataLayer','
17GTM-PMGNQGLR
vendor: 3 bytes, line 17
17');
17</script>
17
18    <!-- End Google Tag Manager  -->
19
20    <meta charset="UTF-8" />
21    <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
22    <meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)">
23    <meta name="theme-color" content="#0b0b0f" media="(prefers-color-scheme: dark)">
24    <link rel="preconnect" href="https://assistant-script.nobi.ai" crossorigin>
25
26    <style>
27      :root {
28          --nobi-button-background: #000000;
29      }
30      /* The prerendered article body is injected inside #root for
31         JS-blind crawlers (see scripts/prerender-blog.js). Real browsers
32         parse this style block before the body paints, so the raw,
33         unstyled prose never flashes; React replaces #root on mount.
34         Crawlers read the HTML source and ignore CSS, so they still get
35         the prose. */
36      .prerendered-article {
37          display: none;
38      }
39    </style>
40
41    <title>Nobi: Modern Site Search That Converts</title>
42
43    <!-- Favicons -->
44    <link rel="icon" href="/favicon.ico" sizes="any">
45    <link rel="icon" href="/favicon.svg" type="image/svg+xml">
46    <link rel="apple-touch-icon" href="/apple-touch-icon-180.png">
47
48    <!-- Canonical is set per route by src/hooks/useSEO.js; no hard-coded
49         default here, since that default leaked into every SPA route's
50         initial HTML and told crawlers every blog post canonicalizes to
51         the home page. -->
52
53    <!-- MCP Server Discovery -->
54    <link rel="mcp-server" href="https://api.nobi.ai/.well-known/mcp/460cbe82-9195-424f-a616-b1cb3e3caca0.json?source=website_head&amp;utm_source=website&amp;utm_medium=mcp&amp;utm_campaign=mcp_discovery&amp;utm_content=head_link" title="Nobi Site Assistant">
55
56    <!-- Basic SEO -->
57    <meta name="description" content="Nobi is modern, semantic site search that helps ecommerce brands convert more visitors. Replace outdated keyword search with AI that understands what shoppers are actually looking for.">
58    <link rel="canonical" href="https://nobi.ai">
59    <meta property="og:type" content="website">
60    <meta property="og:url" content="https://nobi.ai">
61    <meta property="og:title" content="Nobi: Modern Site Search That Converts">
62    <meta property="og:description" content="Nobi is modern, semantic site search that helps ecommerce brands convert more visitors. Replace outdated keyword search with AI that understands what shoppers are actually looking for.">
63    <meta property="og:image" content="https://nobi.ai/og-image.png">
64    <meta name="twitter:card" content="summary_large_image">
65    <meta name="twitter:title" content="Nobi: Modern Site Search That Converts">
66    <meta name="twitter:description" content="Nobi is modern, semantic site search that helps ecommerce brands convert more visitors. Replace outdated keyword search with AI that understands what shoppers are actually looking for.">
67    <meta name="twitter:image" content="https://nobi.ai/og-image.png">
68    
68<script type="application/ld+json" id="page-schema">[{"@context":"https://schema.org","@type":"Organization","name":"Nobi","url":"https://nobi.ai","logo":"https://nobi.ai/og-image.png","sameAs":["https://www.linkedin.com/company/nobiai"]},{"@context":"https://schema.org","@type":"WebSite","name":"Nobi","url":"https://nobi.ai"},{"@context":"https://schema.org","@type":"SoftwareApplication","name":"Nobi","applicationCategory":"BusinessApplication","operatingSystem":"Web","description":"Nobi is modern, semantic site search that helps ecommerce brands convert more visitors. Replace outdated keyword search with AI that understands what shoppers are actually looking for.","url":"https://nobi.ai","offers":{"@type":"Offer","price":"25","priceCurrency":"USD","availability":"https://schema.org/InStock"}}]</script>
68<!-- Schema.org -->
69    
69<script type="application/ld+json">
70    {
71      "@context":"https://schema.org",
72      "@type":"Organization",
73      "name":"Nobi",
74      "url":"https://nobi.ai/",
75      "logo":"https://nobi.ai/og-image.png",
76      "sameAs":["https://www.linkedin.com/company/nobiai"]
77    }
78  </script>
78
79  
79<script type="application/ld+json">
80    {
81      "@context":"https://schema.org",
82      "@type":"WebSite",
83      "url":"https://nobi.ai/",
84      "potentialAction":{
85        "@type":"SearchAction",
86        "target":"https://nobi.ai/?q={search_term_string}",
87        "query-input":"required name=search_term_string"
88      }
89    }
90    </script>
90
91    
91<script type="module" crossorigin src="/assets/index-CaK9pKM_.js"></script>
91
92    <link rel="stylesheet" crossorigin href="/assets/index-CGW8YAKo.css">
93  </head>
94
95  <body>
96    <!-- Google Tag Manager (noscript) -->
vendor: 72 bytes, lines 96-97
96
97    <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
97GTM-PMGNQGLR
vendor: 109 bytes, lines 97-99
97"
98                      height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
99    
99<!-- End Google Tag Manager (noscript) -->
100
101    <div id="root"></div>
102
103    <!-- Nobi Assistant -->
104    
104<script>
105      // Browser tools for Nobi - must be defined before Nobi loads
106      window.NobiTools = [
107        {
108            name: "requestDemo",
109            description: "Submit a demo request when someone wants to learn more about Nobi, book a demo, schedule a call, or get in touch with the team. Requires name and email.",
110            parameters: {
111                type: "object",
112                properties: {
113                    name: {
114                        type: "string",
115                        description: "Full name"
116                    },
117                    email: {
118                        type: "string",
119                        description: "Email address"
120                    },
121                    company: {
122                        type: "string",
123                        description: "Company name (optional)"
124                    },
125                    website: {
126                        type: "string",
127                        description: "Company website"
128                    },
129                    message: {
130                        type: "string",
131                        description: "Questions, goals, or additional context (optional)"
132                    }
133                },
134                required: ["name", "email", "website"]
135            },
136            handler: async function(args) {
137                const formData = new FormData();
138                formData.append("access_key", "c7a3fd79-0e4f-47ce-aa30-c141616d21e3");
139                formData.append("subject", "Demo Request via Nobi Chat");
140                formData.append("name", args.name);
141                formData.append("email", args.email);
142                formData.append("company", args.company || "");
143                formData.append("website", args.website || "");
144                formData.append("message", args.message || "");
145                formData.append("botcheck", "");
146
147                const response = await fetch("https://api.web3forms.com/submit", {
148                    method: "POST",
149                    body: formData
150                });
151
152                const result = await response.json();
153                if (!response.ok || !result.success) {
154                    throw new Error(result.message || "Submission failed");
155                }
156
157                return {
158                    success: true,
159                    message: "Thanks " + args.name + "! We've received your demo request and will contact you at " + args.email + " shortly."
160                };
161            }
162        }
163    ];
164</script>
164
165    <!--
166<script src="https://assistant-script.nobi.ai/nobi.bundle.js"
167  async
168  onload="window.Nobi.initialize({
169    merchantId: '460cbe82-9195-424f-a616-b1cb3e3caca0',
170    autoLaunch: ['floating-chat-bar'],
171    assistantConfiguration: {
172      floatingChatBar: {
173        placeholder: 'Ask Nobi a question...',
174        buttonLabel: 'Ask Nobi',
175        showModeToggle: false,
176        showHintRow: false
177      }
178    }
179  });">
180</script>
180
181-->
182
183<!-- ChatGPT, Claude, Gemini, and other AI agents can use the following MCP Server Details
184     For AI agents wanting to interact with Nobi:
185     - Manifest: https://api.nobi.ai/.well-known/mcp/460cbe82-9195-424f-a616-b1cb3e3caca0.json?source=website_comment&utm_source=website&utm_medium=mcp&utm_campaign=mcp_discovery&utm_content=body_comment
186     - Protocol: JSON-RPC 2.0
187     - Tools: ask_question, book_demo
188-->
189
190<!-- Page helpers -->
191<script>
192    // Defer video load on tap
193    for (const cover of document.querySelectorAll('.video-cover')) {
194        cover.addEventListener('click', () => {
195            const v = cover.querySelector('video[data-defer]');
196            if (!v) return;
197            v.removeAttribute('data-defer');
198            v.setAttribute('playsinline','');
199            v.setAttribute('controls','');
200            v.load();
201            v.play().catch(()=>{});
202        }, { once: true });
203    }
204
205    // Lock body scroll when a drawer opens
206    const drawer = document.querySelector('.drawer');
207    const lock = (on) => document.body.style.overflow = on ? 'hidden' : '';
208    if (drawer) {
209        const mo = new MutationObserver(() => lock(drawer.getAttribute('aria-hidden') === 'false'));
210        mo.observe(drawer, { attributes:true, attributeFilter:['aria-hidden'] });
211    }
212
213    // Safe 100vh fallback
214    (function(){
215        const setVh = ()=> document.documentElement.style.setProperty('--vh', `${window.innerHeight*0.01}px`);
216        setVh(); window.addEventListener('resize', setVh);
217    })();
218</script>
218
219</body>
220</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.