Version 1.0.4

ITI Digital AI-Ready Events & Places Documentation

ITI Digital AI-Ready Events & Places delivers structured, real-time Events, Places, Itineraries, and Travel Planner content to WordPress websites with built-in support for AI discoverability, SEO, WordPress search integration, and search visibility.

Overview

ITI Digital AI-Ready Events & Places delivers structured, real-time Events, Places, Itineraries, and Travel Planner 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 supported destination content without requiring JavaScript execution for the initial content.

What it renders

Event listings and detail pages, Place listings and detail pages, Itinerary listings and embedded detail content, and Travel Planner output.

SEO & AI support

Clean URLs, canonical URLs, structured data, Event and Place sitemap support, llms.txt support, and SEO plugin compatibility.

Flexible WordPress integration

Pages and Posts are supported by default, with optional public custom post type support for Events, Places, and Itineraries.

Admin location

Go to WordPress Admin → Settings → ITI Digital Events & Places.

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 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.
  • Authenticated webhook handling for Event, Place, Itinerary, and module-status 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 and Place detail pages.
  • Legacy Embed Finder tool to help identify older ITI Digital embed implementations.
  • Configurable listing limits for Events and Places.
  • limit shortcode 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 dataLayer tracking 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.
  • Itineraries listing and embedded detail content support.
  • Travel Planner integration with configurable frontend placement and loading rules.
  • /llms.txt support for Event, Place, and Itinerary discovery pages.
  • Optional public custom post type support for Events, Places, and Itineraries.

Requirements

RequirementDetails
WordPressVersion 6.0 or higher.
PHPVersion 7.4 or higher.
ITI Digital hubA Hubname is the unique identifier ITI Digital provides for your destination's content feed and API configuration.
API KeyA valid ITI Digital API key is required for authenticated API requests.
PermalinksPretty permalinks should be enabled. Save permalinks after setup or route-related changes.
External requestsThe WordPress server must be able to make outbound requests to ITI Digital services.

Installation

The plugin can be installed directly from the WordPress.org Plugin Directory or uploaded manually as a ZIP file.

Install from WordPress.org

  1. In the WordPress admin dashboard, go to Plugins → Add New Plugin.
  2. Search for ITI Digital AI-Ready Events & Places.
  3. Click Install Now.
  4. Click Activate.

Install using a ZIP file

  1. Go to Plugins → Add New Plugin → Upload Plugin.
  2. Select the plugin ZIP file and click Install Now.
  3. After installation is complete, click Activate Plugin.

After activation, follow the Setup Guide below to connect and configure the plugin.

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.

Important: After the Hubname is connected, use the Disconnect button if you need to change the connection details.

2. Enable available modules

Enable the modules that should be available on the WordPress site. Module availability depends on the connected ITI Digital hub and may include Events, Places, Itineraries, and Travel Planner.

3. Configure Event and Place 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.

ModuleLayout 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. Configure Event and Place detail base pages

Select the pages where listing shortcodes are placed. These pages are used as base URLs for detail routes.

ModuleListing shortcode
Events[itidi_ai_events_list]
Places[itidi_ai_places_list]

5. Configure Itineraries

When the Itineraries module is available for the connected hub, use the Itineraries settings tab to configure Itinerary listing and detail content entries.

Itinerary listings can be placed on selected WordPress content entries, while individual Itinerary detail content can be embedded on configured content entries using the supported Itinerary shortcodes.

Note: Pages and Posts are supported by default. Additional eligible public custom post types can be enabled from the Advanced settings tab.

6. Configure Travel Planner

When Travel Planner is available for the connected hub, it can be enabled from the Travel Planner settings tab.

Use the available settings to control where Travel Planner loads on the frontend. The plugin supports configurable placement and loading rules and can automatically avoid supported ITI Digital module pages where Travel Planner is already provided through the platform output.

Important: The WordPress Travel Planner setting controls Travel Planner only on regular WordPress pages where it is injected by the plugin. Event, Place, and Itinerary listing/detail pages are handled by the ITI Digital API/widget output, so Travel Planner availability on those pages depends on the API-side module configuration rather than this setting.
Job Board compatibility: Pages containing the Job Board widget should currently be excluded from Travel Planner loading. Due to a known conflict between the Job Board widget and Travel Planner, both should not be loaded on the same page until the platform-side conflict is resolved.

