Overview
ITI Digital AI-Ready Events & Places delivers structured, real-time Events and Places content to WordPress websites with built-in support for AI discoverability, SEO, and search visibility.
The plugin helps organizations publish destination content that is easier for search engines, AI platforms, and travelers to find, understand, and engage with through schema-ready, dynamically updated content delivery.
Designed for Destination Marketing Organizations, Chambers of Commerce, and Economic Development Organizations, the plugin supports modern content strategies focused on discoverability, governance, and real-time visitor engagement.
Content is delivered as server-rendered HTML during the initial page request, while separated frontend assets and bootstrap data are loaded for hydration and interactivity. This allows search engines and AI platforms including Google, ChatGPT, Perplexity, and other AI-assisted discovery systems to read and understand Event and Place content without requiring JavaScript execution for the initial content.
What it renders
Event listings, single event pages, place listings, and single place pages.
SEO support
Clean URLs, canonical URLs, sitemap support, and SEO plugin compatibility.
Simple setup
Enable modules, select layout pages, choose detail base pages, and save permalinks.
Admin location
Go to WordPress Admin → Settings → ITI Digital.
Key Features
- Server-side rendered content responses with separated assets/bootstrap data optimized for SEO, structured content indexing, and AI-assisted search visibility.
- API key authenticated access to ITI Digital Events and Places services.
- SEO-friendly Event and Place URL structure with automatic WordPress rewrite integration.
- Dynamic XML sitemap generation for Event and Place content.
- Canonical URL generation, normalization, and caching.
- Optional WordPress search integration for API-powered Event and Place results.
- Theme-overridable search templates for frontend search result customization.
- Automatic trailing slash handling based on WordPress permalink settings.
- Staging mode for safe canonical URL and sitemap testing.
- Support for Rank Math, Yoast SEO, and All in One SEO.
- Webhook-based cache invalidation for Event and Place content updates.
- Cache refresh tools for listing pages, canonical URLs, and sitemap content.
- Safer scheduled cache refresh that avoids re-saving full page content on supported refresh runs.
- WP Engine cache refresh support for configured ITI shortcode pages.
- Automatic Open Graph metadata support for Event detail pages.
- Legacy Embed Finder tool to help identify older ITI Digital embed implementations.
- Configurable listing limits for Events and Places.
limitshortcode attribute support for Event and Place listing shortcodes.- Admin shortcode builder tools to help create full Event and Place listing shortcodes with attributes.
- Improved listing widget initialization when third-party widget scripts load later due to optimization or delayed JavaScript settings.
- Event and Place submission form shortcodes for frontend submissions.
- Analytics-friendly
dataLayertracking for single Event and Place detail pages. - Updated Detail Base Page guidance for the dedicated
/e/and/p/detail route separators. - AI discoverability enhancements designed for search engines and AI-assisted discovery platforms.
Requirements
| Requirement | Details |
|---|---|
| WordPress | Version 6.0 or higher. |
| PHP | Version 7.4 or higher. |
| ITI Digital hub | A Hubname is the unique identifier ITI Digital provides for your destination's content feed and API configuration. |
| API Key | A valid ITI Digital API key is required for authenticated API requests. |
| Permalinks | Pretty permalinks should be enabled. Save permalinks after setup or route-related changes. |
| External requests | The WordPress server must be able to make outbound requests to ITI Digital services. |
Installation
- Upload the plugin folder to
/wp-content/plugins/itidi-ai-events-places/, or upload the plugin ZIP from Plugins → Add New → Upload Plugin. - Activate ITI Digital AI-Ready Events & Places from the WordPress Plugins screen.
- Open Settings → ITI Digital.
- Enter the ITI Digital Hubname and API Key, then save settings.
- Enable the Events and/or Places modules available for the connected hub.
- Select an SSR layout page for detail rendering. This page must include the related content shortcode:
[itidi_ai_event_content]for Events or[itidi_ai_place_content]for Places. - Select detail base pages. These are the pages where the listing shortcodes are placed.
- Optionally create frontend submission pages using
[itidi_ai_event_submission_form]and/or[itidi_ai_place_submission_form]. - Optionally enable Events and/or Places in WordPress search.
- Save settings.
- Go to Settings → Permalinks and click Save Changes.
Setup Guide
1. Connect Hubname and API Key
In the General tab, enter the Hubname and API Key provided by ITI Digital. The plugin uses these values to authenticate API requests, check hub configuration, and display available modules.
2. Enable Events and/or Places
Enable the modules that should be rendered by the plugin. Module availability depends on the connected ITI Digital hub.
3. Select layout pages
Select a layout page for single Event details and/or single Place details. The selected page acts as the SSR layout container and must include the related content shortcode.
| Module | Layout page shortcode |
|---|---|
| Events | [itidi_ai_event_content] |
| Places | [itidi_ai_place_content] |
Layout pages are used internally as SSR rendering containers and are not intended to function as standalone public landing pages.
4. Select detail base pages
Select the pages where listing shortcodes are placed. These pages are used as base URLs for detail routes.
| Module | Listing shortcode |
|---|---|
| Events | [itidi_ai_events_list] |
| Places | [itidi_ai_places_list] |
5. Configure listing limits and build listing shortcodes
Version 1.0.1 adds configurable listing limits for Events and Places. These settings allow site administrators to control the default number of items loaded in Event and Place listing outputs.
The Events and Places settings tabs also include shortcode builder tools. These tools help administrators build and copy listing shortcodes with supported attributes without manually typing the full shortcode.
- Use the listing limit setting to control the default number of items shown.
- Use the shortcode builder to add or remove supported shortcode attributes.
- Use the
limitshortcode attribute when a specific page needs a different listing limit.
6. Configure optional submission form pages
Version 1.0.2 adds frontend submission form shortcodes for Events and Places. Create a normal WordPress page and add the related shortcode if visitors should be able to submit new content.
| Module | Submission form shortcode |
|---|---|
| Events | [itidi_ai_event_submission_form] |
| Places | [itidi_ai_place_submission_form] |
7. Save settings and refresh permalinks
After saving plugin settings, open Settings → Permalinks and click Save Changes. This refreshes WordPress rewrite rules.
Shortcodes
Events shortcodes
| Shortcode | Purpose |
|---|---|
[itidi_ai_events_list] | Renders the server-side Event listing output and loads separated frontend assets for interactivity. |
[itidi_ai_event_content] | Renders single Event content on the selected Event layout page. |
[itidi_ai_event_submission_form] | Renders the frontend Event submission form. This shortcode works when the Events module is enabled. |
Places shortcodes
| Shortcode | Purpose |
|---|---|
[itidi_ai_places_list] | Renders the server-side Place listing output and loads separated frontend assets for interactivity. |
[itidi_ai_place_content] | Renders single Place content on the selected Place layout page. |
[itidi_ai_place_submission_form] | Renders the frontend Place submission form. This shortcode works when the Places module is enabled. |
Submission form usage
Submission form shortcodes can be added to normal WordPress pages. They load the ITI Digital hosted form route for the connected Hubname and render the form widget inside the page content.
[itidi_ai_event_submission_form]
[itidi_ai_place_submission_form]
WordPress Search Integration
The plugin can optionally include API-powered Event and Place results on the WordPress search results page.
How to enable
- Open Settings → ITI Digital.
- Go to the Events tab and enable Include Events in WordPress Search if Event results should appear in search.
- Go to the Places tab and enable Include Places in WordPress Search if Place results should appear in search.
- Save settings.
How it works
When enabled, the plugin uses the visitor’s WordPress search term to request matching Event and/or Place records from the ITI Digital API. API results are displayed together with the WordPress search results using plugin templates.
Template overrides
Developers can override the search templates from the active theme.
| Plugin template | Theme override path |
|---|---|
templates/search/search.php | your-theme/itidi-ai-events-places/search/search.php |
templates/search/api-search-results.php | your-theme/itidi-ai-events-places/search/api-search-results.php |
templates/search/api-search-result-item.php | your-theme/itidi-ai-events-places/search/api-search-result-item.php |
URL Structure
The plugin automatically generates clean, SEO-friendly URLs. No manual route configuration is required for listing routes.
Detail base page URLs
| Module | URL format |
|---|---|
| Events | /events-page/e/event-name-id/ |
| Places | /places-page/p/place-name-id/ |
Fallback URLs
Fallback routes are available when a detail base page route is not used.
| Module | Fallback format |
|---|---|
| Events | /event/event-name-id/ |
| Places | /place/place-name-id/ |
/e/ and /p/ route segments.e or p under selected base pages, because those path segments are reserved for dynamic detail URLs.Dynamic Sitemap
The plugin provides a dynamic sitemap endpoint for indexed ITI Digital Event and Place content.
https://example.com/wp-json/itidi-ai/v1/sitemap.xml
Replace https://example.com with the site URL.
Where to submit the sitemap
- Google Search Console
- Bing Webmaster Tools
- SEO plugins that support external sitemaps
When supported SEO plugins are active, the plugin can also add the dynamic sitemap to the sitemap index.
Canonical URLs
Canonical URLs are generated automatically from ITI Digital API data, normalized for the current WordPress site, and cached for performance.
- Canonical URLs respect WordPress trailing slash settings.
- Staging mode can replace Live Site URLs with the current site URL.
- Canonical URL cache can be refreshed from the SEO settings area.
Analytics Data Layer
Version 1.0.2 adds analytics-friendly dataLayer tracking for single Event and Place detail pages.
On single detail pages, the plugin pushes an itidi_detail_view event to window.dataLayer. This helps Google Tag Manager and GA4 reporting group traffic by stable item ID or canonical URL, even when the same item can be opened from different listing-page contexts.
| Field | Description |
|---|---|
event | Always itidi_detail_view. |
itidi_type | event or place. |
itidi_id | The stable Event or Place ID. |
itidi_name_id | The Event or Place name ID from the detail URL. |
itidi_canonical_url | The preferred canonical URL for SEO and reporting. |
itidi_visited_url | The actual URL opened by the visitor. |
Example:
window.dataLayer.push({
event: "itidi_detail_view",
itidi_type: "event",
itidi_id: "event-id",
itidi_name_id: "event-name-id",
itidi_canonical_url: "https://example.com/events/e/event-name-id/",
itidi_visited_url: "https://example.com/current-context/e/event-name-id/"
});
Staging Mode
The Live Site URL is configured under:Settings → ITI Digital → SEO.
Staging mode allows testing canonical and sitemap URLs without affecting production URLs.
What it does
- Replaces the configured Live Site URL with the current WordPress site URL.
- Applies the replacement before saving canonical URLs.
- Applies the same replacement before rendering sitemap output.
How It Works
- Events and Places listings are embedded using shortcodes.
- Detail base pages are selected from plugin settings.
- WordPress rewrite rules generate dynamic detail URLs.
- The plugin requests server-rendered content data from the ITI Digital API.
- The plugin renders the returned HTML and loads separated API-provided assets/bootstrap data for frontend hydration and interactivity.
- Submission form shortcodes can load hosted ITI Digital Event and Place submission forms on normal WordPress pages.
- Single Event and Place detail pages can push analytics-friendly
dataLayervalues for GTM/GA4 reporting. - Canonical URLs and sitemap URLs are generated and normalized automatically.
Caching & Compatibility
Caching
The plugin includes cache management tools to help keep Event and Place content synchronized with ITI Digital updates.
Features include:
- Canonical URL caching for improved performance.
- Manual refresh of configured Event and Place listing pages.
- Authenticated webhook-based cache invalidation for Event and Place content updates.
- Compatibility with common WordPress cache plugins where supported.
- Safer scheduled cache refresh that avoids re-saving full page content on supported refresh runs.
- WP Engine cache refresh support for configured ITI shortcode pages.
- Improved retry-based listing initialization when third-party widget scripts load later because of optimization or delayed JavaScript settings.
Some hosting providers and server-level caching systems may continue serving stale content after Events or Places are updated in the IMGoing dashboard. Depending on your hosting environment, you may need to reduce cache duration, clear individual URL caches, or exclude dynamic Event and Place routes from server-level caching to ensure updates appear immediately.
If content updates are infrequent, manually clearing the full server cache when needed is often sufficient.
Kinsta Hosting: Route exclusions are generally not required. The plugin automatically purges the cache for affected Event, Place, and listing URLs when content updates are received from the IMGoing platform.
WP Engine Hosting: Version 1.0.3 adds WP Engine cache refresh support for configured ITI shortcode pages.
Scheduled cache refresh: Version 1.0.3 updates the scheduled refresh process so the plugin does not re-save the full page content during supported refresh runs. This improves compatibility with page builders while still refreshing selected ITI shortcode pages.
Examples may include:
- /events/e/*
- /places/p/*
- /wp-json/itidi-ai/v1/sitemap.xml.
Excluding these routes is recommended only when immediate visibility of content updates is required and your hosting provider does not support automated URL-level cache invalidation.
Multisite
The plugin is designed to operate on standard WordPress installations. WordPress multisite compatibility has not yet been fully tested across all configurations.
API Availability
If the ITI Digital API service becomes temporarily unavailable, frontend Event or Place rendering may display incomplete content, cached content, or fallback output depending on the page configuration and available cached data.
Best Practices
- Save WordPress permalinks after the initial setup.
- Do not create manual child pages using reserved
/e/or/p/paths under selected base pages. - Use staging mode only on staging or local environments.
- Refresh canonical URL cache after changing staging settings.
- Clear page cache, CDN cache, and SEO sitemap cache after major setup changes.
Security Practices
The ITI Digital AI-Ready Events & Places plugin is distributed through the WordPress.org plugin directory. As part of that process, the plugin is submitted for WordPress.org review, which includes checks related to security, plugin guidelines, and safe WordPress development practices.
In addition to the WordPress.org review process, the plugin is developed using WordPress secure coding practices. These include sanitizing and validating input before it is stored or used, escaping output before displaying dynamic data, checking user capabilities for admin-only actions, and using nonces where form or settings actions are processed.
The plugin uses WordPress APIs for settings, REST routes, HTTP requests, cron tasks, and database interactions where applicable. It also prevents direct access to plugin files and restricts administrative functionality to authorized WordPress users.
API keys and plugin configuration values are managed through the WordPress admin settings area and are not hard coded into theme templates or public-facing files.
Security Update Process
If a security concern is reported, the ITI Digital team reviews the report, validates the concern, prepares a security update if needed, tests the update, and releases the corrected plugin version through the normal WordPress.org plugin update process.
Clients should keep the plugin updated to the latest available version so they receive any security-related improvements or patches.
Important Note
The security of a WordPress site also depends on WordPress core, the active theme, other installed plugins, hosting configuration, administrator accounts, backups, and malware monitoring. The ITI Digital plugin follows secure coding practices for its own functionality, but it cannot prevent vulnerabilities introduced by unrelated third-party plugins, themes, hosting settings, or compromised user accounts.
External Services
This plugin communicates with ITI Digital services to retrieve module status, server-rendered listing/detail content responses, separated frontend assets/bootstrap data, submission form embed output, and sitemap XML.
The plugin may also receive authenticated webhook requests from ITI Digital services for cache invalidation and content synchronization purposes.
| Service | Purpose |
|---|---|
https://api.imgoingcalendar.com/ | Module status, SSR Event/Place listing responses, SSR Event/Place detail responses, separated asset/bootstrap data, and dynamic sitemap generation. |
https://imgoingcalendar.com/ | ITI Digital service domain and optional widget resources. |
https://imgoingcalendar.com/imgoingscript.js | JavaScript file used for frontend hydration, interactivity, and Event/Place submission form rendering for ITI Digital content. |
Data sent may include Hubname, API key, route parameters, WordPress search terms when search integration is enabled, requests for module configuration, requests for listing/detail content, submission form routes, canonical URL requests, and sitemap generation parameters.
The plugin does not send or collect personally identifiable user data.
By entering a Hubname and API Key and saving plugin settings, the site administrator explicitly authorizes the plugin to communicate with the ITI Digital API endpoints listed above for the purposes described.
When External Requests Occur
| Service | When Requests Occur |
|---|---|
| api.imgoingcalendar.com | Requests occur when Event or Place listing/detail pages are rendered through SSR functionality, when separated assets/bootstrap data are loaded for frontend hydration, when Event or Place submission form shortcodes are rendered, when WordPress search integration requests matching Event or Place results, and when canonical URL refresh operations are performed. |
| Sitemap Endpoint | Sitemap content is generated dynamically when sitemap URLs are requested by search engines or visitors. |
| imgoingscript.js | The rendering script is loaded externally to maintain compatibility with continuously updated API rendering logic and platform functionality without requiring frequent plugin releases through the WordPress.org review process. |
Rendering Script Usage
The frontend rendering script is loaded from the ITI Digital platform to hydrate server-rendered content and maintain compatibility with dynamically updated rendering logic and API functionality without requiring frequent plugin releases.
All requests are performed exclusively over HTTPS. The script does not load additional third-party executable code from unrelated external origins.
Policies
Legacy Embed Finder
The Help tab includes a tool to detect pages or posts that still use the legacy ITI Digital embed code. This helps customers find existing embed implementations before moving those pages to the shortcode-based SSR setup.
What it detects
- Pages containing the legacy embed wrapper markup.
- Pages loading the legacy widget script.
- Pages using legacy Event or Place widget routes.
How to use it
- Open Settings → ITI Digital in WordPress Admin.
- Go to the Help tab.
- Click Find Pages with Legacy Embed Code.
- Review the detected pages, post types, and route values.
- Update those pages to use
[itidi_ai_events_list]or[itidi_ai_places_list]as needed.
Troubleshooting
| Issue | What to check |
|---|---|
| Events or Places tab is hidden | Confirm the Hubname is connected and that the module is enabled for the hub in the ITI Digital platform. |
| Single Event or Place URL returns 404 | Confirm the module is enabled, the layout page is selected, detail base pages are selected, and permalinks have been saved. |
| Listing content does not appear | Confirm the page contains the correct listing shortcode and the server can reach the ITI Digital API. |
| Single detail content does not appear | Confirm the selected layout page contains [itidi_ai_event_content] or [itidi_ai_place_content]. |
| Sitemap URL shows an error | Confirm Hubname is configured, the API is reachable, and module settings are saved. |
| Canonical URL shows staging domain | Check whether Staging mode is enabled. |
| Routes still do not work after setup | Save permalinks and clear page cache, object cache, CDN cache, and SEO plugin cache. |
| Raw CSS or JavaScript appears on Event or Place pages | If Elementor is active, go to Elementor → Settings → Performance and set CSS Print Method to External File. Then regenerate Elementor CSS files and clear all caches. |
| Listing content appears but the interactive widget does not initialize immediately | Check whether a performance plugin is delaying JavaScript. Version 1.0.1 improves listing initialization when third-party widget scripts load later, but some optimization tools may still require excluding the ITI Digital rendering script or plugin listing initialization script from delayed JavaScript settings. After making changes, clear the plugin, page, CDN, and browser caches. |
FAQ
Does this plugin work without an ITI Digital hub?
No. A valid ITI Digital hub is required.
Is an API key required?
Yes. A valid ITI Digital API key is required for authenticated API requests.
Can I manually configure listing routes?
No. Listing routes are handled automatically by the plugin to keep setup simple and consistent.
Can I use multiple listing pages?
Yes. You can select multiple detail base pages for Events and Places.
Can Events and Places appear in WordPress search?
Yes. Events and Places can be included in WordPress search results when enabled from the Events and Places settings tabs.
Can I customize the search result design?
Yes. Search templates can be overridden from the active theme under itidi-ai-events-places/search/.
Why are some settings hidden?
The plugin checks the connected Hubname and only displays modules available for that hub.
Why are my URLs not working?
Save WordPress permalinks after setup or after changing relevant settings.
Why is my canonical URL different?
Check whether Staging mode is enabled and whether the canonical cache needs to be refreshed.
Which sitemap URL should I submit?
Submit https://example.com/wp-json/itidi-ai/v1/sitemap.xml, replacing https://example.com with your site URL.
Can I control how many Events or Places appear in a listing?
Yes. Version 1.0.1 adds configurable listing limits for Events and Places. Site administrators can set default listing limits in the Events and Places settings tabs.
A specific page can also use the limit shortcode attribute, for example:
[itidi_ai_events_list limit="50"]
[itidi_ai_places_list limit="25"]
Can I build listing shortcodes from the plugin settings?
Yes. Version 1.0.1 adds shortcode builder tools in the Events and Places settings tabs. These tools help administrators create and copy full listing shortcodes with supported attributes.
Can I add frontend Event or Place submission forms?
Yes. Version 1.0.2 adds frontend submission form shortcodes for Events and Places.
[itidi_ai_event_submission_form]
[itidi_ai_place_submission_form]
The Event submission form shortcode works when the Events module is enabled. The Place submission form shortcode works when the Places module is enabled.
What should I check if a listing does not initialize because of delayed JavaScript?
Version 1.0.1 improves listing initialization when third-party widget scripts load later due to optimization or delayed JavaScript settings. If an optimization plugin still prevents the listing from becoming interactive, exclude the ITI Digital rendering script or plugin listing initialization script from delayed JavaScript settings and clear all caches.
Will the plugin create duplicate Event or Place detail pages if the same item appears on multiple listing pages?
The plugin can generate detail URLs relative to the listing page where the visitor is browsing.
For example, if the same Event appears in a scrolling calendar on the home page and also in the full calendar page, the visitor may be able to open the Event detail page from either context. The URL structure uses /e/event-slug/ for Events and /p/place-slug/ for Places so the detail page stays connected to the listing page the visitor came from, similar to how WordPress posts can include category or context in the URL.
This does not create an SEO duplication issue because the plugin handles canonical URLs separately.
For each unique Event or Place, the plugin stores or uses one correct canonical URL. Even if the same Event or Place can be opened through different listing page paths, the page output will include the correct canonical URL. This tells search engines which URL should be treated as the main version and which versions are alternate paths.
The sitemap follows the same logic. It includes the canonical URL for each unique Event or Place, not every possible listing-page variation. This means each Event and each Place appears only once in the sitemap.
In short
| Area | How it works |
|---|---|
| User experience | The detail URL can stay connected to the page or listing context the visitor was browsing. |
| SEO | Each Event or Place has one canonical URL. |
| Sitemap | The sitemap only includes the canonical URL once for each unique Event or Place. |
| Duplicate URL handling | Duplicate URL concerns are handled through canonical tags and sitemap logic. |
Places work the same way. If the full directory is embedded on one page and a category-specific Places listing is embedded on another page, the Place detail may be accessible from that listing context. Search engines will still see the correct canonical URL, and the sitemap will only list the preferred URL once.
This setup gives visitors contextual URLs while keeping search engines focused on one authoritative URL per Event or Place.
How should analytics reporting handle multiple contextual detail URLs for the same Event or Place?
This is a valid analytics consideration. The canonical URL setup solves the SEO duplication issue, but GA4 and most analytics tools normally record the actual URL visited, not automatically the canonical URL.
This means analytics reports may show multiple URL paths for the same Event or Place unless reporting is grouped or normalized.
There are two practical ways to handle this without changing the current user experience.
Option 1: Track and report by plugin dataLayer values in GA4
This is the cleaner option going forward. Version 1.0.2 pushes an itidi_detail_view event to window.dataLayer on single Event and Place detail pages.
The dataLayer payload includes:
event: "itidi_detail_view"
itidi_type
itidi_id
itidi_name_id
itidi_canonical_url
itidi_visited_url
Google Tag Manager can use this custom event and these dataLayer variables to send stable reporting values into GA4.
Suggested setup steps
- In Google Tag Manager, create a custom event trigger.
- Set the event name to:
itidi_detail_view
- Create Data Layer Variables for the values you want to send to GA4, such as:
itidi_type
itidi_id
itidi_name_id
itidi_canonical_url
itidi_visited_url
- Create or update a GA4 event tag that fires on the
itidi_detail_viewtrigger. - Add the dataLayer values as event parameters. For example:
itidi_type: {{DLV - itidi_type}}
itidi_id: {{DLV - itidi_id}}
canonical_url: {{DLV - itidi_canonical_url}}
visited_url: {{DLV - itidi_visited_url}}
- In GA4, create event-scoped custom dimensions for the parameters needed in reports, such as
itidi_idandcanonical_url. - After data starts collecting, report by the stable item ID or canonical URL instead of only Page Path or Page Location.
Google references
Option 2: Normalize URLs in Data Studio reporting
For existing reports or historical data, the quicker reporting-side option is to normalize the URL paths in Data Studio, Google’s reporting tool formerly called Looker Studio.
Because Event detail URLs include:
/e/event-slug/
and Place detail URLs include:
/p/place-slug/
a calculated field can group all versions of the same Event or Place together based on that unique part of the URL.
Suggested setup steps
- Open the Data Studio report.
- Edit the data source.
- Create a new calculated field, for example:
Normalized Event/Place URL
- Use logic similar to this:
CASE
WHEN REGEXP_MATCH(Page path, ".*/e/[^/]+/?$") THEN REGEXP_EXTRACT(Page path, "(/e/[^/?#]+/?)")
WHEN REGEXP_MATCH(Page path, ".*/p/[^/]+/?$") THEN REGEXP_EXTRACT(Page path, "(/p/[^/?#]+/?)")
ELSE Page path
END
- Use this new field in reports instead of the raw Page Path.
This can group URLs like:
/home/e/sample-event/
/events-calendar/e/sample-event/
under:
/e/sample-event/
The same approach can group Place URLs like:
/places/p/sample-business/
/dining/p/sample-business/
under:
/p/sample-business/
Page path may vary depending on the connected GA4/Data Studio data source. If the report uses a different field name, update the formula to match the report’s page path dimension.
Google references
In summary, SEO is already protected through canonical URLs and sitemap logic. For analytics, the best forward-looking solution is to collect the canonical URL in GA4. For existing or historical reporting, URL normalization in Data Studio is the fastest reporting-side option.
Changelog
Version 1.0.3
- Fixed an issue where the scheduled cache refresh process could affect page-builder content on some sites.
- Added WP Engine cache refresh support for ITI shortcode pages.
Version 1.0.2
- Added Event and Place submission form shortcodes.
- Added analytics-friendly
dataLayertracking for Event and Place detail pages. - Removed outdated Detail Base Page warning about child pages, since detail URLs use dedicated
/e/and/p/route separators.
Version 1.0.1
- Added configurable listing limits for Events and Places.
- Added
limitshortcode attribute support for Event and Place listing shortcodes. - Added admin shortcode builder tools to help create full Event and Place listing shortcodes with attributes, including add/remove handling for shortcode parameters.
- Improved listing widget initialization when third-party widget scripts load later due to optimization or delayed JavaScript settings.
Version 1.0.0
- Initial public release.
- Server-side rendered Events and Places content.
- SEO-friendly dynamic Event and Place routing.
- Dynamic sitemap generation support.
- Canonical URL generation and caching.
- Support for Rank Math, Yoast SEO, and All in One SEO.
- Legacy Embed Finder migration helper.
- Automatic sitemap exclusion support for internal SSR layout pages.
- AI discoverability and structured content optimization.
- API key support for authenticated API requests.
- Optional WordPress search integration for Events and Places.
- Overridable search templates for frontend search result customization.