=== CultDevOps XML Sitemap Generator - Image, Video, News and Product Feed ===
Contributors: cultdevops
Tags: xml sitemap, sitemap, image sitemap, news sitemap, google merchant center
Requires at least: 5.6
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 2.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

XML sitemaps for posts, pages, images, videos and Google News, and a WooCommerce product feed for Google Merchant Center. Every sitemap type is free.

== Description ==

CultDevOps XML Sitemap Generator builds the XML sitemaps that search engines read, and a product feed for Google Merchant Center from your WooCommerce products. Every sitemap type is free. A sitemap helps search engines find your pages; it does not make them rank higher, and Google does not promise that every listed page is crawled or indexed.

**Who it is for**

* Site owners who want an XML sitemap with images, videos or Google News, and who want to choose which content is listed.
* Multilingual sites (Polylang or WPML) and WordPress multisite networks, where each language or site needs its own sitemaps.
* WooCommerce stores that want to give Google Merchant Center, and Microsoft Merchant Center, a product feed without a separate feed plugin.

**How it works**

1. On a new site, click Create the recommended sitemaps. The plugin creates the sitemaps of your posts, pages, custom post types, categories and images, and a sitemap index that lists them.
2. Add tags, custom taxonomies, videos or Google News on the General screen when your site has that content.
3. Submit the address of the sitemap index to the search engines (Google Search Console, Bing Webmaster Tools). The plugin also adds a "Sitemap:" line to robots.txt.

= Sitemaps (free) =

* Posts, pages, every public custom post type (WooCommerce products among them), categories, tags and every public custom taxonomy
* One button creates the recommended sitemaps on a new site: posts, pages, custom post types, categories, images and the sitemap index
* Image sitemap: posts and pages with the images they hold
* Video sitemap: YouTube, Vimeo, Dailymotion and video files that have a real thumbnail
* Google News sitemap of the articles of the last two days, with the publication name you set
* "Exclude from sitemaps" on the edit screen of every post, page and custom post type entry (block and classic editor)
* Posts that Yoast SEO, Rank Math, All in One SEO or SEOPress marks noindex are left out by themselves
* A sitemap index that lists every general sitemap, and a "Sitemap:" line in robots.txt
* A browser view (XSL, served by your site): each sitemap opens as a table of addresses, image counts and dates
* Dynamic sitemaps that follow your content (cached, split into pages of 1,000 URLs) or static files
* A sitemap per language with hreflang links when Polylang or WPML is active
* Multisite: each site has its own sitemaps, settings and index
* A switch for the WordPress core sitemap (wp-sitemap.xml)

= Product feed (free) =

