{"id":347541,"date":"2026-07-31T08:02:48","date_gmt":"2026-07-31T08:02:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/travelity-widget-seo\/"},"modified":"2026-07-31T08:02:36","modified_gmt":"2026-07-31T08:02:36","slug":"travelity-widget-seo","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/travelity-widget-seo\/","author":23536754,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.0","stable_tag":"0.1.0","tested":"7.0.2","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Travelity Widget SEO","header_author":"Travelity","header_description":"SEO-friendly, server-rendered product pages synced from Travelity, with the booking widget embedded on each page.","assets_banners_color":"","last_updated":"2026-07-31 08:02:36","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/travelity.app","rating":0,"author_block_rating":0,"active_installs":0,"downloads":27,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.0":{"tag":"0.1.0","author":"travelity","date":"2026-07-31 08:02:36"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3629604,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3629604,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3629604,"resolution":false,"location":"assets","locale":false}},"assets_banners":[],"assets_blueprints":{},"all_blocks":{"travelity\/booking-widget":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"travelity\/booking-widget","title":"Travelity Booking Widget","category":"embed","icon":"palmtree","description":"The Travelity booking widget, linked to this site's product and funnel pages. Use this rather than pasting an embed snippet.","keywords":["travelity","booking","widget","tour","checkout"],"textdomain":"travelity-widget-seo","attributes":{"route":{"type":"string","default":""},"product":{"type":"string","default":""},"type":{"type":"string","default":""}},"supports":{"html":false,"multiple":false,"reusable":false},"editorScript":"travelity-block-editor"}},"tagged_versions":["0.1.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[269,186,17227,249,162],"plugin_category":[39,40,55],"plugin_contributors":[273987],"plugin_business_model":[],"class_list":["post-347541","plugin","type-plugin","status-publish","hentry","plugin_tags-booking","plugin_tags-seo","plugin_tags-tours","plugin_tags-travel","plugin_tags-widget","plugin_category-business","plugin_category-calendar-and-events","plugin_category-seo-and-marketing","plugin_contributors-travelity","plugin_committers-travelity"],"banners":[],"icons":{"svg":"https:\/\/ps.w.org\/travelity-widget-seo\/assets\/icon.svg?rev=3629604","icon":"https:\/\/ps.w.org\/travelity-widget-seo\/assets\/icon.svg?rev=3629604","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>The Travelity booking widget is a client-rendered app mounted in an iframe \u2014 great for booking, invisible to search engines. This plugin fixes that.<\/p>\n\n<p>It syncs the products from your Travelity workspace into WordPress and serves real, crawlable pages for each of them:<\/p>\n\n<ul>\n<li><strong>Server-rendered product pages<\/strong> with title, description and cover image \u2014 indexable by search engines.<\/li>\n<li><strong>Structured data<\/strong> (JSON-LD <code>Product<\/code> \/ <code>AggregateOffer<\/code>, <code>TouristTrip<\/code> for tours, <code>BreadcrumbList<\/code>), meta description and Open Graph tags. Plays nicely with Yoast SEO and Rank Math: in the default mode it defers meta\/OG output to them and only adds the structured data they don't.<\/li>\n<li><strong>The booking widget embedded on every product page<\/strong>, bound to that product \u2014 live prices, availability and booking stay in the widget, where they are always current.<\/li>\n<li><strong>A real booking funnel<\/strong>: the plugin creates Checkout, Booking Result and Wishlist pages, and the widget navigates to them instead of routing inside its iframe \u2014 so every funnel step is a real URL your analytics can see.<\/li>\n<li><strong>A product archive<\/strong> page listing all synced products, plus a \"Travelity Booking Widget\" block and a <code>[travelity_widget]<\/code> shortcode for placing the full widget anywhere.<\/li>\n<li><strong>Stable product links<\/strong>: each product also answers on <code>\/t\/{id}<\/code> and redirects to its current pretty permalink, so links from the widget keep working even if you edit a page's slug.<\/li>\n<li>Products removed in Travelity are set to draft, never deleted \u2014 their URLs are preserved.<\/li>\n<li>Pages inherit your Travelity widget theme (colors, font) automatically, with per-site overrides.<\/li>\n<\/ul>\n\n<p><strong>A Travelity account is required.<\/strong> The plugin does nothing without a Travelity workspace and its widget API key (Travelity admin \u2192 Integrations \u2192 Widget). Learn more at <a href=\"https:\/\/travelity.app\">travelity.app<\/a>.<\/p>\n\n<p>Content flows one way, Travelity \u2192 WordPress. The plugin never writes anything back to your Travelity workspace.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the Travelity platform. It does not work without it.<\/p>\n\n<p><strong>Travelity API<\/strong> (<code>https:\/\/api.travelity.app<\/code>)<\/p>\n\n<ul>\n<li>What it is: the Travelity workspace API that owns your product catalogue and workspace configuration.<\/li>\n<li>What is sent and when: your widget API key (as an authorization header) on every request. Requests happen when you save the plugin settings (to validate the key), on the scheduled sync (hourly \/ twice daily \/ daily, as configured), and when you press \"Sync now\". Product cover images are downloaded into your media library during sync.<\/li>\n<li>No visitor data is ever sent to this endpoint \u2014 only your server talks to it.<\/li>\n<\/ul>\n\n<p><strong>Travelity widget<\/strong> (<code>https:\/\/widget.travelity.app<\/code>)<\/p>\n\n<ul>\n<li>What it is: the Travelity booking widget application, loaded in your visitors' browsers on pages where the widget is embedded.<\/li>\n<li>What is sent and when: the visitor's browser loads the widget script and communicates with Travelity to show live prices and availability and to complete bookings; booking details entered by the visitor (contact and payment information) are handled by Travelity. Gallery images on product pages are also served from the Travelity CDN.<\/li>\n<\/ul>\n\n<p>Travelity terms and privacy policy: <a href=\"https:\/\/travelity.app\/legal\/terms\">https:\/\/travelity.app\/legal\/terms<\/a> \u00b7 <a href=\"https:\/\/travelity.app\/legal\/privacy\">https:\/\/travelity.app\/legal\/privacy<\/a><\/p>\n\n<p><strong>Google Fonts<\/strong> (<code>https:\/\/fonts.googleapis.com<\/code>)<\/p>\n\n<ul>\n<li>What it is: Google's web font service.<\/li>\n<li>What is sent and when: only when your Travelity widget theme (or the plugin's font override setting) specifies a Google-hosted font, visitors' browsers request that font file from Google, which involves their IP address as with any web request. If no such font is configured, no request to Google is made.<\/li>\n<li>Google's terms: <a href=\"https:\/\/developers.google.com\/fonts\/terms\">https:\/\/developers.google.com\/fonts\/terms<\/a><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin to <code>\/wp-content\/plugins\/travelity-widget-seo\/<\/code>, or install it through the WordPress plugins screen.<\/li>\n<li>Activate the plugin. It creates the Checkout, Booking Result and Wishlist pages automatically.<\/li>\n<li>Go to <strong>Settings \u2192 Travelity<\/strong> and paste your widget API key (Travelity admin \u2192 Integrations \u2192 Widget). This is the only required setting.<\/li>\n<li>Press <strong>Sync now<\/strong> (or wait for the scheduled sync). Your products appear under <strong>Travelity Products<\/strong> and on the archive page.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20travelity%20account%3F\"><h3>Do I need a Travelity account?<\/h3><\/dt>\n<dd><p>Yes. The plugin renders and syncs the catalogue of a Travelity workspace; without a workspace and its widget API key it has nothing to show.<\/p><\/dd>\n<dt id=\"are%20bookings%20stored%20in%20wordpress%3F\"><h3>Are bookings stored in WordPress?<\/h3><\/dt>\n<dd><p>No. Browsing and SEO happen on your WordPress pages; prices, availability and the booking itself live in the embedded Travelity widget. WordPress never stores payment or booking data.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20a%20product%20i%20deactivate%20in%20travelity%3F\"><h3>What happens to a product I deactivate in Travelity?<\/h3><\/dt>\n<dd><p>Its WordPress page is set to draft on the next sync \u2014 never deleted \u2014 so the URL is preserved and comes back if the product does.<\/p><\/dd>\n<dt id=\"can%20i%20edit%20the%20synced%20pages%3F\"><h3>Can I edit the synced pages?<\/h3><\/dt>\n<dd><p>You can edit slugs freely \u2014 the plugin never overwrites a slug after creation. Titles, descriptions and images are re-synced from Travelity and will be overwritten when the product changes there.<\/p><\/dd>\n<dt id=\"why%20are%20the%20funnel%20pages%20not%20indexed%3F\"><h3>Why are the funnel pages not indexed?<\/h3><\/dt>\n<dd><p>Checkout, Booking Result and Wishlist are intentionally <code>noindex<\/code> \u2014 they are transactional steps, not content.<\/p><\/dd>\n<dt id=\"what%20data%20is%20removed%20on%20uninstall%3F\"><h3>What data is removed on uninstall?<\/h3><\/dt>\n<dd><p>Deleting the plugin removes its settings and caches. Synced product pages and the three funnel pages are kept \u2014 they are your content; delete them from the admin if you don't want them.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release: product sync, server-rendered product pages and archive, JSON-LD and OG output, funnel pages with site linking, widget block and shortcode, workspace theming.<\/li>\n<\/ul>","raw_excerpt":"SEO-friendly, server-rendered product pages synced from your Travelity workspace, with the Travelity booking widget embedded on each page.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/347541","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=347541"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/travelity"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=347541"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=347541"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=347541"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=347541"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=347541"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=347541"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}