Guide to Indexing Event and Place Pages of ITI Modules in SquareSpace

Created by Evan Kenepp, Modified on Tue, 10 Jun at 12:16 PM by Evan Kenepp

For Squarespace 7.0 (with Developer Mode) and Squarespace 7.1

This guide is created to help developer teams and semi-technical implementers configure their Squarespace site so search engines like Google and Bing can properly discover and index event and place URLs that come dynamically from ITI modules.


? Why This Is Needed

When embedding ITI widgets on your Squarespace website, all content (URLs of events or places) is loaded dynamically via JavaScript from an external API. Because of this:

  • Search engines might not see or index these links unless they are exposed in a dedicated, crawlable page.

  • Squarespace automatically adds canonical tags to all pages, which may unintentionally suppress indexing for widget-powered pages if content appears similar across them.

We need to:

  1. Create a dedicated, crawlable page that lists all the dynamic links.

  2. Control canonical tag behavior to prevent search engines from thinking different URLs are “duplicate.”


? What You Will Be Doing (High-Level Summary)

Task

Why It’s Important

Create a new page that lists event/place URLs from the API

So Google/Bing can crawl and index them

Add a JavaScript pre-rendering script

Helps search engines “see” the dynamic content

Modify canonical tag behavior (7.0 only)

Avoids search engines skipping similar pages

Submit URLs in Google Search Console/Bing Webmaster Tools

Ensures they’re reviewed for indexing


? Step 1: Determine Your Squarespace Version

Your ability to control canonical tags depends on whether you're on version 7.0 or 7.1.

✅ How to Check:

  1. Open your website in a browser.

  2. Right-click > “View Page Source.”

  3. Look for a line containing ?v=7.0 or ?v=7.1.

  • If 7.0 → You can use Developer Mode to customize templates.

  • If 7.1 → Canonical tags cannot be changed, but there is a manual workaround.


?️ Step 2: Create a Dedicated Indexing Page (Required for ALL versions)

This page will list all event and place URLs from the API so they are visible to search engine crawlers.

✅ Why this is necessary:

Content inside widgets is dynamic (JavaScript), so Google may not index it unless the URLs are explicitly shown on a crawlable page.

? Steps:

  1. Go to Pages > click + to create a new blank page.

  2. Name it something like Widget Index Page (slug: imgoing-page-xml)

  3. Add a Code Block to the page.

  4. Paste this code inside the block (replace [HubName] with the one provided by your SaaS team):

<div>   <h2>Events</h2>   <div id="eventsContainer"></div>   <h2>Places</h2>   <div id="placesContainer"></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('Error loading API data:', err)); </script>

? This page must remain published and accessible to search engines. Do not password-protect or hide it from the sitemap.


? Step 3: Add the Pre-Rendering Script

To make sure Google/Bing can “see” JavaScript-loaded content, add the official pre-rendering helper script.

Steps:

  1. Go to Settings > Advanced > Code Injection

  2. Paste this in the Header field:

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

Replace [HubName] with the correct value provided by your SaaS team.


⚙️ Step 4: Configure Canonical Tags (Only for 7.0 with Developer Mode)

Why:

If you embed the same widget on multiple pages (e.g., homepage, /events, /calendar), Google may treat these as duplicate pages and index only one. We fix this by removing the canonical tag only from pages that are meant to stand alone.


? Instructions for Squarespace 7.0

Requires Developer Mode enabled and Git access to site templates.

  1. Enable Developer Mode:
    Go to Settings > Advanced > Developer Mode and enable it.

  2. Export site code via Git.

  3. Open the file that includes your <head> (typically site.header).

  4. Replace this line:

<link rel="canonical" href="{{ canonicalUrl }}">

with:

{% assign excluded_slugs = "daily-events-calendar,restaurants,things-to-do,parks,museums" | split: "," %} {% unless excluded_slugs contains page.slug %}   <link rel="canonical" href="{{ canonicalUrl }}"> {% endunless %}

? Important:

  • Add slugs for pages where the full widget is embedded.

  • If your setup does not have a single parent page for places, include the slug of every individual category page (/parks, /restaurants, etc.) where a widget is placed.

  • You do not need to exclude pages like the homepage unless the main parent widget is embedded on another page.


? Testing (7.0)

  • Open each excluded page in a browser.

  • Right-click > “View Page Source”.

  • Confirm that no <link rel="canonical"> appears for excluded slugs.

  • Confirm that other pages still show canonical tags.


? Squarespace 7.1 Limitations (No Canonical Control)

Squarespace 7.1 does not support Developer Mode, so canonical tags cannot be removed or edited.

What happens:

  • Squarespace automatically assigns canonical tags to all pages.

  • If widgets are embedded across multiple similar-looking pages, some may be skipped by Google due to perceived duplication.

✅ Manual Workaround:

  • Ensure each widget-hosting page has distinct content around the widget (titles, descriptions).

  • Use Google Search Console’s URL Inspection Tool to manually request indexing of key pages.

  • Submit URLs via Bing Webmaster Tools.


?️ Step 5: Verify Page Is in Your Sitemap

  1. Go to https://yourdomain.com/sitemap.xml

  2. Make sure imgoing-page-xml or your custom widget page is listed.

  3. If not, update and save the page to trigger re-indexing.


? Step 6: Manually Request Indexing (Optional but Recommended)

Google Search Console

  1. Go to Google Search Console

  2. Use the URL Inspection Tool

  3. Paste the full page URL (e.g., https://yourdomain.com/imgoing-page-xml)

  4. Click Request Indexing

Bing Webmaster Tools

  1. Go to Bing Webmaster Tools

  2. Use the Submit URL feature

? Manual submission can help pages get crawled faster but does not guarantee indexing.


✅ Summary Table

Step

Description

Required For

Create index page for events/places

Makes dynamic URLs crawlable

7.0 + 7.1

Add pre-render script

Helps bots see JS-rendered content

7.0 + 7.1

Modify canonical tags

Prevents duplicate suppression

7.0 only

Manual indexing via GSC/BWT

Recommended for key pages

7.0 + 7.1

Unique slugs per widget container

Needed when no parent page exists

7.0 only


 

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