Sunday, December 2, 2018

Configure Sitecore 9.1 Content Tagging feature with Open Calais

What is Tagging?

Tagging refers to the metadata of the content which is assigned to a content by the content creator and the readers/users of the content to group the content in the same category.

Content tagging is the very significant feature introduced in the Sitecore 9.1 Release, I was eagerly waiting for the Sitecore 9.1 release, as I heard about this feature in the Sitecore Symposium 2018, Orlando.

Content tagging is the wider term to implement and to create the proper taxonomy of the content, we might need one full-fledged intelligent system, who can analyze the content and automatically tag the content, based on the relevancy of the content keywords.

I know, still in the 21st century, many people are doing this job manually, company’s hires dedicated content authors, who read the content manually line by line and based on the taxonomy bucket, they tag the content accordingly and it becomes worst when you are creating lots of articles/publication per day.
Now, with the help of Sitecore Content tagging feature, we can easily automate this manual task with the help of integration with any intelligent tagging (metadata) provider/system including Sitecore Cortex and Open Calais.

In this ERA, the whole requirement of the current digital marketer is to automate the Metadata tagging with the click of one button. As we are using the Sitecore to create the content page, we wanted something on the Sitecore ribbon button to tag the content with the relevant tags  

Now, without taking further time, let me quickly introduce the best tagging provider in the world called Open Calais by Thomson Reuters
Thomson Reuters Open Calais™ offers the easiest and most accurate way to tag the people, places, companies, facts, and events in your content to increase its value, accessibility, and interoperability
We use Natural Language Processing (NLP) and machine learning algorithms trained by hundreds of Thomson Reuters’ Editorial teams for several years to offer the industry’s best combination of company extraction and relevance. For the user, the process is pretty simple. You feed unstructured text into the extraction engine (news articles, blog postings, etc.) to examine your text and locate:

·        Entities: (Companies, people, places, products, etc.)
·        Relationships: (John Doe works for Acme Corp.)
·        Facts: (John Doe is a 42-year old male CFO)
·        Events: (Jane Doe was appointed a board member of Acme Corp.)
·        Topics: (Story is about M&As in the Pharma industry)

Now, we understood what is content tagging, why Auto-tagging is important and what Open Calais is?

Let’s start the practical, as we are going to configure the auto-tagging feature in the Sitecore.

Please note, this feature is only available in the Sitecore 9.1 Release, if you haven’t installed the Sitecore 9.1 yet, then please install it.

Step1: Create the account on Open Calais and get the Access code as below:

Step 2: Configure the API in Sitecore 9.1

When you navigate the default Sitecore 9.1 content tree and go to home tag ribbon, you will find the open called “Tag” which is newly introduced in the Sitecore 9.1, by default it’s disabled until you configured any content tagging provider.

Now go to the Sitecore configuration

1. Navigate to \App_Config\Sitecore\ContentTagging\Sitecore.ContentTagging.OpenCalais.config

2. Provide the value of the Open Calais token in the below setting which we generated in the Step1:

<setting name="Sitecore.ContentTagging.OpenCalais.CalaisAccessToken" value="" />

All set for the configuration, now let's consume the APIs in the Sitecore

Step 3: Consume the Open Calais API In the Sitecore Content Tree

Go to the content tree and update any Sitecore content item with some data, for demo purpose, I just update the below paragraph in the RTE field

“ Sitecore’s digital experience platform combines content, commerce, and personalization to help customers easily create the most relevant, individualized experiences possible. We capture interactions at every touchpoint to provide a personalized experience across every channel, continuously over the lifetime of the customer. Businesses look to Sitecore to power the most relevant experiences possible. “

As you can see, the tag option is enabled now, after configured the API key in the configuration file.

Now > click on Tag Item >

The moment, I click on the Tag item button, Sitecore starts the Content tagging service to call the API and get the data:

Now, check your tags of the item, navigate to the tagging section, and here is the results:

All relevant tags have been added automatically, without any manual intervention such as Technology_Internet, Business_Finance, Information science, Content Management System etc.

PDF Search for Content Tagging

The Content tagging feature does not only search the RTE, single, multi-line fields, it also supports the documents such as PDF for content tagging, let’s take an example, you have some Sitecore items and some relevant documents which need to attach with the Items for example – Product information PDF, and you want to search the content from the PDF also and tag some meta tag based on PDF data, then it  is possible with this integration as Open Calais supports the PDF documents.

Now, I am going to attach one SIF Configuration pdf In the sitecore internal link field as below:

The tags are blank now:

Now> adding the tag from the ribbon, and here is the result:

isn't this cool 

Some other Observations:

1. This functionality required the internet connection, as its calling API, so please make sure in the production, internet should work, and this API link should be whitelisted.

2. All the open Calais tags are stored in the Sitecore itself  as a sitecore bucketable item in the  below location:


Demo in Thomson Reuters Open Calais Website

Want to quickly check the Open Calais results, without importing into the Sitecore, no worries, here is the easy way, go to the 

Try to paste some content or upload any document, and you can able to find the relevant tags immediately on the screen as below:

