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 |
Node.js / Express | Use |
ASP.NET / Razor | Use conditional logic in |
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:
Open your root folder (e.g.,
/public_html/
)Locate or create
robots.txt
Add:
Allow: /*?imgoing-event= Allow: /*?imgoing-place=
Save and upload the file
? Step 7: Submit URLs for Indexing
Submitting key pages manually helps speed up discovery and indexing.
Google Search Console:
Visit Google Search Console
Use the URL Inspection Tool
Submit
/imgoing-page-xml
for indexing
Bing Webmaster Tools:
Visit Bing Webmaster Tools
Use the Submit URL feature
✅ 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
Feedback sent
We appreciate your effort and will try to fix the article