<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Jainhanish on Medium]]></title>
        <description><![CDATA[Stories by Jainhanish on Medium]]></description>
        <link>https://medium.com/@jainhanish31?source=rss-b7e77b75ff64------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*5gvNOkvAKJ3zGiOv</url>
            <title>Stories by Jainhanish on Medium</title>
            <link>https://medium.com/@jainhanish31?source=rss-b7e77b75ff64------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 23:07:34 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@jainhanish31/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[How to Configure Sitecore Solr Search to Index and Store PDF File Content]]></title>
            <link>https://medium.com/@jainhanish31/how-to-configure-sitecore-solr-search-to-index-and-store-pdf-file-content-a1690f99c338?source=rss-b7e77b75ff64------2</link>
            <guid isPermaLink="false">https://medium.com/p/a1690f99c338</guid>
            <category><![CDATA[pdf-extraction]]></category>
            <category><![CDATA[search]]></category>
            <category><![CDATA[solr]]></category>
            <category><![CDATA[sitecore]]></category>
            <category><![CDATA[pdf-search]]></category>
            <dc:creator><![CDATA[Jainhanish]]></dc:creator>
            <pubDate>Sat, 29 Nov 2025 19:26:39 GMT</pubDate>
            <atom:updated>2025-11-30T14:14:15.541Z</atom:updated>
            <content:encoded><![CDATA[<p>Indexing PDF content within Sitecore using Solr requires specific configurations involving Windows IFilters and Sitecore’s schema mapping. This guide consolidates the necessary steps to enable PDF searchability and ensure the content is viewable directly in your Solr index browser.</p><h3>Prerequisites</h3><p>Sitecore relies on native Windows IFilters to extract text from media documents. To index PDFs successfully:</p><ul><li><strong>Adobe PDF IFilter Version 9 is Required:</strong> You must install the Adobe PDF IFilter version 9 (or later 64-bit compatible version for modern servers) on every Content Management (CM) and Content Delivery (CD) server that handles indexing.</li><li><strong>Download Location:</strong> The necessary IFilter files are often available via Adobe’s legacy FTP server: ftp://ftp.adobe.com/pub/adobe/acrobat/win/9.x/. Ensure you choose the correct 32-bit or 64-bit version matching your server’s architecture and IIS Application Pool settings. Since for me the above link didn’t worked so I downloaded from <a href="https://community.adobe.com/t5/acrobat-discussions/current-official-download-link-for-adobe-pdf-ifilter-11-for-64-bit-platforms/td-p/11988379">https://community.adobe.com/t5/acrobat-discussions/current-official-download-link-for-adobe-pdf-ifilter-11-for-64-bit-platforms/td-p/11988379</a></li><li><strong>Permissions:</strong> The IIS Application Pool identity running your Sitecore instance must have read permissions to the IFilter installation directory and the Sitecore media library folder.</li></ul><h3>Configuration Steps</h3><p>Follow these steps in order to enable, configure, and verify PDF content indexing.</p><p>1. Install the Adobe PDF IFilter</p><p>Download and install the Adobe PDF IFilter software on all relevant Sitecore servers. This is a system-level installation.</p><p>2. Configure Sitecore for IFilter Usage</p><p>You need to tell Sitecore to use the Windows IFilter service instead of its default, basic media extractor. This is done in the Sitecore.ContentSearch.ContentExtraction.config file (located in App_Config\Sitecore\ContentSearch\) or via a patch file.</p><p>Modify the &lt;mediaFileTextExtractor&gt; node:</p><pre>&lt;configuration xmlns:patch=&quot;www.sitecore.net&quot;&gt;<br>  &lt;sitecore&gt;<br>    &lt;contentSearch&gt;<br>      &lt;contentExtraction&gt;<br>        &lt;mediaFileTextExtractor type=&quot;Sitecore.ContentSearch.ContentExtraction.IFilter.IFilterMediaFileTextExtractor, Sitecore.ContentSearch.ContentExtraction&quot;/&gt;<br>      &lt;/contentExtraction&gt;<br>    &lt;/contentSearch&gt;<br>  &lt;/sitecore&gt;<br>&lt;/configuration&gt;</pre><p>3. Verify File Types and MIME Types for Indexing</p><p>Ensure that the PDF MIME type (application/pdf) is explicitly allowed within the index configuration.</p><p>Check the &lt;mediaIndexing&gt; section within your Sitecore.ContentSearch.Solr.DefaultIndexConfiguration.config (or a custom patch file) to confirm that PDFs are included and not excluded.</p><p>4. Ensure the Content Field is Mapped Correctly in Sitecore</p><p>This is a critical step to ensure the data is <strong>stored and visible</strong> in the Solr Admin UI. The default Sitecore configuration often uses returnType=&quot;string&quot;, which prevents the large text blob from being stored in a viewable manner.</p><p>You <strong>must</strong> change returnType=&quot;string&quot; to <strong>returnType=&quot;text&quot;</strong>.</p><p>In your configuration patch file, the computed field definition should look exactly like this:</p><pre>&lt;fields hint=&quot;raw:AddComputedIndexField&quot;&gt;<br>  &lt;!-- Ensure returnType=&quot;text&quot; is used for large content extraction --&gt;<br>  &lt;field fieldName=&quot;_content&quot; returnType=&quot;text&quot; type=&quot;Sitecore.ContentSearch.ComputedFields.MediaItemContentExtractor,Sitecore.ContentSearch&quot;&gt;<br>    &lt;defaultMediaExtractor ref=&quot;contentSearch/indexConfigurations/contentExtraction/defaultMediaExtractor&quot;/&gt;<br>    &lt;mediaIndexing ref=&quot;contentSearch/indexConfigurations/defaultSolrIndexConfiguration/mediaIndexing&quot;/&gt;<br>  &lt;/field&gt;<br>&lt;/fields&gt;</pre><p>5. Verify the Solr Schema Field Definitionmanaged-schema</p><p>While Sitecore maps the field dynamically, you need to ensure the target Solr field has stored=&quot;true&quot;.</p><ul><li>Access your Solr Admin Panel (e.g., http://localhost:8983/solr/) and select your index core (e.g., sitecore_master_index).</li><li>Navigate to the <strong>Schema</strong> section.</li><li>The _content field (or the dynamically mapped field like _content_t if using dynamic fields) must be configured as <strong>stored=&quot;true&quot;</strong>. A typical working definition looks like this:</li></ul><pre>&lt;field name=&quot;_content&quot; type=&quot;text_general&quot; indexed=&quot;true&quot; stored=&quot;true&quot; multiValued=&quot;true&quot;/&gt;<br>&lt;!-- Or if using dynamic fields, the template should support stored=&quot;true&quot; --&gt;</pre><p>6. Rebuild the Search Indexes</p><p>Configuration changes require a full index rebuild to apply the new schema mapping and re-extract the media content using the IFilter.</p><ul><li>In the Sitecore Launchpad, open the <strong>Control Panel</strong>.</li><li>Click on <strong>Indexing Manager</strong>.</li><li>Select the relevant indexes (e.g., sitecore_master_index, sitecore_web_index) and click <strong>Rebuild</strong>.</li></ul><p>As shown in below screenshot, after doing above configuration changes, I was able to see my file content appearing in <em>_content_t</em> field.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*BPVAf4f_0RIBMx6B5bhdBg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HAWT8VdLFx8l9ATdOrauFQ.png" /></figure><p>Since I modified/checking on <em>sitecore_master_index</em>, I was able to verify the same thing in CMS search bar by searching for a text which is part of pdf’s content.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*f1hLT5j4Vkil2_bKmw4xxg.png" /></figure><h4>Debugging and Verification</h4><p>If you followed all steps and still don’t see the content, use the Solr Admin panel to debug the results directly.</p><ol><li><strong>Go to the Query Tab</strong> in the Solr Admin UI for your core.</li><li><strong>Query for a specific PDF item</strong> by its Sitecore GUID using the _id field (e.g., q=_id:&quot;{YOUR-ITEM-GUID}&quot;).</li><li><strong>Execute the Query</strong> and inspect the resulting JSON/XML output. The _content field should now be present and populated with the text extracted from your PDF document.</li></ol><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a1690f99c338" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Sitecore Search- Blog 5 : Creating & Integrating a SearchResult Widget with Sitecore Search SDK]]></title>
            <link>https://medium.com/@jainhanish31/creating-integrating-a-searchresult-widget-with-sitecore-search-sdk-a5085681f33e?source=rss-b7e77b75ff64------2</link>
            <guid isPermaLink="false">https://medium.com/p/a5085681f33e</guid>
            <category><![CDATA[saas]]></category>
            <category><![CDATA[sitecore-search]]></category>
            <category><![CDATA[widget]]></category>
            <category><![CDATA[nextjs]]></category>
            <category><![CDATA[rules]]></category>
            <dc:creator><![CDATA[Jainhanish]]></dc:creator>
            <pubDate>Tue, 18 Nov 2025 19:53:55 GMT</pubDate>
            <atom:updated>2025-11-18T19:59:25.585Z</atom:updated>
            <content:encoded><![CDATA[<h3>Introduction</h3><p>In this blog, we’ll walk through:</p><ol><li>How to create a <strong>Search Results</strong> widget in the <strong>Sitecore Search Customer Engagement Console (CEC)</strong></li><li>Configure its settings (RFK ID, variation, rules)</li><li>Build a React widget component (using the Search JS SDK + UI components)</li><li>Integrate it into a Next.js app</li></ol><p>By the end, you’ll have a working SearchResult widget that’s configured in Search UI and rendered in your React frontend.</p><h3>Step 1: Create the Widget in Sitecore Search CEC</h3><ul><li><strong>Log into the Customer Engagement Console (CEC)</strong> for your Sitecore Search instance.</li><li>Navigate to the <strong>Widgets</strong> section.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LDVBdLEciQKuY1w6uO-rNg.png" /></figure><ul><li>Click <strong>Add widget</strong> → <strong>Search results</strong>.(For this blog we are using search results widget)</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ETP7Me0l0A0tJTIgU0fSdQ.png" /></figure><ol><li>In the configuration screen:</li></ol><ul><li>Enter <strong>Widget Name</strong></li><li>Provide a <strong>RFK ID</strong> (this is the unique ID you’ll use in your frontend code)</li><li>Set the <strong>Variation name</strong> (by default there’s “Default”)</li><li>Choose whether the widget “Will be used in” a form / page, etc.(The options are: Page, Dialog, and Common across all pages. Select “Common across all pages” as we want to implement this widget on every page of our site.)</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xn5qQhP_75FAlQuEXT-i9Q.png" /></figure><ul><li>Click <strong>Next</strong>, review settings, then <strong>Save</strong>.</li></ul><h3>Step 2: Configuring Rules For Widget</h3><p>Once you have created widget, click on it and you will see the screen as below where you see variations listed(atleast one default variation is mandatory and available by default as you create widget).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sQTpS0hLjEoEaPC7O4ac4Q.png" /></figure><p>Click on it and it will take you to the rules section, where clicking on <em>“Add Rule” </em>will open another screen where you can add configuration rules and settings for the widget.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3wPztDiJFzvvlwnzcd2hWA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dlHbkWhh0OLYAnuZn5vfBw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sFc9Y7Jsyqc08o_WW-bDbA.png" /></figure><ul><li>After saving, click <strong>Publish</strong> so the widget is live.</li></ul><h3>Step 3: Integrate Search in Application</h3><p>Considering you already have a Next.js running application, now we need to install the packages needed for the Search JS SDK to integrate Sitecore Search with our Next.js app.</p><p>Open the terminal and run the following commands:</p><pre>npm install --save @sitecore-search/react<br>npm install --save @sitecore-search/ui<br>npm install --save-dev @sitecore-search/cli</pre><p>We will make use of storybook documentation so download or copy the component from there and create widget(<a href="https://developers.sitecorecloud.io/search-sdk/react/latest/storybook/index.html?path=/story/widget-templates-content-search-results-basic--page">https://developers.sitecorecloud.io/search-sdk/react/latest/storybook/index.html?path=/story/widget-templates-content-search-results-basic--page</a>)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*K6sCp7Gx3AUVoHKbpUQzzg.png" /></figure><p>In your root level file(ex- i added in layout.tsx) import <em>PageController </em>and add following to set our locale to “en-US”:</p><pre> <br>import { PageController} from &quot;@sitecore-search/react&quot;;</pre><pre>PageController.getContext().setLocaleLanguage(&#39;en&#39;);<br>PageController.getContext().setLocaleCountry(&#39;us&#39;);</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*KhCkV_QFStmhrz7k1mH3dg.png" /></figure><p>Now at your component level, import your widget which you created above and import WidgetProvider</p><pre> <br>import {WidgetsProvider } from &quot;@sitecore-search/react&quot;;</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*EdihFsC9xOfWt6taE1aSFQ.png" /></figure><p>Next, wrap the main &lt;Component&gt; inside of a new ‘WidgetsProvider’:</p><pre>&lt;WidgetsProvider<br>      env={process.env.SEARCH_ENV}<br>      customerKey={process.env.SEARCH_CUSTOMER_KEY}<br>      apiKey={process.env.SEARCH_API_KEY}<br>    &gt;<br>    &lt;Component {...pageProps} /&gt;<br>  &lt;/WidgetsProvider&gt;</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/915/1*b9NRq4SnM-lhoHVitnRc9g.png" /></figure><p>Test in your browser:</p><ul><li>Enter a search query</li><li>See if results appear</li><li>Check network calls to verify correct rfk_id is being used</li></ul><h3>Conclusion</h3><p>Creating a SearchResult widget in Sitecore Search (via the CEC portal) and integrating it into your React/Next.js frontend using the Search SDK gives you a powerful, maintainable search experience.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a5085681f33e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[JSS vs Content SDK — Architecture, Differences, Compatibility, and When to Use What]]></title>
            <link>https://medium.com/@jainhanish31/jss-vs-content-sdk-architecture-differences-compatibility-and-when-to-use-what-80da10c84c63?source=rss-b7e77b75ff64------2</link>
            <guid isPermaLink="false">https://medium.com/p/80da10c84c63</guid>
            <category><![CDATA[content-sdk]]></category>
            <category><![CDATA[sitecore-content-sdk]]></category>
            <category><![CDATA[sitecore-headless]]></category>
            <category><![CDATA[sitecore-jss]]></category>
            <category><![CDATA[js]]></category>
            <dc:creator><![CDATA[Jainhanish]]></dc:creator>
            <pubDate>Mon, 17 Nov 2025 10:25:03 GMT</pubDate>
            <atom:updated>2025-11-17T10:29:05.984Z</atom:updated>
            <content:encoded><![CDATA[<h3>JSS vs Content SDK — Architecture, Differences, Compatibility, and When to Use What</h3><p>Sitecore’s headless ecosystem has evolved significantly with the rise of <strong>XM Cloud</strong>. Today, developers often face a common question:</p><blockquote><strong><em>Should we use JSS or Content SDK for our Headless implementation?</em></strong></blockquote><p>Both tools enable modern front-end development with Angular, React, Next.js, Vue, etc. But their <strong>architecture, purpose, compatibility, and use-cases are completely different</strong>.</p><p>In this blog we will break it down in the simplest possible way.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pTerxTS9hpg2lT-vAMyUTw.png" /></figure><h3>What Is JSS?</h3><p><strong>JSS (JavaScript Services)</strong> is Sitecore’s original headless development framework designed for XM, XP, XM Cloud.</p><p>It delivers <strong>full layout information</strong>, <strong>component mapping</strong>, and <strong>routing</strong> using Sitecore’s Layout Service.</p><h4>Key Features of JSS</h4><ul><li>Component-based architecture</li><li>Layout Service (JSON output of page + components)</li><li>Sitecore-managed routing</li><li>Experience Editor support</li><li>Personalization support</li><li>Headless SXA support</li><li>Supports React, Angular, Vue</li></ul><h4>JSS SDK — Layout Service JSON (Full Page + Components)</h4><p>This is what JSS returns when you request a page, e.g.:</p><pre>/sitecore/api/layout/render/jss?item=/home&amp;sc_lang=en</pre><pre>{<br>  &quot;sitecore&quot;: {<br>    &quot;context&quot;: {<br>      &quot;pageEditing&quot;: false,<br>      &quot;language&quot;: &quot;en&quot;,<br>      &quot;site&quot;: {<br>        &quot;name&quot;: &quot;jss-app&quot;<br>      }<br>    },<br>    &quot;route&quot;: {<br>      &quot;name&quot;: &quot;home&quot;,<br>      &quot;displayName&quot;: &quot;Home&quot;,<br>      &quot;fields&quot;: {<br>        &quot;pageTitle&quot;: {<br>          &quot;value&quot;: &quot;Welcome to Our Website&quot;<br>        },<br>        &quot;heroImage&quot;: {<br>          &quot;value&quot;: &quot;/-/media/hero.jpg&quot;<br>        }<br>      },<br>      &quot;placeholders&quot;: {<br>        &quot;main&quot;: [<br>          {<br>            &quot;componentName&quot;: &quot;HeroBanner&quot;,<br>            &quot;fields&quot;: {<br>              &quot;title&quot;: { &quot;value&quot;: &quot;Hello from JSS&quot; },<br>              &quot;subtitle&quot;: { &quot;value&quot;: &quot;Hero banner from Layout service&quot; }<br>            }<br>          },<br>          {<br>            &quot;componentName&quot;: &quot;TextBlock&quot;,<br>            &quot;fields&quot;: {<br>              &quot;text&quot;: { &quot;value&quot;: &quot;Text block from layout service&quot; }<br>            }<br>          }<br>        ]<br>      }<br>    }<br>  }<br>}</pre><h3>What Is Content SDK?</h3><p><strong>Content SDK is XM Cloud’s pure content API SDK.</strong><br> It is used when you want only <strong>content data</strong>, not Sitecore layouts or renderings.</p><p>It communicates with <strong>Sitecore Edge (GraphQL APIs)</strong>.</p><h4>Key Features of Content SDK</h4><ul><li>Raw content delivery (no renderings)</li><li>Edge GraphQL queries</li><li>Fully decoupled front-end</li><li>No Experience Editor</li><li>No Layout Service</li><li>No Sitecore routing</li><li>Fast and cloud-native</li><li>Works only with <strong>XM Cloud</strong> (not XP/XM classic)</li></ul><h4>Content SDK — Raw Content JSON (GraphQL Query Response)</h4><p>This is what you get from XM Cloud Content Delivery / Edge:</p><pre>query {<br>  item(path: &quot;/home&quot;, language: &quot;en&quot;) {<br>    name<br>    url<br>    pageTitle: field(name: &quot;pageTitle&quot;) { value }<br>    heroImage: field(name: &quot;heroImage&quot;) { jsonValue }<br>    components: children {<br>      edges {<br>        node {<br>          name<br>          template {<br>            name<br>          }<br>          fields {<br>            name<br>            jsonValue<br>          }<br>        }<br>      }<br>    }<br>  }<br>}</pre><pre>{<br>  &quot;data&quot;: {<br>    &quot;item&quot;: {<br>      &quot;name&quot;: &quot;home&quot;,<br>      &quot;url&quot;: &quot;/home&quot;,<br>      &quot;pageTitle&quot;: { &quot;value&quot;: &quot;Welcome to Our Website&quot; },<br>      &quot;heroImage&quot;: {<br>        &quot;jsonValue&quot;: {<br>          &quot;src&quot;: &quot;/-/media/hero.jpg&quot;,<br>          &quot;alt&quot;: &quot;Hero Image&quot;<br>        }<br>      },<br>      &quot;components&quot;: {<br>        &quot;edges&quot;: [<br>          {<br>            &quot;node&quot;: {<br>              &quot;name&quot;: &quot;herobanner&quot;,<br>              &quot;template&quot;: { &quot;name&quot;: &quot;HeroBanner&quot; },<br>              &quot;fields&quot;: [<br>                {<br>                  &quot;name&quot;: &quot;title&quot;,<br>                  &quot;jsonValue&quot;: &quot;Hello from Content SDK&quot;<br>                },<br>                {<br>                  &quot;name&quot;: &quot;subtitle&quot;,<br>                  &quot;jsonValue&quot;: &quot;This is content from GraphQL&quot;<br>                }<br>              ]<br>            }<br>          },<br>          {<br>            &quot;node&quot;: {<br>              &quot;name&quot;: &quot;textblock&quot;,<br>              &quot;template&quot;: { &quot;name&quot;: &quot;TextBlock&quot; },<br>              &quot;fields&quot;: [<br>                {<br>                  &quot;name&quot;: &quot;text&quot;,<br>                  &quot;jsonValue&quot;: &quot;This is a content block&quot;<br>                }<br>              ]<br>            }<br>          }<br>        ]<br>      }<br>    }<br>  }<br>}</pre><h3>Architecture Difference</h3><h4>JSS Architecture (Layout Service Based)</h4><p>Used for traditional headless rendering with Sitecore-managed layout.</p><h4>Flow:</h4><ol><li>Frontend (React/Angular/Next.js) requests a route.</li><li>Layout Service returns: Component list, Placeholders, Data source items, Page metadata</li><li>Rendering Host renders each component.</li><li>Experience Editor + personalization are enabled.</li></ol><h3>Content SDK Architecture (Pure Content API)</h3><p>Used for content-driven experiences.</p><h4>Flow:</h4><ol><li>Frontend queries Sitecore Edge using GraphQL.</li><li>Response contains raw data only.</li><li>Frontend fully controls:</li></ol><ul><li>Routing</li><li>Component structure</li><li>Page layout</li></ul><h4>Compatibility Matrix (XM, XP, XM Cloud)</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*J01gMiClFGYWyhQZntJ78A.png" /></figure><h3>When Should You Use JSS?</h3><p>Use <strong>JSS</strong> when:</p><p>✔ You need <strong>Experience Editor</strong><br> ✔ You need <strong>component editing</strong><br> ✔ You want <strong>Sitecore-managed routing</strong><br> ✔ You’re using <strong>personalization</strong><br> ✔ You want <strong>start from Sitecore templates + renderings</strong><br> ✔ You’re building a <strong>component-heavy corporate website</strong><br> ✔ You need <strong>multisite + multilingual</strong> with SXA headless</p><h3>When Should You Use Content SDK?</h3><p>Use <strong>Content SDK</strong> when:</p><p>✔ You need <strong>raw content only</strong><br> ✔ You want <strong>front-end fully in control</strong><br> ✔ You don’t need layout service<br> ✔ You don’t use renderings / placeholders</p><h3>Conclusion</h3><p>Both <strong>JSS</strong> and <strong>Content SDK</strong> are powerful — but serve totally different purposes:</p><ul><li><strong>JSS = Sitecore-driven components + layout (best for websites)</strong></li><li><strong>Content SDK = pure content API (best for apps and developer-driven sites)</strong></li></ul><p>Choosing the right one depends on your needs around personalization, Experience Editor, routing, and layout control.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=80da10c84c63" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Sitecore AI: The Next Evolution of Digital Experience]]></title>
            <link>https://medium.com/@jainhanish31/sitecore-ai-the-next-evolution-of-digital-experience-9ca09c1971f1?source=rss-b7e77b75ff64------2</link>
            <guid isPermaLink="false">https://medium.com/p/9ca09c1971f1</guid>
            <category><![CDATA[xm-cloud]]></category>
            <category><![CDATA[sitecore-ai]]></category>
            <category><![CDATA[dxp]]></category>
            <category><![CDATA[agents]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[Jainhanish]]></dc:creator>
            <pubDate>Fri, 14 Nov 2025 19:23:58 GMT</pubDate>
            <atom:updated>2025-11-14T19:23:58.453Z</atom:updated>
            <content:encoded><![CDATA[<p>Sitecore has recently introduced <strong>Sitecore AI</strong>, a major step forward in how brands create, personalize, and optimize digital experiences. While it’s still in an early stage, the vision behind it is clear: <strong>AI becomes a core layer across the entire Sitecore ecosystem</strong>, not an add-on or a feature inside a single product.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*D_xY9zoHVgA4u8Fr6uHa4w.jpeg" /></figure><h3>What is Sitecore AI?</h3><p>Sitecore AI is a <strong>new AI-driven experience layer</strong> that integrates with Sitecore’s SaaS and composable products — XM Cloud, CDP &amp; Personalize, Search, and Content Hub.</p><p>It’s designed to bring <strong>agent-powered personalization, intelligent automation, and AI-assisted content creation</strong> into every part of the customer journey.</p><h3>Why Sitecore Introduced Sitecore AI</h3><p>Digital experience platforms are becoming increasingly complex. Marketers and developers need:</p><ul><li>Faster content operations</li><li>Automated personalization at scale</li><li>Intelligent insights without heavy manual analysis</li><li>Better orchestration between content, customer data, and experiences</li></ul><p>Sitecore AI is the answer — transforming Sitecore into an <strong>“agentic” DXP</strong>, where AI agents help plan, create, optimize, and personalize experiences automatically.</p><h3>Key Capabilities (Current &amp; Emerging)</h3><h4>1. AI-Driven Content Creation</h4><p>Helps teams generate content variants, summaries, metadata, translations, and creative assets faster and more consistently.</p><h4>2. Automated Personalization</h4><p>AI can analyze behavior, segments, and intent, and deliver the right content automatically — reducing the manual setup required for personalization campaigns.</p><h4>3. Intelligent Search Optimization</h4><p>By integrating with Sitecore Search, AI improves relevance ranking, query understanding, recommendations, and zero-result handling.</p><h4>4. Customer Insights &amp; Predictive Intelligence</h4><p>Combined with CDP &amp; Personalize, Sitecore AI will bring stronger predictive propensity models, journey predictions, and behavioral clustering.</p><h4>5. Agentic Automation (Future-focused)</h4><p>Sitecore AI will introduce <strong>AI Agents</strong> that can assist with tasks such as:</p><ul><li>Creating personalized experiences</li><li>Running optimization experiments</li><li>Identifying content gaps</li><li>Suggesting new pages or components</li><li>Automating workflows</li></ul><h3>How Sitecore AI Fits Into Existing Products</h3><p>Today:</p><ul><li>AI enhances features inside XM Cloud, Search, and CDP.</li><li>Some capabilities are in early access or preview.</li></ul><p>Tomorrow:</p><ul><li>Sitecore AI becomes the <strong>central intelligence layer</strong> across all Sitecore tools.</li><li>Expect deeper integration with Content Hub, XM Cloud components, design systems, and personalization engines.</li></ul><p>In summary:<br> <strong>It’s not replacing XM, XP, CDP, or Search — it is powering them.</strong></p><h3>Why It Matters for Developers &amp; Marketers</h3><h4>For Developers</h4><ul><li>Better APIs and automation tooling</li><li>AI-powered components and experience optimization</li><li>Faster delivery cycles</li><li>Less manual personalization logic</li></ul><h4>For Marketers</h4><ul><li>Create content faster</li><li>Launch experiences with AI-recommended variants</li><li>Personalize without needing deep technical knowledge</li><li>Act on insights instead of manually analyzing data</li></ul><h3>Conclusion</h3><p><strong>Sitecore AI marks the beginning of a new era for Sitecore’s digital experience ecosystem.</strong><br> While still evolving, its direction is clear: a unified AI layer that makes content creation smarter, personalization automatic, and customer journeys more connected.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9ca09c1971f1" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Configuring Sitecore Stream in Sitecore XP]]></title>
            <link>https://medium.com/@jainhanish31/configuring-sitecore-stream-in-sitecore-xp-ea0b21c6d6bd?source=rss-b7e77b75ff64------2</link>
            <guid isPermaLink="false">https://medium.com/p/ea0b21c6d6bd</guid>
            <category><![CDATA[sitecore-stream]]></category>
            <category><![CDATA[sitecore]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[brand-awareness]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[Jainhanish]]></dc:creator>
            <pubDate>Wed, 12 Nov 2025 18:23:02 GMT</pubDate>
            <atom:updated>2025-11-12T18:23:02.574Z</atom:updated>
            <content:encoded><![CDATA[<p>In <a href="https://medium.com/@jainhanish31/introducing-sitecore-stream-the-ai-engine-that-understands-your-brand-0de7f5e39386">previous blog</a> we covered introduction to sitecore stream, what it offers and its capabilities. In this blog we will go hands on to integrate these capabilities in Sitecore XP.</p><p>For Sitecore XP/XM users, Stream isn’t just another bolt-on; it fundamentally transforms content workflows by embedding advanced AI tools directly within the Content Editor and Experience Editor. This means you gain immediate access to powerful capabilities like AI-driven content generation, seamless translation, and efficient content extraction, all precisely where you already work. Crucially, these features are fully configurable to align with your unique brand voice and are robustly connected to your Sitecore instance through Stream’s modern SaaS APIs.</p><h3>Prerequisites</h3><ul><li>Access to sitecore cloud portal(<a href="https://portal.sitecorecloud.io/">https://portal.sitecorecloud.io/</a>) to download the latest Stream package.</li><li>A valid Sitecore Stream license</li><li>Sitecore XP/XM 10.2 or later.</li></ul><h3>Step by step configuration:-</h3><ol><li>Login to sitecore cloud portal, navigate to the apps section and then to Stream. click on “Sitecore stream for platform DXP”</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/678/1*iKoDtGSSM3IiRDTBla-2xA.png" /></figure><p>It will take you to the developers portal form where you can download latest release of sitecore stream.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VovW9bxLyQNB1N4aAU1nmg.png" /></figure><p>Unzip the downloaded package. Inside, you’ll see docs plus a SitecorePackage.zip.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wjH8d_dwT6wYcPJIx4Q8hg.png" /></figure><p>2. Log into your XP/XM instance. Go to <strong>Launchpad &gt; Control Panel &gt; Administration &gt; Install a package</strong>.</p><p>Upload and install the SitecorePackage.zip.</p><p>after installing, check your dashboard — there should be a <strong>Stream section.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/601/1*585fVnn35Kd2wzvkjrpjAA.png" /></figure><p><strong>NOTE</strong>: After installing package you may see all/some features as disabled or even clicking on them can give error but that is not an issue. You can continue with next steps.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*P8l13mkaivibF7Fd-QaIyA.png" /></figure><p>3. Create API Credentials in Sitecore Cloud Portal</p><p>You need a <strong>Client ID</strong> and <strong>Client Secret</strong> to connect XP with Stream:</p><ul><li>Log into the <strong>Sitecore Cloud Portal</strong>. <a href="https://portal.sitecorecloud.io/">https://portal.sitecorecloud.io/</a></li><li>Open the <strong>Stream app</strong> and go to <strong>Admin &gt; XP/XM Keys</strong> as shown in below screenshot.</li><li>Click create credentials, it will open popup, give some label and description -&gt; create. It will create <strong>Client Id</strong> and <strong>Client Secret</strong>.</li></ul><p><strong>NOTE</strong>: the secret is shown only once so <strong>save it.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gcmGHU9BHNuSI1RPIsn6hQ.png" /></figure><p>4. Update Connection Strings</p><p>In your Sitecore XP/XM installation, Edit your ConnectionStrings.config file:</p><pre>C:\inetpub\wwwroot\YourSitecoreCm\App_Config\ConnectionStrings.config</pre><pre>&lt;add name=&quot;sitecore.aiclient.stream&quot; connectionString=&quot;client_id=YOUR_CLIENT_ID;client_secret=YOUR_CLIENT_SECRET;authority=https://auth.sitecorecloud.io;audience=https://api.sitecorecloud.io&quot; /&gt;</pre><p>Replace clientid and secret with your real values.</p><p>some feature not enabled- that is not issue, its based on subscription.</p><p>5. Verify the setup</p><ul><li>Open the <strong>Content Editor</strong>.</li><li>Look for the <strong>AI icon</strong> beside sitecore item fields.</li><li>Click it and test generating or refining content. If the dialog opens and works, you’re good to go.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/586/1*PpQJKEYf7gavlBCOf4FosQ.png" /></figure><p>I selected my brand kit and asked stream to generate some content based on my query. Worked as shown below:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/925/1*rXKtj89UoBq_QzBM9w1zKA.png" /></figure><h4>Errors you may face and their resolution.</h4><ol><li><strong>Unknown connection string ‘sitecore.aiclient.stream’ — </strong>reverify the connection string in connectionstring.config file, if details are correct then try to restart application and check again, it should work.</li></ol><h4>References:</h4><p><a href="https://doc.sitecore.com/xp/en/users/latest/sitecore-experience-platform/install-and-configure-sitecore-stream-for-platform-dxp.html">https://doc.sitecore.com/xp/en/users/latest/sitecore-experience-platform/install-and-configure-sitecore-stream-for-platform-dxp.html</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ea0b21c6d6bd" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Introducing Sitecore Stream — The AI Engine That Understands Your Brand]]></title>
            <link>https://medium.com/@jainhanish31/introducing-sitecore-stream-the-ai-engine-that-understands-your-brand-0de7f5e39386?source=rss-b7e77b75ff64------2</link>
            <guid isPermaLink="false">https://medium.com/p/0de7f5e39386</guid>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[saas]]></category>
            <category><![CDATA[sitecore]]></category>
            <category><![CDATA[sitecore-stream]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[Jainhanish]]></dc:creator>
            <pubDate>Tue, 04 Nov 2025 17:17:16 GMT</pubDate>
            <atom:updated>2025-11-04T17:17:16.190Z</atom:updated>
            <content:encoded><![CDATA[<h3>Introducing Sitecore Stream — The AI Engine That Understands Your Brand</h3><p>Sitecore has been a pioneer in digital experience management — empowering brands to deliver personalized, consistent content at scale. From <strong>Sitecore XP</strong> to <strong>XM Cloud</strong>, the platform has evolved toward a fully composable, SaaS-first ecosystem.</p><p>Now, Sitecore is taking its biggest step yet into the world of AI with <strong>Sitecore Stream</strong> — a new <strong>AI-powered, SaaS-based platform</strong> that redefines how marketers, content creators, and developers collaborate to create brand-aligned digital experiences.</p><p><strong>Sitecore Stream is <em>brand-aware AI</em></strong> — meaning it learns your brand’s tone, guidelines, and messaging style so everything it generates feels <em>authentically you</em>.</p><p>In this first post of our “<strong>Mastering Sitecore Stream</strong>” series, we’ll explore:</p><ul><li>What Sitecore Stream is and how it fits into the modern Sitecore ecosystem</li><li>Why it matters for marketers, content ops, and developers</li><li>The core building blocks: <strong>Brand Kits</strong>, <strong>AI Agents</strong>, and <strong>Agentic Workflows</strong></li></ul><h3>What Is Sitecore Stream?</h3><p><strong>Sitecore Stream</strong> is an <strong>AI layer built into Sitecore’s SaaS ecosystem</strong>. It is an AI engine that sits between your content and your experiences. It helps you-</p><ul><li>Generate content faster, grounded in your brand identity</li><li>Automate campaign and workflow tasks</li><li>Improve collaboration between marketing and technical teams</li><li>Maintain brand voice and tone at every touchpoint</li></ul><h3><strong>Where It Fits in the Sitecore Ecosystem</strong></h3><p>Sitecore Stream integrates seamlessly with other SaaS offerings through the <strong>Sitecore Cloud Portal</strong>, acting as a shared intelligence layer:</p><ul><li>For <strong>XM Cloud</strong>, it powers AI-driven content creation and page assembly.</li><li>For <strong>Content Hub</strong>, it supports asset generation, metadata tagging, and translations.</li><li>For <strong>Personalize</strong>, it provides AI-based content variants and suggestions.</li></ul><h3><strong>Why Sitecore Stream Matters</strong></h3><p>Today’s marketing teams face immense pressure — multiple channels, multilingual content, shorter go-to-market times, and fewer resources.<br>Meanwhile, developers are responsible for maintaining flexible, API-driven front ends that can adapt to rapid content changes.</p><p>Here’s where Stream makes a difference:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*X3uvDSP1LTI4tFCvtfsdsQ.png" /></figure><h3><strong>Brand Kits — Teaching AI Who You Are</strong></h3><p>At the heart of Sitecore Stream lies the <strong>Brand Kit</strong> — the foundational element that tells the AI <em>what your brand stands for</em>.</p><p><strong>What’s Inside a Brand Kit</strong></p><p>A Brand Kit is a curated collection of your brand’s assets, documentation, and rules, such as:</p><ul><li><strong>Tone of Voice &amp; Guidelines:</strong> Upload your brand style guides or editorial policies.</li><li><strong>Visual Identity:</strong> Include sample visuals, logo guidelines, or imagery references.</li><li><strong>Terminology &amp; Vocabulary:</strong> Define approved terms and phrases unique to your brand.</li><li><strong>Reference Content:</strong> Provide previous campaign materials, blogs, or product copy as examples.</li></ul><p>Once uploaded, Stream uses these assets to <strong>ground its AI models using Retrieval-Augmented Generation (RAG)</strong> — meaning every AI output is based on <em>your brand data</em>, not just a public language model.</p><p><strong>Example in Action</strong></p><p>You ask Stream:</p><p>“Write a product announcement email for our eco-friendly home appliance range.”</p><p>Instead of generating a random email, Stream pulls context from your Brand Kit — your tone (“friendly yet expert”), your product vocabulary (“eco-efficient”), and your past campaign style.<br> The result? A perfectly on-brand draft that feels like it was written by your own marketing team.</p><h3><strong>AI Agents — Your Brand-Aware Copilots</strong></h3><p>While Brand Kits teach AI what your brand <em>is</em>, <strong>AI Agents</strong> (or <strong>Copilots</strong>) use that knowledge to <em>do work for you</em>.</p><p>These are purpose-built assistants embedded into Sitecore Stream’s interface that help different roles — marketers, content authors, and strategists — complete their day-to-day tasks faster and more intelligently.</p><p><strong>Key AI Agents in Sitecore Stream</strong></p><ol><li><strong>Content Copilot</strong></li></ol><ul><li>Drafts blog posts, landing pages, and social copy.</li><li>Suggests variations and translations based on your Brand Kit.</li><li>Refines existing content for tone, SEO, or clarity.</li></ul><p><strong>2. Brief Copilot</strong></p><ul><li>Generates marketing or campaign briefs automatically from a few inputs.</li><li>Recommends structure, messaging, and deliverables for campaigns.</li></ul><p><strong>3. Experience Copilot</strong></p><ul><li>Helps build or personalize web pages within XM Cloud.</li><li>Suggests layouts, assets, or copy blocks that align with the campaign goal.</li></ul><h3><strong>Agentic Workflows — Automating the Entire Content Journey</strong></h3><p>Beyond generating content, Sitecore Stream’s <strong>Agentic Workflows</strong> bring automation to your marketing operations.</p><p>These AI-driven workflows connect tasks, people, and deliverables across the full lifecycle — from ideation to publishing.</p><p><strong>What They Do</strong></p><ul><li>Automatically assign tasks (drafting, reviewing, translating).</li><li>Generate campaign deliverables from a single brief.</li><li>Suggest next actions (“Translate this blog into French,” “Generate a short-form version for LinkedIn”).</li><li>Maintain audit trails for governance and compliance.</li></ul><h3>Here’s how the three pillars interact:</h3><p><strong>Brand Kits → inform → AI Agents → trigger → Agentic Workflows</strong></p><ol><li>Brand Kits teach AI how to represent your brand.</li><li>AI Agents (Copilots) use that intelligence to create on-brand content.</li><li>Agentic Workflows automate the review and delivery of that content across your DXP.</li></ol><h3><strong>Getting Started</strong></h3><ol><li>Log in to <strong>Sitecore Cloud Portal</strong> and enable <strong>Sitecore Stream</strong>.</li><li>Create your <strong>first Brand Kit</strong> — upload your brand docs, style guides, and reference materials.</li><li>Experiment with a <strong>Copilot</strong> (start with Content Copilot) to see how it writes using your brand tone.</li><li>Try an <strong>Agentic Workflow</strong> — such as a blog creation-to-approval pipeline.</li><li>Review results, refine your Brand Kit, and iterate.</li></ol><h3><strong>Conclusion: A Smarter, Brand-Aware DXP</strong></h3><p><strong>Sitecore Stream</strong> represents the future of intelligent content operations — an AI that doesn’t just generate text, but truly understands your brand, your tone, and your audience.</p><p>By combining <strong>Brand Kits</strong>, <strong>AI Agents</strong>, and <strong>Agentic Workflows</strong>, Stream empowers teams to move faster, stay consistent, and focus on creativity rather than manual work.</p><p>In the next post, we’ll go hands-on with <strong>Brand Kits</strong> — exploring how to create one, upload brand materials, and experience how Stream turns your brand identity into actionable AI intelligence.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=0de7f5e39386" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Sitecore Search: Blog 4: Understanding the Ingestion API in Sitecore Search]]></title>
            <link>https://medium.com/@jainhanish31/sitecore-search-blog-4-understanding-the-ingestion-api-in-sitecore-search-5b801e981ef8?source=rss-b7e77b75ff64------2</link>
            <guid isPermaLink="false">https://medium.com/p/5b801e981ef8</guid>
            <category><![CDATA[cms]]></category>
            <category><![CDATA[headless]]></category>
            <category><![CDATA[search]]></category>
            <category><![CDATA[sitecore-search]]></category>
            <category><![CDATA[saas-marketing]]></category>
            <dc:creator><![CDATA[Jainhanish]]></dc:creator>
            <pubDate>Tue, 14 Oct 2025 10:50:15 GMT</pubDate>
            <atom:updated>2025-10-14T10:50:15.414Z</atom:updated>
            <content:encoded><![CDATA[<p>In the previous blogs, we explored what Sitecore Search is, how to get started with it, and the different components under Global Resources.</p><p>Now, let’s dive into one of the most developer-centric features of Sitecore Search — the <strong>Ingestion API</strong>.</p><h3>What is the Ingestion API?</h3><p>The <strong>Ingestion API</strong> is a REST-based interface provided by Sitecore Search that allows developers to <strong>push, update, or delete content</strong> in a search index programmatically.</p><p>It’s especially useful when:</p><ul><li>Your content doesn’t come from a crawler-supported source (like a CMS or website).</li><li>You want <strong>real-time indexing</strong> (e.g., product updates, article publishing, or user-generated content).</li><li>You need to integrate <strong>external systems</strong> or databases with Sitecore Search.</li></ul><p>Instead of relying solely on scheduled crawlers, the Ingestion API gives you <strong>direct control</strong> over what goes into your index — and when.</p><h3>When to Use the Ingestion API</h3><p>Use the Ingestion API when:</p><ul><li>Your data is <strong>dynamic</strong>.</li><li>Your content is <strong>stored outside Sitecore or any CMS</strong> (like in ERP, PIM, or external APIs).</li><li>You want <strong>incremental updates</strong> without re-crawling everything.</li></ul><h3>Authentication &amp; API Access</h3><p>To use the Ingestion API, you’ll need:</p><ul><li>Your <strong>Base URL</strong></li><li><strong>Domain ID</strong></li><li><strong>Source ID</strong></li><li><strong>Entity ID</strong></li><li><strong>API Key</strong></li></ul><p>You can find these under <strong>Developer Resources → API Access</strong> in your Sitecore Search CEC.</p><p>Each API key has one or more <strong>scopes</strong>.<br> For ingestion, make sure your key includes the <strong>Ingestion</strong> scope.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*eJiMrrOj43zDPbiogp-E-Q.png" /></figure><p>Authentication is done via header:</p><pre>Authorization: ApiKey {your-api-key}</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9nALT2RcEQdXxNTqlaCHKw.png" /></figure><h3>API Endpoint Format</h3><p>The Ingestion API exposes multiple endpoints depending on what you want to do.<br> Below are the commonly used ones.</p><h4>1. Create or Update a Document</h4><pre>POST /ingestion/v1/domains/{domainId}/sources/{sourceId}/entities/{entityId}/documents?locale={locale}</pre><h4>2. Delete a Document</h4><pre>DELETE /ingestion/v1/domains/{domainId}/sources/{sourceId}/entities/{entityId}/documents/{documentId}?locale={locale}</pre><h4>3. Check Status of an Update</h4><pre>GET /ingestion/v1/domains/{domainId}/sources/{sourceId}/entities/{entityId}/status/{incrementalUpdateId}</pre><p>Each {domainId}, {sourceId}, {entityId}, and {locale} corresponds to values defined in your Sitecore Search configuration.</p><h3>Payload Structure</h3><p>The Ingestion API expects a JSON object that wraps your content inside a <strong>document</strong> object, which includes:</p><ul><li>A unique <strong>id</strong></li><li>A set of <strong>fields</strong> that match your entity’s schema</li></ul><h4>Example Payload</h4><pre>{<br>  &quot;document&quot;: {<br>    &quot;fields&quot;: {<br>      &quot;title&quot;: &quot;Flashing News - Sitecore acquires RFK&quot;,<br>      &quot;description&quot;: &quot;Hype around the new search technology&quot;<br>    },<br>    &quot;id&quot;: &quot;document1&quot;<br>  }<br>}</pre><ul><li>document → root object</li><li>fields → holds all attribute/value pairs defined in your entity schema</li><li>id → unique identifier for that document</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LTZYWOmzI5NL6xVqOKlH9A.png" /></figure><h3>Multi-locale Ingestion</h3><p>If your site supports multiple locales, you can send the same document with a locale parameter — for example:</p><pre>POST .../documents?locale=en_us<br>POST .../documents?locale=ar_sa</pre><p>Each localized document will be treated as a variation of the same entity record.</p><h3>Monitoring &amp; Troubleshooting</h3><p>You can monitor ingestion status directly in the <strong>CEC</strong>:</p><ul><li>Go to <strong>Content Collection → your Entity → Content sync section</strong></li><li>View notification about item being created.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FQYlWuqcbNCoivXOJeyx9A.png" /></figure><p><strong>Common issues:</strong></p><ul><li><strong>400 Bad Request</strong> → Check field names match your entity schema, unique id is provided.</li><li><strong>401 Unauthorized</strong> → Invalid or missing API key.</li><li><strong>409 Conflict</strong> → Duplicate document ID or locale mismatch.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*I5MhN9-MLl2alNJ9Y4JxaQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*KrPy_4ucD9P7WWmsCTP-7w.png" /></figure><p><strong>Note: </strong>you must <strong>enable incremental updates</strong> for a source in the CEC.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/798/1*8IDCmrPhk21lH_COyVkK9A.png" /></figure><p>Rferences:</p><ul><li><a href="https://doc.sitecore.com/search/en/developers/search-developer-guide/using-the-ingestion-api-to-add-content-to-an-index.html#using-the-ingestion-api">Using the Ingestion API to add content to an index</a></li><li><a href="https://doc.sitecore.com/search/en/developers/ingestion-api/index.html#operation/CreateDocumentRequest">Ingestion API</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5b801e981ef8" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Sitecore Search-Part 3: Exploring Global Resources — Global Widgets, Recipes, Synonyms, and…]]></title>
            <link>https://medium.com/@jainhanish31/sitecore-search-part-3-exploring-global-resources-global-widgets-recipes-synonyms-and-430df448705d?source=rss-b7e77b75ff64------2</link>
            <guid isPermaLink="false">https://medium.com/p/430df448705d</guid>
            <category><![CDATA[sitecore-search]]></category>
            <category><![CDATA[saas]]></category>
            <category><![CDATA[headless-cms]]></category>
            <category><![CDATA[search]]></category>
            <category><![CDATA[sitecore-9]]></category>
            <dc:creator><![CDATA[Jainhanish]]></dc:creator>
            <pubDate>Fri, 10 Oct 2025 13:03:32 GMT</pubDate>
            <atom:updated>2025-10-10T13:03:32.558Z</atom:updated>
            <content:encoded><![CDATA[<h3><strong>Sitecore Search-Part 3: </strong>Exploring Global Resources — Global Widgets, Recipes, Synonyms, and Notifications</h3><h3>Global Resources in Sitecore Search — Overview</h3><p>In the Sitecore Search Customer Engagement Console (CEC) , <strong>Global Resources</strong> is a central area for managing configurations that apply across your search implementation — not just individual widgets or pages.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Rwvy_yUadB12RfIJUnWlcg.png" /></figure><p>The Global Resources section typically includes:</p><ol><li><strong>Global Widget</strong></li><li><strong>Recipes</strong></li><li><strong>Synonyms</strong></li><li><strong>Notifications</strong></li></ol><p>Each one plays a distinct role. Below is a deep dive into each.</p><h3>1. Global Widget</h3><h4><strong>What Is It?</strong></h4><ul><li>The <strong>Global Widget</strong> acts as a <em>base template</em> or <em>foundation</em> for all other widgets in your search experience.</li><li>All “regular” widgets you create (for result listings, recommendations, etc.) will by default inherit settings from the Global Widget unless overridden.</li><li>The Global Widget can have <strong>variations</strong>, one of which must be marked as the <em>default</em> variation.</li></ul><h4>What You Can Configure in Global Widget / Its Variations</h4><p>In each variation, you can define:</p><ul><li><strong>Site / visitor context rules</strong> — when this variation should be active (e.g. based on user type, locale, device)</li><li><strong>Merchandising settings</strong> — global settings like boosting, burying, pinning rules</li><li>Defaults setting for textual relevance, sort order, personalization, facets, textual relecance, search ranking etc.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/970/1*AlUp8Ad7pL_Dj5UIhQnC-Q.png" /></figure><h3>2. Recipes</h3><h4>What Are Recipes?</h4><ul><li>A <strong>Recipe</strong> is a preconfigured logic or algorithm that determines <em>which items to recommend</em> in a recommendation widget.</li><li>Recipes define how recommendation logic operates — e.g. “recently viewed items,” “most clicked items in last week,” “most recently added to catalog” etc.</li><li>When creating a recommendation widget, you select one recipe (or a compatible recipe) for the entity (product / content type) you want to recommend.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5r7KAv9yLGuiBnVv9NY3Zg.png" /></figure><h3>3. Synonyms</h3><h4>What They Are</h4><ul><li><strong>Synonyms</strong> let you map keywords or phrases to related terms so that when a user searches for “X,” your system also considers “Y.”</li><li>They help improve recall (find more relevant items) and user experience by dealing with linguistic variability (plurals, alternative words, etc.).</li></ul><h4>Types of Synonyms / Word Relationships</h4><ul><li><strong>One-way synonyms</strong> — Map a keyword to additional terms, but not the other way around. E.g. searching “car” returns results for “automobile” too, but searching “automobile” may not return “car” unless you define it.</li><li><strong>Two-way synonyms</strong> — Bidirectional equivalence; both terms are treated interchangeably. E.g. “trousers” ↔ “pants.”</li><li><strong>Replacement / substitution</strong> — Instead of expanding the search, you replace a term. For example, treat “chevy” as “chevrolet,” so “chevy” searches are mapped to “chevrolet.”</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HDMB2R6gPjN9Adswqh6hvQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QVF0xe81wIbCNFTZqJjEwQ.png" /></figure><h3>4. Notifications</h3><h4>What They Are</h4><ul><li><strong>Notifications</strong> is a section within Global Resources that surfaces alerts, messages or operational updates about your search implementation.</li><li>You can view <strong>notification history</strong>, filter by severity, and see details about occurrences.</li><li>Users can configure subscription preferences for which notifications they want to receive (e.g. via email).</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=430df448705d" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Sitecore Search: Getting started]]></title>
            <link>https://medium.com/@jainhanish31/sitecore-search-getting-started-c672548c6a5c?source=rss-b7e77b75ff64------2</link>
            <guid isPermaLink="false">https://medium.com/p/c672548c6a5c</guid>
            <category><![CDATA[search]]></category>
            <category><![CDATA[saas]]></category>
            <category><![CDATA[sitecore-search]]></category>
            <category><![CDATA[sitecore]]></category>
            <category><![CDATA[headless-cms]]></category>
            <dc:creator><![CDATA[Jainhanish]]></dc:creator>
            <pubDate>Mon, 22 Sep 2025 15:58:22 GMT</pubDate>
            <atom:updated>2025-09-22T15:58:22.644Z</atom:updated>
            <content:encoded><![CDATA[<p>Welcome to part-2 of sitecore search series. In <a href="https://medium.com/@jainhanish31/introduction-to-sitecore-search-saas-what-why-where-it-fits-4ca984690fc7">first blog </a>we had introduction to sitecore search, why sitecore search, its benefits etc. In this blog we will get started with sitecore search CEC portal and explore its all features.</p><p>To get started with CEC portal, you should have login credential for CEC poral- <a href="https://cec.sitecorecloud.io/">https://cec.sitecorecloud.io/</a>.</p><h3>Navigating the CEC Portal</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/708/1*VtPGP8NC-M2ANOgTi9vzUw.png" /></figure><ul><li><strong>Site performance</strong> — The CEC homepage: a quick overview of site performance analytics and health.</li><li><strong>Pages</strong> — Manage your search pages and their associated widgets that render search experiences.</li><li><strong>Widgets</strong> — Create and configure reusable UI components (widgets) that display search results and features.</li><li><strong>Analytics</strong> — Access reports and metrics that show how your search implementation is performing.</li><li><strong>Global resources</strong> — Configure system-level resources and global widget settings used across pages.</li><li><strong>Content collection</strong> — Browse and validate all indexed content and visitor data in your domain.</li><li><strong>Sources</strong> — Define and configure content sources (feeds, crawlers, uploads) and their extractors for indexing.</li><li><strong>Developer resources</strong> — Tools and API references for developers to test and work with Sitecore Search services.</li><li><strong>Administration</strong> — Manage domains, users, roles, and other administrative settings for your tenant.</li></ul><h3>Types of Sources &amp; Connectors in Sitecore Search</h3><p>In Sitecore Search, a <strong>Source</strong> tells the platform <em>where and how</em> to pull in content. Each source type is designed for different content scenarios:</p><ul><li><strong>Web crawler</strong> — simple pull crawler that follows links (or a sitemap) and indexes HTML/PDF/Office content; good for single-locale public websites.</li><li><strong>Advanced web crawler</strong> — enhanced crawler with domain restrictions, parallel workers, JS rendering, auth, multiple-entity extraction and locale handling (use when site is complex or gated).</li><li><strong>Feed crawler</strong> — ingest structured files (CSV/JSON/delimited) or SFTP uploads and transform rows/objects into index documents (use for batch product/catalog feeds).</li><li><strong>API crawler</strong> — pulls JSON from API endpoints and uses JSONPath/JS extractors to create documents (use for headless CMS APIs, XM/Edge, or product APIs).</li><li><strong>API push (API Push)</strong> — push-only source that creates an empty index you populate via the Ingestion API (ideal for real-time/event-driven content or frequent small updates).</li></ul><h3>Document extractor</h3><p>A <strong>Connector</strong> in CEC is the selected ingestion mechanism (the “type” you pick when creating a Source) — e.g., Web Crawler, Feed Crawler, API Crawler, or API Push. It determines <em>how</em> Search reaches your content (pull vs push) and which extraction/transform features are available.</p><ul><li><strong>XPath</strong> — HTML/XML extraction (Web crawler / Advanced web crawler).</li><li><strong>CSS selector</strong> — HTML/CSS extraction (Advanced web crawler).</li><li><strong>JavaScript function / Cheerio-style JS</strong> — complex/custom extraction or transformations (Advanced web crawler, API crawler, some feed scenarios).</li><li><strong>JSONPath</strong> — parse API/JSON payloads (API crawler; also used when extracting from JSON feeds).</li></ul><p>Now that we understand sources, connectors, and document extractors, let’s walk through creating a Web Crawler source step by step.</p><h3>Create and configure your first source</h3><p>or this blog post, I’ll show you how to create a <strong>Web Crawler</strong> source, as that is the most common source you’ll use.</p><p>Go to sources and click on add source.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9ewo8kYm8rvae3S2DsWqOQ.png" /></figure><p>Provide source name, connector and short description and save it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*eevqm4W6Y2q7V10-D9LKfw.png" /></figure><p>The source will be created and you can see some basic information of the source, like the Source ID, the status and the last run status &amp; time (empty since the source was never run). The source is still in Draft status and the Publish button is disabled, so there is required configuration that needs to be completed before we can publish it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*O47CbGBMzOJ4f0R_siSusw.png" /></figure><p>The source comes with pre-configured attribute extraction rules. The default ones are name, url, image_url, description and type attributes to the Open Graph tags in the HTML markup. In addition to this or if you want you can remove/add/update extraction of value form your specific html tag and update this extraction by clicking on edit button. As I have modified it with some additional attributes and removed default ones.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8vTQm5ScH7ezy35NUU1nUQ.png" /></figure><p>Next in the Web Crawler Settings section click on edit and enter the URL to your website in the URL field. Also there are additional settings like max depth of url allowed, max no of urls etc confifurations can be done.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GezyW9oD0BBHD7z1BKXDqw.png" /></figure><p>Next, we can also set the scan frequency. This will ensure that our website is automatically re-scanned periodically, to ensure that any content updates on our website are correctly crawled and reflected in our search index.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6deLDUc5zZ38vNZq88i_ng.png" /></figure><p>last step, click on the ‘Publish’ button in the top-right corner to publish our new web crawler source.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/642/1*nBVAVyoQA3-kjJXn1l4grw.png" /></figure><p>Once published your crawled content will be available in the content collection. Navigate to content collection, expand your entity under which you have created your source then filter your source from top navigation(by default you will see all the sources’s content). You will be able to see all your crawled pages content mapped to attribute fields.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7GMDDmaG4HEtmxOnXo3mTQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_bx8v5vFSYFB0Wt4znK_aw.png" /></figure><p>This confirms that our source is ready to be queried via the Search and Recommendation API, so we can start integrating it with our website.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c672548c6a5c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Introduction to Sitecore Search (SaaS): What, Why & Where It Fits]]></title>
            <link>https://medium.com/@jainhanish31/introduction-to-sitecore-search-saas-what-why-where-it-fits-4ca984690fc7?source=rss-b7e77b75ff64------2</link>
            <guid isPermaLink="false">https://medium.com/p/4ca984690fc7</guid>
            <category><![CDATA[headless-cms]]></category>
            <category><![CDATA[sitecore-search]]></category>
            <category><![CDATA[sitecore]]></category>
            <category><![CDATA[saas]]></category>
            <category><![CDATA[search]]></category>
            <dc:creator><![CDATA[Jainhanish]]></dc:creator>
            <pubDate>Thu, 24 Jul 2025 12:50:02 GMT</pubDate>
            <atom:updated>2025-07-24T12:50:02.832Z</atom:updated>
            <content:encoded><![CDATA[<h3><strong>What is Sitecore Search?</strong></h3><p>Sitecore Search is a <strong>cloud-native, SaaS-based content discovery platform</strong> designed to deliver fast, intelligent, and personalized search experiences across websites, portals, and applications.</p><p>Originally built on Reflektion technology (acquired by Sitecore in 2021), it enables teams to:</p><ul><li>Crawl content from websites, APIs, and structured feeds</li><li>Organize and enrich content with metadata</li><li>Deliver search results using built-in AI-powered relevance models</li><li>Analyze user behavior to fine-tune relevance</li></ul><p>Unlike Solr or Lucene tied to Sitecore XP/XM, <strong>Sitecore Search is a headless, standalone solution</strong> that works well in composable architectures.</p><h3>Key Features of Sitecore Search</h3><ul><li><strong>Multi-source Crawling</strong> — HTML, JSON, XML, feeds, and APIs</li><li><strong>AI-Powered Ranking &amp; Personalization</strong> — Learns from user behavior</li><li><strong>Predictive Search</strong> — Autocomplete, instant suggestions, popular queries</li><li><strong>Search Analytics</strong> — Track KPIs, CTRs, search terms, zero-result queries</li><li><strong>Composable Architecture</strong> — Easy integration with headless apps</li><li><strong>Search Widgets &amp; SDKs</strong> — Drop-in UI or custom-built via APIs</li></ul><h3>Where Does Sitecore Search Fit?</h3><p>Sitecore Search is part of Sitecore’s <strong>Composable DXP</strong> strategy. It integrates well with:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yQ-HiwP63uZOoqv2qOfdxA.png" /></figure><p>It’s ideal for public-facing content and not bound to Sitecore CMS, along with its federated search capabilities allowing multiple sources for search results.</p><h3>How It Works</h3><ol><li><strong>Crawler</strong> indexes web content or API responses</li><li><strong>CEC (Customer Engagement Console)</strong> maps fields, sets up entities and filters</li><li><strong>Search Service</strong> uses AI + behavior data to deliver ranked results</li><li><strong>SDKs / REST API</strong> help render results on your frontend</li><li><strong>Analytics Engine</strong> feeds back data for continuous optimization</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/820/1*0jXvrE0FIMmtBrYxJsDHYQ.png" /></figure><h3>Why Choose Sitecore Search?</h3><p><strong>Fast setup</strong> — No infrastructure needed, configure via CEC<br><strong>Real-time tuning </strong>— Adjust results based on CTR, bounce rate, etc.<br><strong>Improves discoverability</strong> — Especially across large or multisite ecosystems<br><strong>Fully composable </strong>— Integrates with any frontend/backend system<br><strong>Delivers results</strong> — More relevant search leads to better user engagement</p><h3>Limitations and Considerations:</h3><ul><li>Requires public-facing URLs (no internal/intranet content unless API-accessible)</li><li>Schema design (attributes, filters, facets) should be planned up front</li></ul><h3>Summary</h3><p>Sitecore Search is a powerful, composable SaaS solution for delivering <strong>fast, intelligent, personalized search</strong> on public-facing digital channels. It’s ideal for enterprises seeking SaaS scalability without re-engineering complex infrastructure.</p><h3>Coming Up in This Blog Series</h3><ol><li><strong>Getting Started</strong> — Setup, CEC walkthrough, creating attributes, configuring features</li><li><strong>Crawlers &amp; Sources</strong> — Detailed configuration of crawler/API sources and content Collection</li><li><strong>Widgets</strong>— configurable components used to display search results</li><li><strong>Analytics &amp; Personalization</strong> — Event tracking and AI-driven tuning</li><li><strong>Relevance Optimization</strong> — Managing boosts, synonyms, and synonyms</li></ol><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4ca984690fc7" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>