Madhu Anbalagan's Blog

2025 – Contributions

The year 2025 has been great, featuring presentations at various Sitecore User Groups around the world and meaningful interactions with numerous members of the Sitecore community.

Blog Posts : 

Presentations : 

Feedbacks: 

  • August 16, 2025  –  Alpha Reviewers: Content Hub Developer Exam

 Co-organized SUG-Pittsburgh Meetups: 

Co-organized SUG-Philadelphia Meetups: 

 Conferences I attended: 

  • MVP Lunches   
  • MVP Webinars 
  • All SUG Pittsburgh and Philadelphia meetups  
  • Many SUG Boston/ Columbus/ Atlantic meetups 

Plans for 2026: 

Learn and contribute: 

  • Sitecore AI
  • Sitecore Saas Offerings 
  • Containerization 

Co-organize : 

  • Monthly SUG-Pittsburgh meetup 
  • Quarterly SUG-Philadelphia meetup 

Present: 

  • SUGCON EU/Symposium 
  • SUG Meetups 

Happy Sitecoring!

0

Sitecore Personalize Demo using TamperMonkey

 

Sitecore Personalize Demo using TamperMonkey.png

I started exploring Sitecore Personalize, which allows to craft tailored web experiences based on customer behavior and preferences.

In this blog, I’ll walk through how to integrate Sitecore Personalization for the Sitecore XP/XM/XMCloud website without installing EngageSDK – using TamperMonkey, a browser extension for running custom JavaScript.

Create a Point Of Sale (PoS)

In Sitecore CDP or Personalize create a PoS for the website.

Sitecore-CDP-Personalize-Popup-TamperMonkey.png

 

Create a Web Experience

In Sitecore Personalize, let’s navigate to the Experiences section and click Create New Experience.

Select from experience types such as:

  • Web Experience (e.g., personalized banners or pop-ups)
  • Interactive Experience (e.g., Chatbots, real-time API integrations)
  • Triggered Experience (e.g., email, push notifications)

Sitecore-CDP-Personalize-Popup-TamperMonkey-21.png

Sitecore-CDP-Personalize-Popup-TamperMonkey-3-1.png

OOTB Templates

Sitecore Personalize offers 14 out-of-the-box (OOTB) templates for creating web experiences. These templates are designed to help you quickly set up and customize your web experiments and experiences without needing to write code. Here are some of the templates available:

  1. Alert Bar (Boxever Library)

  2. Corner Popup (Boxever Library)

  3. Email Capture Bar (Boxever Library)

  4. Email Capture Corner (Boxever Library)

  5. Notification Widget (Boxever Library)

  6. Popup takeover (Boxever Library)

  7. Sidebar (Boxever Library)

  8. Alert Bar (Sitecore Library)

  9. Corner Popup (Sitecore Library)

  10. Email Capture Bar (Sitecore Library)

  11. Email Capture Corner (Sitecore Library)

  12. Notification Widget (Sitecore Library)

  13. Popup takeover (Sitecore Library)

  14. Sidebar (Sitecore Library)

Select any of the out-of-the-box templates or custom web templates, if they have been created.

Sitecore-CDP-Personalize-Popup-TamperMonkey-4.png

Let’s start to customize it. You have the option to use Advanced Edit for HTML, CSS, and JavaScript to enhance web templates.

Sitecore-CDP-Personalize-Popup-TamperMonkey-4.png

The final Popup looks like this – changed the following 

  • Background color
  • Title
  • Description
  • Button Text

Sitecore-CDP-Personalize-Popup-TamperMonkey-6.png

 

Page Targeting

I chose all the pages for simplicity.

Sitecore-CDP-Personalize-Popup-TamperMonkey-7.png

 

If you like specific pages – add the condition for the page URL.

Sitecore-CDP-Personalize-Popup-TamperMonkey-17.png

Goals

I chose not to track performance for testing purposes. Feel free to add any goal according to website needs.

Sitecore-CDP-Personalize-Popup-TamperMonkey-8.png

Filter, Decisioning, and Notifications

They are optional, going to leave them as it is. The Decision Model is so powerful that, will be exploring it in upcoming blogs.