I hope you enjoyed this article, and it will help you to configure the Sitecore 9.1 content tagging feature.

Happy Sitecoring

Friday, November 9, 2018

Track your Internal Search Keywords Using Sitecore Analytics

In the Digital ERA, everything is now measurable, Everybody wants to know their customer behavior on the website and keyword search is the most important element in this aspect to know what exactly customer is searching or looking on the website, through tracking these keywords information, marketers can further optimize the pages/visuals/lead/forms/Sitemap/personalization’s/ rules etc.  To provide better customer experience and get more conversions.

Again, “Internal Search” feature is the hidden gems feature in the Sitecore analytics, Must say Sitecore cares the current digital marketers and provides such a “must have” feature in the Sitecore analytics out of the box.

I didn’t know this feature, and wanted the track all the keyword search on my website, to check “what exactly people are searching on my website”
But the question is how? How to track all the keyword of the website search that customers are searching? Do I need to store in the database? And do some basic reporting, or track all the pages with query string? and provide the unique report? Was totally confused and planning to build my custom module for the same.

But after scratching my head a bit and some googling , I came to know the feature called “Internal Search” in the Sitecore out of the box. Cool, then why should I reinventing the wheel, if  Sitecore has already invested and provided as a feature.

But the problem was how to configure this search tracking functionality in the analytics, by default it’s not implemented and showing blank as below.

Then again after doing some research I figured out the solution, and now I can track my keyword search and here is the results:


Guess, who is the most searchable person by the Sitecore community members on my website?

 Yes, Akshay Sura and Kamruz Jaman are the top keyword search on my website, see how important this feature is? Now I can track my keywords search like anything – Real time..


Solution – How to configure the Internal Search keywords tracking in Sitecore Analytics:

For the demo purpose, I just created a simple search.aspx page which consists of textbox and button,

