Guide to Indexing Event and Place Pages Modules in Custom or Proprietary Websites

Created by Evan Kenepp, Modified on Fri, 13 Jun at 11:41 AM by Evan Kenepp



This guide helps developers and semi-technical implementers configure custom-built or proprietary CMS websites so that event and place URLs  in ITI Event and Places modules can be discovered and indexed by search engines like Google and Bing.


? Why This Is Needed

ITI’s widgets load content dynamically via JavaScript, which creates two key SEO challenges:

  • Search engines cannot crawl event/place URLs unless they are exposed in raw HTML.

  • Canonical tags may suppress indexing if similar content appears on multiple pages.


✅ What You’ll Do

Task

Why It’s Important

Create an index page

Makes dynamic widget URLs visible to search engines

Add a pre-rendering script

Helps bots render JavaScript-loaded content

Configure canonical exclusions

Prevents search engines from skipping important pages

Allow widget URLs in robots.txt

Ensures search engines can crawl query string URLs

Submit key pages for indexing

Encourages faster inclusion in search engine indexes


?️ Step 1: Create an Indexing Page

Create a publicly accessible page (e.g., /imgoing-page-xml) that fetches and displays event and place URLs.

Example Code:

<div>   <h2>Events</h2>   <div id="eventsContainer">Loading...</div>   <h2>Places</h2>   <div id="placesContainer">Loading...</div> </div> <script type="text/javascript"> fetch('https://imgoing-prod-api.xyz/api/visitors/[HubName]/ig-links-for-seo')   .then(response => response.json())   .then(data => {     const eventsContainer = document.getElementById('eventsContainer');     const placesContainer = document.getElementById('placesContainer');     if (data.eventUrls?.length) {       data.eventUrls.forEach(url => {         const a = document.createElement('a');         a.href = url;         a.textContent = url;         eventsContainer.appendChild(a);         eventsContainer.appendChild(document.createElement('br'));       });     } else {       eventsContainer.innerHTML = '<p>No event URLs found.</p>';     }     if (data.placeUrls?.length) {       data.placeUrls.forEach(url => {         const a = document.createElement('a');         a.href = url;         a.textContent = url;         placesContainer.appendChild(a);         placesContainer.appendChild(document.createElement('br'));       });     } else {       placesContainer.innerHTML = '<p>No place URLs found.</p>';     }   })   .catch(err => {     console.error('API load error:', err);     eventsContainer.innerHTML = '<p>Error loading events.</p>';     placesContainer.innerHTML = '<p>Error loading places.</p>';   }); </script>

? Step 2: Add the Pre-Rendering Script

Add this script inside the <head> of your HTML layout or indexing page:

<script src="https://next.imgoingcalendar.com/imgoing-prerender.js?hubName=[HubName]"></script>

This makes JavaScript-rendered content visible to search engines.


⚙️ Step 3: Configure Canonical Tags

Canonical tags can cause search engines to ignore pages if multiple URLs appear too similar.

To avoid this, exclude the canonical tag from pages where widgets are embedded.

A list of slugs where canonical tags should be excluded.

events, home, family-events, aquarium

✅ Example in PHP:

<?php $excludedSlugs = ['events', 'home', 'family-events', 'aquarium']; $currentPath = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/'); if (!in_array($currentPath, $excludedSlugs)) {   echo '<link rel="canonical" href="https://yourdomain.com' . $_SERVER['REQUEST_URI'] . '">'; ?> 

For Other Platforms:

Platform

What to Do

Laravel

Use @if in Blade to skip canonical tag for provided slugs

Node.js / Express

Use req.path to conditionally output canonical tag

ASP.NET / Razor

Use conditional logic in _Layout.cshtml

Static HTML

Remove canonical tags manually on relevant pages

Proprietary CMS

Use any available head or template editor to exclude tags

If canonical control isn’t possible, skip this step and rely on manual indexing (Step 7).


? Step 4: Test the Indexing Page

Go to /imgoing-page-xml and open View Page Source in your browser.

✔ Event/place links appear as plain HTML
✔ Pre-render script is present in the <head>
✔ Canonical tags appear only where appropriate


?️ Step 5: Confirm Sitemap Inclusion

Visit:

https://yourdomain.com/sitemap.xml

✅ Ensure /imgoing-page-xml is listed. If not:

  • Add it manually (static sites)

  • Or regenerate sitemap using your CMS or SEO plugin


? Step 6: Allow Crawling of Widget URLs

Search engines may skip widget content if query strings are blocked by robots.txt.

Steps:

  1. Open your root folder (e.g., /public_html/)

  2. Locate or create robots.txt

  3. Add:

Allow: /*?imgoing-event= Allow: /*?imgoing-place=
  1. Save and upload the file


? Step 7: Submit URLs for Indexing

Submitting key pages manually helps speed up discovery and indexing.

Google Search Console:

Bing Webmaster Tools:


✅ Final Summary

Step

Description

Create indexing page

Lists dynamic URLs for search engines

Add pre-render script

Makes JavaScript content indexable

Exclude canonical tags

Prevents suppression of widget pages

Update robots.txt

Ensures crawl access to widget URLs

Submit for indexing

Speeds up visibility in search engines


 


Was this article helpful?

That’s Great!

Thank you for your feedback

Sorry! We couldn't be helpful

Thank you for your feedback

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article