Preview

Let’s Preview what it looks like – 

https://madhuanbalagan.com/?bxQATool=true&bxFlowRef=f536d1f2-646d-406e-8bb4-7e434912ce6b&bxVariantRef=77069aa5-dd50-44d2-ac5b-243ff8c246f6

The preview isn’t working because the EngageSDK needs to be installed on the website. If you have EngageSDK installed on the website, feel free to skip the TamperMonkey part.

Now this is where the TamperMonkey plugin comes to the rescue to pre-load the Engage SDK on any website using Sitecore Personalize script.

Download TamperMonkey Chrome extension –http://chromewebstore.google.com/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en

Note: Make sure it is enabled and the Developer mode is turned on.

Sitecore-CDP-Personalize-Popup-TamperMonkey-11-1.png

 

Let’s make a new script. By default, TamperMonkey uses the website domain where you clicked ‘New Script’ as a match. 

Sitecore-CDP-Personalize-Popup-TamperMonkey-12.png

Replace the following placeholders – 

The clientkey is found in CDP->Settings->API Access

Sitecore-CDP-Personalize-Popup-TamperMonkey-2-1.png

 

Let’s add the script to TamperMonkey and save it. The @name value determines how the script is named.

Now it should detect the script when you visit the website.

Sitecore-CDP-Personalize-Popup-TamperMonkey-13.png

 

Live

Let’s publish the Experience to make it live – If you have a notification set, it will email when it’s live, paused, etc.

Sitecore-CDP-Personalize-Popup-TamperMonkey-2-1.png

The email notification is pretty helpful especially for Marketers to track their Experiences.

Sitecore-CDP-Personalize-Popup-TamperMonkey-20.png

 

 

Preview

Let’s try the Preview – make sure to add a new script for the preview URL in TamperMonkey. 

Let’s load the Preview with the page URL.

Sitecore-CDP-Personalize-Popup-TamperMonkey-16.png

The Popup showed up and the QA Tool shows at the left side of the page.

QA Tool

The QA Tool shows the validation of everything. Feel free to change the variant to test different scenarios. It’s super helpful for troubleshooting any issues.

Sitecore-CDP-Personalize-Popup-TamperMonkey-14.png

Testing

Let’s reload the page, Yay! Popup showed up!!

Sitecore-CDP-Personalize-Popup-TamperMonkey-15-2.png

Hope this helps.

Happy Sitecoring!

0

Optimizely Opal: Unlocking AI-Powered Marketing with Opal Chat & Agents

I’ve just released a new YouTube video highlighting Optimizely Opal and how it’s transforming modern marketing with AI-powered chat and intelligent agents.

In this video, you’ll get a quick overview of:

  • Opal Chat and how it simplifies everyday marketing tasks
  • AI agents that help generate content, insights, and reports
  • How Opal enables faster, smarter marketing workflows

Check out the video here –

Happy Optimizing!

 

0

Sitecore Forms : Custom Validation to Exclude the Default Value for Dropdown

Blog-Sitecore-Favorite-Tools (2).png   

I came across a scenario where I needed to exclude the default value for dropdowns in Sitecore Forms. By default, dropdown fields in Sitecore Forms often preselect the first option, which might be a placeholder like “Select an option.”

If users submit the form without changing this value, it can lead to unreliable data. Custom validation helps enforce user interaction, ensuring the selection is meaningful.

 

Steps to Implement Custom Validation in Sitecore Forms

 

Step 1: Create a Custom Validator

  • Navigate to your Sitecore solution and open the project where Sitecore Forms is configured.
  • Create a new class that extends FormConditionalValidator and override the validation logic.

 

 

Step 2: Register the Validator in Sitecore

  1. Open Sitecore Content Editor and navigate to:
    /sitecore/system/Settings/Forms/Validation
  2. Create a new validation item:
    • Name: Department Validator (Change it according to Project needs)
    • Type: Reference the class you created, e.g., Custom.Validators.DropdownDefaultValueValidator, CustomAssembly
    • Message: "{0} is required"
    • Parameters: "{"fieldToCompare":{Guid-of-the-dropdown}", "valueToCompare": "Select"}
  3. Save and publish the changes.