7. Configure optional custom post types

Pages and Posts are supported by default. The Advanced settings tab allows additional eligible public custom post types to be enabled separately for Events, Places, and Itineraries.

Once enabled, entries from those post types become available in the relevant content selectors and shortcode tools.

8. 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 limit shortcode attribute when a specific page needs a different listing limit.

9. 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.

ModuleSubmission form shortcode
Events[itidi_ai_event_submission_form]
Places[itidi_ai_place_submission_form]
Note: The Event submission form shortcode requires the Events module to be enabled. The Place submission form shortcode requires the Places module to be enabled.

10. Save settings and refresh permalinks

After saving plugin settings, open Settings → Permalinks and click Save Changes. This refreshes WordPress rewrite rules.

Shortcodes

Events shortcodes

ShortcodePurpose
[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

ShortcodePurpose
[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.

Itineraries shortcodes

ShortcodePurpose
[itidi_ai_itineraries_list] Renders the Itinerary listing output.
[itidi_ai_itinerary_content id="itinerary_id"] Renders embedded Itinerary detail content.

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]

URL Structure

The plugin automatically generates clean, SEO-friendly URLs. No manual route configuration is required for listing routes.

Detail base page URLs

ModuleURL 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.

ModuleFallback format
Events/event/event-name-id/
Places/place/place-name-id/
Detail base pages: Parent pages with child pages can be selected as Detail Base Pages. Dynamic detail URLs are separated by the dedicated /e/ and /p/ route segments.
Reserved paths: Avoid creating manual child pages directly named 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.

SEO Plugin Compatibility: The plugin includes compatibility support for Yoast SEO, Rank Math, All in One SEO, and WordPress core sitemaps to help exclude internal SSR layout/template pages from sitemap indexing.

llms.txt

The plugin can generate and serve a root-level /llms.txt file to help AI crawlers discover official destination content managed through the ITI Digital integration.

When enabled, the file can include discovery links for configured Event, Place, and Itinerary content entries, along with the available Event and Place sitemap.

How it is generated

  • Events use configured Event discovery/detail base entries.
  • Places use configured Place discovery/detail base entries.
  • Itineraries use configured Itinerary listing entries.
  • The Event and Place sitemap is included when available.

The file is refreshed when relevant plugin settings change and after supported plugin version updates.

Cache note: /llms.txt may be cached by the hosting provider or CDN. If possible, reduce the cache duration for this URL. Otherwise, clear the site/CDN cache after adding, removing, or changing configured Event, Place, or Itinerary pages.

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.
SEO Protection: Internal Event and Place layout/template pages used for SSR rendering are automatically excluded from XML sitemaps and can be marked as noindex to help prevent duplicate content indexing.

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.

FieldDescription
eventAlways itidi_detail_view.
itidi_typeevent or place.
itidi_idThe stable Event or Place ID.
itidi_name_idThe Event or Place name ID from the detail URL.
itidi_canonical_urlThe preferred canonical URL for SEO and reporting.
itidi_visited_urlThe 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/"
});
Note: This tracking data is only pushed on single Event and Place detail pages. It is not added to listing pages.

Staging Mode

The Live Site URL is configured under:Settings → ITI Digital Events & Places → 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.
Use only for testing: Staging mode should not be enabled on production sites.

How It Works

  1. Events, Places, and Itineraries content can be embedded using supported plugin shortcodes.
  2. Detail base pages are selected from plugin settings.
  3. WordPress rewrite rules generate dynamic detail URLs.
  4. Itinerary listing and detail content is rendered through the configured Itinerary content entries.
  5. Travel Planner can be loaded according to the configured frontend placement and loading rules when the module is available.
  6. The plugin requests server-rendered content data from the ITI Digital API.
  7. The plugin renders the returned HTML and loads separated API-provided assets/bootstrap data for frontend hydration and interactivity.
  8. Submission form shortcodes can load hosted ITI Digital Event and Place submission forms on normal WordPress pages.
  9. Single Event and Place detail pages can push analytics-friendly dataLayer values for GTM/GA4 reporting.
  10. Canonical URLs and sitemap URLs are generated and normalized automatically.
  11. The plugin can generate /llms.txt discovery content for configured Event, Place, and Itinerary entries.