* Google Merchant Center feed (RSS 2.0 with Google's g: attributes) from your WooCommerce products
* Microsoft Merchant Center can import a Google Merchant Center feed ([Microsoft Advertising: shopping campaigns](https://about.ads.microsoft.com/en/solutions/ad-products-formats/retail/shopping-campaigns)), and Google Ads shopping campaigns use the products of Merchant Center
* "Only products in stock" option for advertising
* Prices with VAT for the country of your store, or without tax in the United States and Canada, as Merchant Center asks
* Quality report: products without a GTIN, a brand, an image or a Google product category, and products without a price, each number linked to those products in WooCommerce
* Prices in your store currency without conversion; a field a product does not have, such as the GTIN, is left out. The plugin never invents products, prices or barcodes

= Premium =

The premium plan is a separate package, sold and licensed through Freemius. It adds product feeds for these channels, each with the field names of the channel's own specification:

* Meta catalog for Facebook and Instagram shops and Meta ads (RSS 2.0, [Meta catalog reference](https://developers.facebook.com/docs/marketing-api/catalog/reference))
* TikTok catalog, sku_id included (RSS 2.0, [TikTok product parameters](https://ads.tiktok.com/help/article/catalog-product-parameters))
* idealo (CSV, [idealo CSV specification](https://idealo.github.io/csv-importer/en/csv))
* PriceRunner (XML, [PriceRunner product feed](https://www.pricerunner.com/info/getting-started))

Every feed, the free Google feed included, gets rules that choose its products (categories and tags to include or leave out, a price range), and a static feed can be written again every hour or every day with WP-Cron. You can give each WooCommerce category its Google product category ID once; the Google and Meta feeds then write it for every product of that category. Google's taxonomy file is not bundled: the screen links to Google's own list.

It also lets the Google News sitemap list the post types and categories you choose and give each language its own publication name. Google's news sitemap documentation has no keywords or stock tickers, so the plugin writes none.

Settings only you know, such as the delivery time, the shipping cost or the condition of your products, are asked on the feed form; anything the store does not have stays empty. The free version does not lock or limit any of its features, and it never shows offers on the dashboard: the plugin mentions the premium plan only on its own screens.

= Removed in 2.0.0 =

Version 1.x offered feeds for many platforms. The feeds for platforms that do not import a product file from an address in that layout, or whose specification could not be confirmed, were removed: eBay, Shopify, Trendyol, N11, Hepsiburada, Walmart Marketplace, Rakuten, Cdiscount, bol.com, Allegro, Target Plus, ManoMano, Kaufland, Akakçe, Cimri and Amazon Advertising. Their saved addresses answer 410 Gone. The Google Ads and Microsoft Ads feeds became Google feeds of products in stock and keep their addresses. The Facebook Catalog, Meta Ads and TikTok Ads feeds of the 1.x premium plan became the Meta and TikTok catalog feeds of the premium package; they keep their addresses, which answer 404 Not Found while the premium module is not active.

= Technical notes =

* WordPress 5.6 or later, PHP 7.4 or later; translation ready, with 10 languages in the package: Arabic, Dutch, French, German, Italian, Japanese, Brazilian Portuguese, Russian, Spanish and Turkish
* Every admin action checks the capability and a nonce; sitemap addresses are answered only for saved sitemaps
* Bundled library: the Freemius SDK 2.13.4 for the premium plan. The admin screens use the WordPress admin styles and Dashicons, with no CSS framework and no icon font

== Installation ==

1. Upload the plugin to the `/wp-content/plugins/cultdevops-xml-sitemap-generator` directory, or install it from Plugins > Add New in WordPress.
2. Activate the plugin through the Plugins screen. On a multisite network you can activate it for the whole network or for single sites.
3. Open CultDevOps XML Sitemap Generator in the admin menu. Freemius may show an opt-in screen first: choose Skip or Allow & Continue. The plugin works the same either way; see External services for what each choice sends.
4. On a new site, click Create the recommended sitemaps on the home screen. To create a sitemap yourself, open General, click Configure on a card, enter a File Name and click Generate Sitemap.
5. Open Settings: the box Sitemap index shows the address to submit to Google Search Console and Bing Webmaster Tools.
6. For a product feed, install WooCommerce and open Product Feeds. Add the address of the feed in Google Merchant Center as a scheduled fetch.

The Help & FAQ screen of the plugin (CultDevOps XML Sitemap Generator > Help & FAQ) repeats these steps with more detail, explains every sitemap type and setting, and lists the common problems.

== Frequently Asked Questions ==

= What is an XML sitemap? =

A file that lists the addresses of the pages of your site, in the XML format of the [sitemaps.org protocol](https://www.sitemaps.org/protocol.html), so that search engines find them more easily. It can also say when a page last changed. Search engines read it when they visit your site or when you submit it.

= Which content goes into a sitemap? =

Only published content without a password. Drafts, scheduled, pending and private content never appear, nor do posts excluded on their edit screen or marked noindex by an SEO plugin, and dates are written in UTC. Which posts, pages, archives, images, videos or products a sitemap lists depends on its type; **Sitemap types** on the **Help & FAQ** screen tells what each one contains and leaves out. Every public custom post type with pages of its own, such as WooCommerce products, has a sitemap type of its own.

= Which sitemaps should I create first? =

On a new site, click **Create the recommended sitemaps** on the home screen of the plugin. It creates dynamic sitemaps of your posts, pages, public custom post types, categories and images, and the sitemap index that lists them; submit that one address to search engines. Add tags, custom taxonomies, videos or Google News on the **General** screen when your site has that content.

= How do I keep a post or a page out of the sitemaps? =

Open the post, page or entry of a custom post type in the editor. In the sidebar, the box **XML Sitemaps** has the checkbox **Exclude from sitemaps**: tick it and update the post. It works in the block editor and in the classic editor, for every user who may edit that post, and the sitemaps leave the post out at once. Posts that Yoast SEO, Rank Math, All in One SEO or SEOPress marks noindex are left out by themselves while that plugin is active.

= Will a sitemap improve my rankings? =

No. A sitemap does not make a page rank higher; it helps search engines find your pages and learn when they changed. Google says that it does not guarantee that the pages are crawled and indexed ([overview](https://developers.google.com/search/docs/crawling-indexing/sitemaps/overview)). It helps most on new sites, on large sites and on pages that few other pages link to. Google also ignores the priority and changefreq values of a sitemap, and uses the last modified date only when it is consistently accurate ([build a sitemap](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap)).

= Where do I find the address of my sitemaps? =

Open **Sitemaps** in the admin menu: the column **Sitemap URL** shows the address of every sitemap and feed. The address of the sitemap index is under **Settings**, in the box **Sitemap index**. You can also read it in robots.txt.

= Why does my sitemap look like a table in the browser? =

Each sitemap and the sitemap index link to a stylesheet (XSL) that your site serves at `/?cultxmsi_sitemap=xsl`. A browser that applies XSL shows the sitemap as a table with each address, its number of images (and videos, or the title of a news article) and the date of its last change, in the language and direction of your site. Search engines read the XML itself and ignore the stylesheet; nothing is loaded from another server. A browser without XSL shows the plain XML, which is the same sitemap.

= Should I turn off the WordPress core sitemap? =

Not necessarily. Both can run side by side. The core sitemap at wp-sitemap.xml lists every public post type, taxonomy and the authors by itself, while this plugin lists what you created, so turning it off can remove content from the sitemaps that search engines see. Turn it off with **Turn off the WordPress core sitemap (wp-sitemap.xml)** only when the sitemaps of this plugin, or those of an SEO plugin, cover everything you want listed.

= My SEO plugin already creates a sitemap. Do I need this one? =

For ordinary posts and pages, one sitemap is enough: use either the one of the SEO plugin or the one of this plugin, and do not submit both. This plugin adds sitemap types of its own (images, videos, Google News and custom taxonomies) and a product feed for Google Merchant Center. See the entry about SEO plugins under **Troubleshooting** on the **Help & FAQ** screen for how to keep one source.

= How often is a sitemap updated? =

A dynamic sitemap is built when it is first requested and kept for 12 hours. It is renewed at once when you save or delete public content, change a category or tag, change the permalink structure or the site title, change a WooCommerce product or its stock, or create, replace or delete a sitemap. A News sitemap is kept for one hour. A static sitemap changes when you generate it again, and a minute after a post it lists is unpublished, trashed, protected with a password or excluded, so the file stops showing it. The response lets browsers and proxies keep a copy for one hour.

= What is the difference between a static and a dynamic sitemap? =

A dynamic sitemap is saved as a record and built from your content when it is requested; it follows your content and long ones are split into pages. A static sitemap is written once as a file to `/uploads/cultxmsi/` in the uploads folder, so the web server sends it without WordPress, and it is one file with no pages that changes only when you generate it again or when a post it lists leaves the site. Google documents that a sitemap file affects only the addresses below its own folder, unless you submit it in Search Console ([build a sitemap](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap)). A static sitemap lives in the uploads folder, so submit it in Search Console, or prefer a dynamic sitemap, which lives at the root of your site.

= How many URLs can a sitemap hold? =

A sitemap may hold 50,000 URLs and 50 MB uncompressed ([sitemaps.org protocol](https://www.sitemaps.org/protocol.html)). The field **URL Count** accepts up to 50.000. A dynamic general sitemap with more than 1.000 URLs is split into pages: its address then shows a sitemap index that lists the pages, and each page is the same address with `?cultxmsi_page=2` and the page number. A News sitemap holds 1,000 URLs at most, and a static sitemap is one file. The plugin stops adding URLs before a document would pass the size limit.

= What changed in version 2.0.0? =

The count in an address is ignored and the size comes from the saved sitemap, up to 50,000 URLs. Long dynamic sitemaps are split into pages of 1,000 URLs. Unknown names and .csv addresses answer 404. Without WooCommerce the product feeds stay empty and a notice shows. Prices are in the store currency without conversion, and the barcode (GTIN) comes only from the product data. Sitemaps list only published content without a password, with dates in UTC. The News sitemap covers the last 48 hours. Images come only from your own domain. Videos are YouTube, Vimeo, Dailymotion and video files that have a real thumbnail. A sitemap with nothing to list, such as Images on a site without images, answers 404 and stays out of the sitemap index, because the sitemap protocol has no empty sitemap. Addresses of version 1.x are redirected. On a multilingual site, a sitemap without a language chosen lists every language, with hreflang links. New: the sitemap index, the robots.txt line, the switch for the core sitemap and the option to delete all data. Every sitemap type is free, custom taxonomies included. Product feeds are on one screen: the Google Merchant Center feed, which Microsoft Merchant Center reads too, with the option to list only products in stock; the Google Ads and Microsoft Ads feeds became Google feeds. The feeds that no platform imports from an address in their layout were removed, and their addresses answer 410 Gone.

= I am upgrading from version 1.x. Will my sitemap addresses break? =

No sitemap you saved is lost. Dynamic sitemaps get their new short address, and an address of 1.x such as ?sitemap=general&filename=posts is redirected to it with a 301. Static files stay where version 1.x wrote them and keep their address. The empty "Test Record" entries that version 1.x saved with every sitemap are removed once. The CSV format and the count in an address are gone; give search engines and marketplaces the new address, which you find under **Sitemaps**. Saved Google Ads and Microsoft Ads feeds keep their address and become Google feeds of products in stock. A saved feed that version 2.0.0 removed stays in the list with an explanation, and its address answers 410 Gone.

= What happens to my data if I deactivate or delete the plugin? =

Deactivating keeps everything, but the addresses of dynamic sitemaps answer 404 while the plugin is inactive, because the plugin builds them. Static files stay and keep working. Deleting the plugin removes the cached documents (the folder cultxmsi-cache in the uploads folder) on every site. By default it keeps your saved sitemaps, their static files and your settings, so a reinstall finds them again. If **Delete all data when the plugin is deleted** was on before you deleted the plugin, they are removed too, on every site of a network, together with the folder cultxmsi in the uploads folder and the choice Exclude from sitemaps of each post.

= Does the plugin work on multisite? =

Yes. You can activate it for the whole network or for single sites; every site of a network activation is prepared, and a site created later is prepared when it is created (on a large network each site prepares itself on its first visit). Saved sitemaps, settings, the robots.txt line and the sitemap index belong to each site, so create the sitemaps on every site. There is no network admin screen.

= Does the plugin work with Polylang and WPML? =

Yes, both are detected. A **Language** field appears on the **General** screen. A sitemap can hold one language, or all of them; posts, pages and archive pages with published translations get hreflang links, and every address comes from the language plugin. Other multilingual plugins are not read.

= Do I need WooCommerce? =

Only for the product feeds of the **Product Feeds** screen. The general sitemaps for search engines need nothing but WordPress. Without WooCommerce the product feeds stay empty and the screen says so; the plugin never invents products or prices.

= Which platforms read the product feed? =

The free feed follows Google's product data specification ([Merchant Center Help](https://support.google.com/merchants/answer/7052112)): add its address in Google Merchant Center as a scheduled fetch. Microsoft Merchant Center accepts the same Google feed file ([Microsoft Advertising Help](https://help.ads.microsoft.com/apex/index/3/en/51110)), so one feed serves both, and Google Ads shopping campaigns use the products of Merchant Center. The premium plan adds feeds in the formats that these channels publish: [Meta (Facebook, Instagram)](https://developers.facebook.com/docs/marketing-api/catalog/reference), [TikTok](https://ads.tiktok.com/help/article/catalog-product-parameters), [idealo](https://idealo.github.io/csv-importer/en/csv) and [PriceRunner](https://www.pricerunner.com/info/getting-started). Marketplaces that take products only through their own seller interface or API are not served by a feed address.

= What does the Google feed quality report show? =

After a Google feed is built, the **Product Feeds** screen counts its products without a GTIN (barcode), a brand, an image or a Google product category, and the published products that have no price, which no feed lists. **Show these products** opens the WooCommerce product list with just those products, so you can fix them. The report comes from the last build of the feed, so the screen loads without reading your products; **Check the products again** builds the feed anew. It also says whether the prices include VAT: Merchant Center asks for prices with VAT outside the United States and Canada, and without tax in those two countries ([Merchant Center Help: price](https://support.google.com/merchants/answer/6324371)). The feed follows the country of your store; with WooCommerce taxes off, it writes your prices as you entered them.

= Does the plugin send my content to another server? =

No. The sitemaps and feeds are built on your server and served from your site, and the code that builds them makes no request to another server. The addresses inside them point to your own site; the only other addresses are the YouTube, Vimeo and Dailymotion pages and thumbnails of videos that you embedded yourself. Search engines and marketplaces read them from your site. The Freemius SDK is a separate case, described in the entry about Freemius.

= What does Premium add? =

Every sitemap type of the plugin is free: posts, pages, custom post types, categories, tags, custom taxonomies, images, videos and Google News, with the sitemap index, the robots.txt line, the browser view and a sitemap per language. So are "Exclude from sitemaps", the noindex of SEO plugins, the Google Merchant Center feed and its quality report. The premium plan is a separate package from Freemius that adds product feeds for [Meta (Facebook, Instagram)](https://developers.facebook.com/docs/marketing-api/catalog/reference), [TikTok](https://ads.tiktok.com/help/article/catalog-product-parameters), [idealo](https://idealo.github.io/csv-importer/en/csv) and [PriceRunner](https://www.pricerunner.com/info/getting-started), each with the field names of the channel's own specification, on the same **Product Feeds** screen; rules for every feed (categories, tags, a price range) and hourly or daily rebuilds of static feeds; a Google product category for each WooCommerce category, set once; and Google News settings: the post types and categories of the News sitemap, and a publication name per language. A field the store does not have stays empty, and settings that only you know, such as the delivery time or the condition of your products, are asked on the form. The premium plan locks nothing in the free version.

= What is Freemius, and do I have to connect an account? =

The plugin includes the Freemius SDK, which sells and licenses the premium plan. You do not have to connect an account: every feature of the free version works without it. Freemius may show an opt-in screen on the first visit; **Skip** sends nothing to Freemius and the plugin works the same. If you choose **Allow & Continue**, Freemius receives your name and email address, the address, title and language of the site, and the versions of WordPress, PHP, the plugin and the SDK (its screen lists what it collects, and [the Freemius privacy policy](https://freemius.com/privacy/) explains how it is used). The **Upgrade** page loads the plans and prices from Freemius. The WordPress.org version is updated only by WordPress.org.

== Screenshots ==

1. The home screen of a new site with the button Create the recommended sitemaps.
2. General sitemaps: one card for each type (posts, pages, custom post types, categories, tags, images, videos and Google News).
3. The form of a sitemap: file name, dynamic or static, language and number of URLs.
4. Generated sitemaps, with the address of each sitemap and its actions.
5. A sitemap opened in the browser as a table of addresses, image counts and dates.
6. Product Feeds: the Google Merchant Center feed and its quality report.
7. The box Exclude from sitemaps on the edit screen of a post.

== External services ==

The sitemaps and feeds are built on your server and served from your site. The code of the plugin makes no request to a search engine, a marketplace or any other server: search engines and shopping platforms fetch your sitemaps and feeds themselves. The one service the plugin can contact is Freemius.

**Freemius** (https://api.freemius.com, https://wp.freemius.com and https://checkout.freemius.com)

The plugin includes the Freemius SDK (version 2.13.4), which sells the premium plan and manages its licenses. What it sends was measured on a new installation of this version, with every outgoing request recorded:

* Before you choose anything on the Freemius opt-in screen, and if you choose Skip: nothing is sent to Freemius, from your server or from your browser. The plugin works the same.
* If you choose Allow & Continue: your browser sends the data listed on that screen to wp.freemius.com: the first and last name and email address of your WordPress user, the site address, title and language, the WordPress, PHP, plugin and SDK versions, the slug and ID of the plugin, an anonymous site identifier, whether the site is a local installation, and your choice about usage tracking. After that the SDK reports later events (activation, deactivation, uninstall) and keeps this data in sync with a daily WP-Cron task. You can opt out later on the Account screen of the plugin.
* If you open Upgrade: your server asks api.freemius.com for the plans and prices of the plugin. The request contains the plugin ID and the SDK version and no data about your site; Freemius receives the IP address of your server. The page itself is part of the plugin, not an iframe. Once the plans are shown, your browser loads the Freemius checkout script from checkout.freemius.com. The pricing script of the SDK would also load Google Analytics; the plugin stops that script on this page, so nothing goes to Google Analytics.
* If you choose a plan there: your browser opens the Freemius checkout at checkout.freemius.com with the details needed for the purchase and the license: the name and email address of your WordPress user and the site address.
* If you deactivate the plugin: Freemius may ask why. A reason you submit is kept on your site and sent to api.freemius.com when the plugin is deleted, with an anonymous identifier (with your details only if you untick the anonymous option in that form). Nothing is sent if you skip the form.
* The version from WordPress.org is updated only by WordPress.org: it contains no Freemius update code.
* Why: to sell the premium plan and manage its licenses.
* Terms of Service: https://freemius.com/terms/
* Privacy Policy: https://freemius.com/privacy/

The sitemap browser view uses a stylesheet that your site serves itself, and the admin screens load their scripts, styles and fonts from the plugin folder; nothing is loaded from another server. The only other addresses in the output are the YouTube, Vimeo and Dailymotion pages and thumbnails of videos that you embedded yourself.

== Privacy ==

The plugin stores your settings and the sitemaps you saved (name, type, options and the address of a static file) in your own database, static sitemap files in the folder cultxmsi of your uploads folder, and cached copies of the sitemaps in the folder cultxmsi-cache of your uploads folder (in your database when that folder cannot be written). A post you exclude gets a custom field, and a user who closes a notice gets a user setting. It collects nothing about your visitors, sets no cookies and shows nothing on the public side of your site apart from the sitemaps and feeds themselves, which list only published content without a password. It does not add text to the privacy policy of your site.

What leaves your site is described under External services: only the Freemius SDK contacts a server, and only after one of the choices described there. Deleting the plugin removes the cached documents and, if you turned on Delete all data when the plugin is deleted, your saved sitemaps, settings, static files and the Exclude from sitemaps choices. Records kept by Freemius are not touched.

== Changelog ==

= 2.0.0 =
* Changed: the admin screens have the design that all CultDevOps plugins share: a header with the plugin name, the plan and a link to Help & FAQ, cards and dialogs that close with Escape. Bootstrap and Font Awesome are no longer loaded.
* Security: the unauthenticated count and marketplace parameters of sitemap addresses are gone; the size comes from the saved sitemap. Every admin action checks the capability, then a nonce; input is unslashed and sanitized; output is escaped.
* Fixed: a product feed no longer invents data. Without WooCommerce the feeds stay empty and a notice shows; sample products, random prices, made-up barcodes, currency conversion and third-party addresses are gone. The GTIN comes only from the product data.
* Changed: sitemaps list only published content without a password, with dates in UTC. The News sitemap covers the last 48 hours. Images come only from your own domain. Videos are YouTube, Vimeo, Dailymotion and video files that have a real thumbnail.
* Changed: a sitemap with nothing to list, such as Images on a site without images, answers 404 and stays out of the sitemap index, because the sitemap protocol has no empty sitemap. Unknown names and .csv addresses answer 404.
* Changed: addresses of version 1.x are redirected with a 301. Static files keep their address. The empty "Test Record" entries of version 1.x are removed once.
* Changed: every sitemap type is free: images, videos, Google News and custom taxonomies are no longer locked, and the locked cards and the Premium Feature Required window are gone.
* Removed: the feeds for eBay, Shopify, Trendyol, N11, Hepsiburada, Walmart Marketplace, Rakuten, Cdiscount, bol.com, Allegro, Target Plus, ManoMano, Kaufland, Akakçe, Cimri and Amazon Advertising, which no platform imports from an address in that layout. Their saved addresses answer 410 Gone and the list explains why.
* Changed: the Google Ads and Microsoft Ads feeds became Google Shopping feeds of products in stock (Google Merchant Center, which Microsoft Merchant Center can import). They keep their addresses. The three product feed screens became one Product Feeds screen.
* Changed: prices in the Google feed follow Merchant Center: with VAT for the country of your store, without tax in the United States and Canada.
* Changed (premium package): the Facebook Catalog, Meta Ads and TikTok Ads feeds of the 1.x premium plan became the Meta and TikTok catalog feeds of the premium package, and the idealo and PriceRunner feeds follow the specifications of the two platforms. The idealo feed is a CSV file now: its address ends in .csv instead of .xml. If you gave idealo the old address, enter the new one there.
* New: the button Create the recommended sitemaps, a sitemap index, a "Sitemap:" line in robots.txt, a switch for the WordPress core sitemap, sitemaps for public custom post types, and the option to delete all data when the plugin is deleted.
* New: the box Exclude from sitemaps on the edit screen, and noindex of Yoast SEO, Rank Math, All in One SEO and SEOPress respected.
* New: a browser view for sitemaps (XSL), a sitemap per language with hreflang links for Polylang and WPML, multisite support for network activation and new sites, and dynamic sitemaps that are cached and split into pages of 1,000 URLs.
* New: a quality report for the Google feed with links to the products to fix.
* New: Help & FAQ screen, and 10 languages: Arabic, Dutch, French, German, Italian, Japanese, Brazilian Portuguese, Russian, Spanish and Turkish.
* New (premium package): feed rules, scheduled rebuilds of static feeds, Google product category IDs for WooCommerce categories, and Google News settings (post types, categories, a publication name per language).
* Changed: cached sitemaps are files in the folder cultxmsi-cache of the uploads folder, one per sitemap page, replaced in place: they no longer fill the database. Only one request builds a sitemap at a time; the others get the previous copy meanwhile. Responses send Last-Modified and answer 304 Not Modified.
* Changed: sitemap queries use the indexes of the posts table. On a test site with 40,000 posts a page of 1,000 URLs is built in about 67 milliseconds instead of 6.5 to 7.2 seconds, and pages list posts newest first by publication date. Images and Videos count the posts that hold an image or a video, so no page reads the posts of the pages before it.
* Changed: the robots.txt line names the sitemap index as soon as a general sitemap is saved; robots.txt builds nothing.
* Changed: static sitemaps and feeds are written again a minute after a post they list is unpublished, trashed, protected with a password or excluded, or a product is hidden, so the file stops showing it.
* Changed: the URL Count column and Total URLs on the Sitemaps screen show how many addresses each sitemap lists (for a product feed, the products of its last build), not the URL Count setting. Deleting a sitemap asks in a dialog of the plugin.
* Security: idealo CSV fields that start like a spreadsheet formula are written as text. The browser view links http and https addresses only, and static files are read, written and deleted only under the plugin's own file names.
* Changed: Freemius SDK 2.13.4. It sends nothing before you opt in, its plans page is part of the plugin instead of an iframe and loads no Google Analytics, and the opt-in screen has a Skip button.
* Changed: WordPress 5.6 or later and PHP 7.4 or later are required; the plugin was tested up to WordPress 7.1.

= 1.x =
* Earlier releases, replaced by 2.0.0.

== Upgrade Notice ==

= 2.0.0 =
Security fixes. 16 platform feeds were removed and answer 410 Gone. The idealo feed address ends in .csv now: update it at idealo. Empty sitemaps answer 404. Needs WordPress 5.6 and PHP 7.4.