Sitecore_Forms_Validation-1.png

 

Step 3: Apply the Validator to Your Dropdown Field

  1. Open your form in Sitecore Forms Designer.
  2. Select the Dropdown field where validation is needed.
  3. Under the Validation section, add the newly created validator.
  4. Save and publish the form.

Sitecore_Forms_Validation-2.png

Let’s test – It’s working! Yay!!

Hope this helps.

Happy Sitecoring!

 

0

Optimizely: Our Journey in the Opal Innovation Challenge

When we signed up for Optimizely’s Opal Innovation Challenge, we knew it wasn’t just about building a solution—it was about solving a real marketing pain point. As marketing professionals and technologists, we’ve seen countless campaigns fail despite being well-written. Why? Because they didn’t resonate with the audience. This challenge gave us the perfect opportunity to tackle that problem head-on.

https://www.optimizely.com/operation-opal/#challenge

The Spark Behind the Idea

Marketing teams often struggle with persona alignment. A campaign might sound great internally, but fall flat with the target audience. For example:

  • Campaign 1: “Save more with Smart meters” – casual tone, generic message.
  • Campaign 2: “Embracing Green Living” – empathetic, informative, and resonates better.

This gap between content creation and audience expectation inspired our solution.

Our Team & Approach

We formed Infosys Transformers, a two-member team:

Our goal was simple yet ambitious: Make every piece of content count.

Challenges We Faced

  • Time Constraints: Building a multi-agent workflow in a hackathon timeframe was intense.
  • Balancing Creativity & Tech: Ensuring the solution was both innovative and practical.
  • Persona Complexity: Defining measurable persona attributes for scoring was tricky.

Timelines

Key Lessons Learned

  1. Persona Alignment is Non-Negotiable: Content without persona context is just noise.
  2. AI Can Bridge the Gap: Multi-agent systems can automate what manual reviews can’t.
  3. Collaboration is Everything: Combining tech and marketing expertise was our biggest strength.
  4. Start Simple, Scale Later: A modular approach helped us deliver a working prototype fast.

The Hackathon Experience

The Opal Innovation Challenge wasn’t just a competition—it was a learning marathon. We explored Opal’s agent ecosystem, experimented with orchestration, and realized how AI can transform marketing workflows.

Check out our video presented at the Hackathon – 

 

Closing Thoughts

Innovation happens when you combine empathy with technology. For us, this challenge was proof that marketing and AI are not separate worlds—they’re partners in creating meaningful experiences.

Top teams can win prizes like $5,000 in MDF, gift cards, and thought leadership opportunities.

Hope this helps.

Happy Optimizing!

0

Optimizely : Show Personalized Content Blocks

I have been exploring Personalization on Optimizely CMS 12 – Simple to set up, and can be utilized throughout the website.

I came across this use case where we want to show the Priority Call button on a page only during business hours.

The page currently has no call-to-action button.

Let’s get started to personalize the page to add a Priority Call button.

Step 1: Create Audience

  • Create an audience with the rules you would like to define.

Optimizely-CMS-Personalization-Content-Block.png

  • I created an Audience called Priority Call specifically for customers who can call the priority phone number during business hours.

Optimizely-CMS-Personalization-Content-Block-1.png

  • Add Criteria based on the project needs – multiple criteria can target specific customers.

  • Added Time of Day criteria – Monday to Friday from 8 am to 5 pm.

Optimizely-CMS-Personalization-Content-Block-3.png

 

Step 2: Create a Personalized Block

  • Now that we have created the target Audience. Let’s make a personalized block for a page.
  • I chose the ‘Find a Reseller’ page and, in Blocks, I am going to create a New Block for this page – you can also create one for the All Sites.

  •  Selected Button as the New Block and gave it a name – Priority Call Button.

  • Filled out the Button Text and Link.

  • Please make sure to Publish the Block – If not, it will not be visible on the page. 
  • I have made this mistake and wondered why the block isn’t appearing 🙂

 