Caching & Compatibility

Caching

The plugin includes cache management tools to help keep Event, Place, and Itinerary content synchronized with ITI Digital updates.

Features include:

  • Canonical URL caching for improved performance.
  • Manual refresh of configured ITI Digital content pages where supported.
  • Authenticated webhook-based cache handling for Event, Place, Itinerary, and module-status 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, Places, or Itineraries 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.

llms.txt caching: The plugin requests a cache purge for /llms.txt when supported by the hosting environment. Some hosts or CDNs may cache this static file separately from normal WordPress pages. If updated content is not immediately visible, reduce the cache duration for /llms.txt where possible or manually clear the hosting/CDN cache.

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, supported Event, Place, Itinerary, or Travel Planner functionality may display incomplete content, cached content, fallback output, or may not load 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.
  • Clear the site/CDN cache after changing Event, Place, or Itinerary discovery pages if /llms.txt remains cached.
  • Use the Advanced settings tab only for public custom post types that should participate in the ITI Digital content configuration.

Security Practices

The ITI Digital AI-Ready Events & Places plugin is published in the WordPress.org plugin directory and passed WordPress.org's plugin review, which covers security and plugin guidelines, before being listed.

Version 1.0.4 was scanned with the official WordPress Plugin Check tool and with PHP_CodeSniffer using the WordPress Coding Standards security rules, with no errors or warnings reported.

The plugin follows WordPress secure coding practices:

  • Event, Place, and Itinerary data received from the ITI Digital platform is treated as untrusted and is escaped or filtered before output, including within JSON-LD structured data.
  • Every REST route defines a permission check. The sitemap endpoint is public and read-only, and the cache-invalidation webhook requires a shared secret.
  • Admin and AJAX actions require administrator capability and a valid nonce.
  • Request input is sanitized, and database operations use WordPress APIs rather than raw SQL.
  • Direct access to plugin files is blocked.

API keys, webhook secrets, and plugin configuration values are managed in 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 identified, please report it through the appropriate ITI Digital support or communication channel. The ITI Digital team reviews each report, validates the concern, prepares and tests a fix if needed, and releases the corrected version through the WordPress.org plugin update process.

Keep the plugin updated to the latest version. We recommend enabling automatic updates for this plugin under Plugins → Installed Plugins.

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

Note: imgoingcalendar.com is part of the underlying ITI Digital platform infrastructure used by the plugin.

This plugin communicates with ITI Digital services to retrieve module status, server-rendered Event, Place, and Itinerary content responses, Travel Planner output, 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.

ServicePurpose
https://api.imgoingcalendar.com/ Module status, Event/Place/Itinerary content responses, Travel Planner support, separated asset/bootstrap data, canonical-related data, and dynamic sitemap generation.
https://imgoingcalendar.com/ITI Digital service domain and optional widget resources.
https://imgoingcalendar.com/imgoingscript.jsJavaScript 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 supported Event, Place, or Itinerary content is rendered, when Travel Planner functionality is requested, 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 supported 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.
Important: The Legacy Embed Finder only detects pages using legacy embed implementations. Existing pages must still be updated manually by replacing the old embed code with the appropriate ITI Digital shortcode.

How to use it

  1. Open Settings → ITI Digital Events & Places in WordPress Admin.
  2. Go to the Help tab.
  3. Click Find Pages with Legacy Embed Code.
  4. Review the detected pages, post types, and route values.
  5. Update those pages to use [itidi_ai_events_list] or [itidi_ai_places_list] as needed.
Tip: Use this tool during setup to ensure no old embedded pages are missed.

Troubleshooting