I am searching the keywords using the above textbox and click on the search me button, then I am calling sitecore analytics API to register the keyword.

 Register the search page event in the Sitecore Aanalytics tracker

        protected void Button1_Click(object sender, EventArgs e)
            var searchEvent = Tracker.MarketingDefinitions.PageEvents[AnalyticsIds.SearchEvent.Guid];
            string searchKeyword = string.Empty;
            searchKeyword = TextBox1.Text.Trim();
            Sitecore.Analytics.Tracker.Current.CurrentPage.Register(new PageEventData(searchEvent.Alias, searchEvent.Id)
                Data = searchKeyword, Text = searchKeyword


here is the form page, don’t forget to add visitor identification tag on the page:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Search.aspx.cs" Inherits="Search.Search" %>

<!DOCTYPE html>

<html xmlns="">
<head runat="server">
    <form id="form1" runat="server">
            Enter Search Keyword :
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

            <asp:Button ID="Button1" runat="server" Text="Search Me" OnClick="Button1_Click" />

    <sc:VisitorIdentification runat='server'/>

Here is the code behind:

using Sitecore.Analytics;
using Sitecore.Analytics.Data;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Search
    public partial class Search : System.Web.UI.Page
        protected void Page_Load(object sender, EventArgs e)


        protected void Button1_Click(object sender, EventArgs e)
            var searchEvent = Tracker.MarketingDefinitions.PageEvents[AnalyticsIds.SearchEvent.Guid];
            string searchKeyword = string.Empty;
            searchKeyword = TextBox1.Text.Trim();
            Sitecore.Analytics.Tracker.Current.CurrentPage.Register(new PageEventData(searchEvent.Alias, searchEvent.Id)
                Data = searchKeyword, Text = searchKeyword


Really cool and quick to start the POC and implement the above code based on your solution and code:

Now, deploy your page into your Sitecore instance and hot the search page URL something like in your case, replace your domain name:

Search some keywords and hit search button and behind Sitecore will track all the keywords which you are searching.

Change the session timeout setting from the web.config to quickly test the functionality otherwise you have to wait 30 minutes to refresh the results,

<sessionState mode="InProc" cookieless="false" timeout="1" sessionIDManagerType="Sitecore.SessionManagement.ConditionalSessionIdManager">      <providers>      

Now all done, let’s check the Analytics:

Go to the analytics dashboard: 

Go to internal search under Behavior tag on the left hand side panel

Now you can able to see all your keyword tracking based on your search page here, also you can generate multiple reports based on multiple Metric – Page view, counts, Visits etc. further you can filter the date based report using time range etc..

I found this feature very important and relevant, and everything is built-in with minimum code change.

I hope you like this article  will help you to start thinking and exploring the Keyword search with Sitecore.

Happy Sitecoring..  

Sunday, October 28, 2018

My Sitecore Symposium 2018 Take Away:

It’s been an amazing journey with Sitecore(almost 11 years) so far, and recently I got the opportunity to attend Sitecore Symposium this year In Orlando, FL, USA.

Some basic facts of this symposium:

  • Over 1,000 brands are at Symposium
  • 3,000 attendees from 53 countries
  • 5 breakout tracks with 100 sessions
  • Partner pavilion with 50 sponsors
  • 15,000 certified Sitecore developers
  • Sitecore delivers 200 million digital experiences per year


My Journey started from Dubai to Orlando, its 16 hours non-stop flight, Yes 16 Hours..  but everything is fair in Sitecore Love n WAR , so I don’t had any regret to flown that long..

The very first keynote started with customer experience –

“Mark CEO of Sitecore started with “How Experience is important in the Era of digital world, everbody expecting the experience not the just product” Experience is everywhere.. and that’s how  Sitecore can come into the picture and provide the real customer experience”

“Sitecore delivers 200 million digital experience in a year” 

3 Main  Pillar of New Sitecore Release – 9.1

Empower Developers through JSS


Sitecore and Salesforce:

Big Announcement = Sitecore+ StyleLabs

Daymond John – Keynote Speaker:

 360 – Degree of Content and Customer:

Sitecore Focus -  Next 12 Months

Thanks for Jake Johannsen for entertaining us all the time on the stage:

Tuesday, October 2, 2018

Sitecore 9 EXM Guide: Part 4 - Optimize your Multi-Lingual Email with Sitecore EXM Preferred language Functionality

This series is divided into four parts:

Sitecore 9 EXM Guide: Part 1 – How to Setup Sitecore 9 EXM in 5 Minutes
Sitecore 9 EXM Guide: Part 2 – Explore Sitecore 9 EXM Reporting
Sitecore 9 EXM Guide: Part 3 – Personalize Your Emails with Sitecore EXM Tokens

Think about the international audience and their Native language:

Research proved that user spends more time on email communication and web content if its written in their native language and chances of conversion might be double for those native language speakers if you send the communication in their native language.

And 2x is a game changer figure for big email campaign, so planning of the multi-linguage campaign is very important if your audience is multi-national/lingual.

Step By Step – Plan your email campaign in multi-lingual with Sitecore EXM

Build your customer segment based on language preference, and tag every customer with preferred language column and fill their native/preferred language.

I am going to create three below languages for my email campaign as below:

  • Arabic
  • English
  • Spanish

I am assuming we have done this task offline and prepare the offline CSV file with below attributes of the email contacts:

  •        First name
  •        Last name
  •        Email address
  •        Preferred language

The file will look like this:

I created 12 contacts with different preferred language which are English, Arabic and Spanish, here in the file we need to upload the language code.

Create the Languages in the Sitecore:

Go to System > languages > create Arabic and Spanish language >

Once you done with the language, the next step is to map the preferred language field with the imported contacts.

But the question is how? As Sitecore provided the functionality of sending the email based on preferred language

How to set User preferred language for each recipient?

So, we already have the data ready the only thing is to map the data with existing facet of the contact.

When we upload the CSV file, Sitecore in background creates the contact for each recipient and by default map only three facets as below:

  • First name
  • Last name
  • Email

Now, we have to map the fourth facet called prefrredlangauge/
So, follow the below steps to map the preferred language:

Go to the desktop:

Change the database from master to core

Navigate to > /sitecore/client/Applications/List Manager/Dialogs/ImportWizardDialog/PageSettings/TabControl Parameters/Map/ImportModel

Here is the list of all default item derived from /ImportModelField template
Duplicate any item and change the data as below:

Change the duplicate item(Personal – preferred language” fields value as below:

Now all done from mapping side, lets quickly create one email campaign with three language version and based on the individual preference of the email list, Sitecore will pick the correct language version and send the email accordingly

Creating Multi-Lingual campaign with EXM

Go to EXM > create the Regular email campaign >

Select > simple html message > First_Campaign_Multi_lingual

Go to receipts tab > click on dropdown  > Add list from File > select the CSV file which we created in this blog>

Upload the list >

Go to Map Tab>

Great, I can see the new mapping field called “Preferred Language” which we just configured in the above steps:

Select all the File field with Sitecore field as above image,

12 contact has been imported in the Sitecore from CSV file:

Quickly I created the sample English message as below:

Now time to create the Arabic and Spanish version of the email:

Change the language > Arabic from language selector >

Enter the Arabic message template, here I entered the sample arabic content the below:

Same like Arabic, I created the Spanish version of the email, by selecting Spanish language from the language selector as below:

Now we have created all three version of the email, time to send the email message with multi-language functionality

  • Go to delivery tab >
  • Select the Multi- language > select the checkbox > Use preferred language >
  • Important Note: make sure you select the English language from language selector at the time of clicking the send message button, otherwise the selected language email version will send for all the recipients regardless of preferred language. 
  • Click on send email option

Now check the email, I am checking three emails for English, Arabic and Spanish

As per my file record, below would be the preferred language data based on email:

Here is the result:

Jack Daniel – Arabic Speaker:

Sachin Tendulkar – English

Virat Kohli – Spanish:

Hope this Article will help You

Happy Sitecoring..

Sitecore 9 Analytics Dashboard/Reporting Database updating very Slow?

Your Sitecore Analytics Dashboard is not updating properly or updating very Slow? Sitecore Analytics Dashboard is based on the...