3. Add the Personalized Block to a Page

  • Let’s drag and drop the Priority Call Button block into the Large Content Area or any Content Area.

  • Let’s personalize the button.

  • Everyone is by default – let’s change it to our new audience Priority Call.

  • Let’s publish the page and view it during business hours (our Audience criteria)
  • Yay! We could see the Priority Call Button!

If you prefer watching a video, my quick recording –

Hope this helps.

Happy Optimizing!

0

Sitecore – Favorite Free Add-On Modules

Over the years, I’ve worked with numerous Sitecore modules that simplify our tasks and boost efficiency.

Sharing my favorite free modules – 

  1. Sitecore Powershell Extensions
  2. SiteCron
  3. Azure Tools
  4. Sidekick
  5. Content Export Tool
  6. Sitecore Log Analyzer

Sitecore PowerShell Extensions

Sitecore PowerShell Extensions (SPE) (Huge thanks to Michael West, Adam Najmanowicz, and contributors) is a robust module that adds the power of PowerShell scripting to the Sitecore platform.

It empowers Sitecore developers and administrators to automate repetitive tasks and extend Sitecore’s functionality with custom scripts.

https://github.com/SitecorePowerShell/Console

Check out my PowerShell script blogs – 

https://madhuanbalagan.com/efficiently-bulk-edit-sitecore-content-using-sitecore-powershell-extensions-spe

https://madhuanbalagan.com/bulk-update-fields-using-spe

https://madhuanbalagan.com/migrate-sitecore-media-library-assets-to-dam

SiteCron

The SiteCron Module (a huge thanks to Akshay Sura) is a valuable tool for managing and scheduling tasks within Sitecore.

It provides a flexible way to automate and run various Sitecore jobs, such as publishing, indexing, or custom tasks, on a scheduled basis. 

Check out the installation and recent blogs – 

https://akshaysura.com/2017/09/07/sitecore-scheduling-with-sitecron-2-1-6/

https://akshaysura.com/2018/04/19/sitecore-precision-scheduling-with-sitecron-3-0-4-released-in-powerful-ways/

Azure Tools

Downloading Sitecore Logs from Azure Web Apps wasn’t easy. To troubleshoot any issues, I used to spend decent time trying to find recent logs. 

AzureTools (Thank you Sitecore Community – You are simply awesome!) comes to the rescue. It’s a simple .aspx page that can be dropped into CM environments and download logs in just seconds. 

Check out my detailed blog –  https://madhuanbalagan.com/instantly-download-sitecore-logs-from-azure-web-apps

Sidekick

To pull content locally, we relied on packaging content from upper environments or restoring the database – which was quite time-consuming.

The Sitecore Sidekick module (a big thanks to Jeff Darchuk) was a lifesaver for quickly pulling content into local or lower environments.

Sitecore-sidekick-install-download-content-migration-4.png

Sitecore-sidekick-install-download-content-migration-6.png

Take a look at my in-depth blog on installation and setup –  https://madhuanbalagan.com/sitecore-sidekick-installation-and-setup

Content Export Tool

The Sitecore Content Export Tool (many thanks to Erica Stockwell-Alpert) is a powerful utility designed to streamline the process of exporting content from your Sitecore instance.

It enables developers, content authors, and administrators to easily extract content in bulk, simplifying tasks like data migration, content backups, or sharing content across environments.

Explore the usage guide and documentation –https://ericastockwellalpert.wordpress.com/2017/08/24/content-export-tool-for-sitecore/

 

Sitecore Log Analyzer

The Sitecore Log Analyzer (SCLA) (Sitecore Community Rocks!) is a powerful tool designed to help Sitecore developers analyze and interpret log files with ease.

It simplifies the process of identifying issues, tracking errors, and monitoring system performance by providing a user-friendly interface to view and filter Sitecore logs.

This ClickOnce installer sets up the application and enables automatic updates. After installation, the app can be launched from the Start menu or pinned to the taskbar for easy access.

https://support.sitecore.com/kb?id=kb_article_view&sysparm_article=KB0870095

Hope this helps.

Happy Sitecoring!

0