IssueWhat to check
Events or Places tab is hiddenConfirm the Hubname is connected and that the module is enabled for the hub in the ITI Digital platform.
Single Event or Place URL returns 404Confirm the module is enabled, the layout page is selected, detail base pages are selected, and permalinks have been saved.
Listing content does not appearConfirm the page contains the correct listing shortcode and the server can reach the ITI Digital API.
Single detail content does not appearConfirm the selected layout page contains [itidi_ai_event_content] or [itidi_ai_place_content].
Sitemap URL shows an errorConfirm Hubname is configured, the API is reachable, and module settings are saved.
Canonical URL shows staging domainCheck whether Staging mode is enabled.
Routes still do not work after setupSave 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.
Itineraries tab is hidden Confirm the Hubname is connected and that the Itineraries module is enabled for the hub in the ITI Digital platform.
Itinerary content does not appear Confirm the Itineraries module is enabled, the correct content entry is configured, and the required Itinerary shortcode is present.
Travel Planner does not appear For regular WordPress pages, confirm Travel Planner is available for the connected hub, enabled in the plugin settings, and not excluded by the configured frontend loading rules. Event, Place, and Itinerary listing/detail pages receive Travel Planner through the ITI Digital API/widget output and are controlled by the API-side module configuration.
/llms.txt shows older content Confirm the latest plugin settings are saved, then clear the hosting/CDN cache. Some hosting platforms cache /llms.txt separately from normal WordPress page cache.

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 detail base pages?

Yes. You can select multiple detail base pages for Events and Places where supported.

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

  1. In Google Tag Manager, create a custom event trigger.
  2. Set the event name to:
itidi_detail_view
  1. 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
  1. Create or update a GA4 event tag that fires on the itidi_detail_view trigger.
  2. 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}}
  1. In GA4, create event-scoped custom dimensions for the parameters needed in reports, such as itidi_id and canonical_url.
  2. After data starts collecting, report by the stable item ID or canonical URL instead of only Page Path or Page Location.
Important: This will work for data going forward after the setup is completed. It will not automatically rewrite historical analytics data.

Google references

Option 2: Normalize URLs in Looker Studio reporting

For existing reports or historical data, the quicker reporting-side option is to normalize the URL paths in Looker Studio, formerly known as Google Data 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

  1. Open the Data Studio report.
  2. Edit the data source.
  3. Create a new calculated field, for example:
Normalized Event/Place URL
  1. 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
  1. 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/
Note: The field name 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.

Does the plugin support Itineraries?

Yes. The plugin supports Itinerary listings and embedded Itinerary detail content. Listing and detail content entries can be configured from the Itineraries settings tab.

Does the plugin support Travel Planner?

Yes. When Travel Planner is available for the connected hub, it can be enabled and configured with frontend placement and loading rules for regular WordPress pages. Event, Place, and Itinerary listing/detail pages receive Travel Planner through the ITI Digital API/widget output and are controlled independently by the API-side module configuration.

What is llms.txt?

When enabled, the plugin generates /llms.txt to provide AI crawlers with official Event, Place, and Itinerary discovery links, along with the available Event and Place sitemap.

Can I use custom post types for Events, Places, or Itineraries?

Yes. Pages and Posts are supported by default. Additional eligible public custom post types can be enabled separately for Events, Places, and Itineraries from the Advanced settings tab.

Why does llms.txt still show older content?

Some hosting providers and CDNs cache /llms.txt as a static file. If possible, reduce the cache duration for this URL or clear the site/CDN cache after changing configured Event, Place, or Itinerary entries.

Changelog

Version 1.0.4

  • Added /llms.txt support for exposing official destination content and discovery links to AI crawlers.
  • Added Itineraries module integration, including module-status handling, listing and detail content support, settings, shortcode tools, and cache handling.
  • Added Travel Planner integration with remote availability detection, configurable frontend loading rules, automatic exclusions, and cache handling.
  • Added support for the tripPlanner module-status value for platform synchronization.
  • Added optional public custom post type support for Events, Places, and Itineraries through the Advanced settings tab.
  • Added automatic trailing slash API handling based on the WordPress permalink structure.
  • Improved expired and unavailable Event handling by rendering the full SSR HTML response provided by the API.
  • Fixed frontend header/menu layering issues on dynamic single Event and Place pages.
  • Fixed single Event and Place link previews incorrectly referencing the underlying WordPress layout/template page.
  • Added dynamic Open Graph image handling for single Event and Place pages using image data returned by the API.
  • Removed incorrect WordPress oEmbed discovery links from dynamic single Event and Place URLs.
  • Improved webhook authentication by accepting the configured cache-purge secret only through the request signature header.
  • Added guidance for hosting/CDN caching of /llms.txt.

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 dataLayer tracking 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 limit shortcode 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.