Optimizely PaaS Administrator Certification : Free for Everyone

Optimizely has recently launched a free PaaS Administrator Certification.

https://academy.optimizely.com/student/activity/2958208-paas-cms-administrator-certification?sid=a5b1a937-c694-4e99-b753-821bac3d9173&sid_i=0

 

Exam Details:

  • Questions: 50
  • Duration: 60 minutes
  • Passing Score: 80%

In case of failure, you can retake the exam after 24 hours.

  • After passing the exam, Credly will send an email with badge details.
  • Good Luck!

Hope this helps.

Happy Optimizing!

0

Automating Cleanup Tasks with Optimizely Scheduled Jobs

Scheduled jobs in Optimizely CMS are a powerful way to automate any background tasks like content cleanup, indexing, or reporting.

I created a simple scheduled job to delete the expired content.

Let’s get started.

Step 1: Create the Job Class

  • Created a job called ExpiredPagesCleanupJob.cs that inherits the ScheduledJobBase class.
  • Implement logger as needed, currently commented out in code.
  • Rebuild and deploy the solution.

Step 2: Run the job

  • Wondering, don’t I need to register the job in Optimizely CMS? No need, it automatically registers the job using the [ScheduledPlugin] attribute.

Optimizely-CMS-Scheduled-Job-1.png

  • Let’s navigate to Settings -> Scheduled Jobs
  • Now you will see the job listed and ready to be started.

Optimizely-CMS-Scheduled-Job-2.png

  • Let’s start the job manually for now.

Optimizely-CMS-Scheduled-Job-3.png

  • History shows whether the job has succeeded or not.

Optimizely-CMS-Scheduled-Job-4.png

  • Before running the job, the Expired Page report showed that two content pages had expired.

Optimizely-CMS-Scheduled-Job-5.png

  • Now let’s check the reporting results again. yay! It’s successfully deleted!

  • You can schedule the job every 5 seconds, minutes, hourly, and so on.

If you prefer watching a video, my quick recording –

Hope this helps.

Happy Optimizing!

0

Multiple Languages in Optimizely CMS

I was exploring multi-languages in Optimizely CMS 12 – able to figure it out quickly in a few steps.

Let’s get started.

1. Enable Languages in the Admin

Optimizely stores language settings in the Admin view.

  • Log in to Optimizely CMS as an administrator.

  • Navigate to: Admin -> Manage Website Languages

  • You can select an existing language or add a new language

    • There are 14 languages available by default.

Optimizely-CMS-Multi-Language-1.png

    • Add a new language if it’s not listed in the default list.

      • I’m adding Hindi (hi-IN) as I’m from India 🙂

Optimizely-CMS-Multi-Language-2.png

  • Make sure to Enable the Language to be listed on the sites.

 

2. Language Settings

  • Now the Hindi is listed on Sites, but it’s enabled at the site level.

Optimizely-CMS-Multi-Language-4.png

  • To enable at the site level, go to Language Settings under Tools (Make sure you are on the site’s Start page).

Optimizely-CMS-Multi-Language-5.png

  • Check the newly added language under Available Languages.

Optimizely-CMS-Multi-Language-6.png

  • We need to set the Fallback Languages as a secondary option when the language is not available.

Optimizely-CMS-Multi-Language-7.png

 

3. Update Page Types and Block Types

To support multilingual fields, Optimizely requires culture-specific properties.

  • For any property that should be translated, add the attribute:

[CultureSpecific]

Optimizely-CMS-Multi-Language-8.png

  • Rebuild and deploy the solution.

 

4. Create Translations

  • Select the page you would like to translate, and the Translate button will appear. I chose the Contact Us page for demo purposes.

Optimizely-CMS-Multi-Language-9.png

  • Create the language version.

Optimizely-CMS-Multi-Language-10.png

  • Translate properties, blocks, and media as needed and publish the changes.

Optimizely-CMS-Multi-Language-11.png

  • Let’s preview the changes. Isn’t looking good?

Optimizely-CMS-Multi-Language-11.png

If you prefer watching a video, my quick recording –

Hope it helps.

Happy Optimizing!

0