The SEO Framework

★︎ My account
  • Extensions
  • Documentation
  • Pricing
  1. Home
  2. Plugin Changelog
  3. 4.1.2

4.1.2

November 27, 2020 by Sybre Waaijer
Updated November 30, 2020

In this minor update, we ensured compatibility with PHP 8 and WP 5.6. TSF now also fully integrates with WordPress Core Sitemaps, which you can configure via the SEO settings. If you decide to keep using TSF’s optimized sitemap, you can now enjoy prerendering, DoS protection, and full Polylang integration. Lastly, you’ll find various accessibility improvements, and we fixed about a dozen bugs.

We included a single-line self-destructing notification about our Cyber Monday sale. We hope you’ll opt to support our continuous efforts. But we’re also kindly asking you to understand we must promote our premium extensions to make TSF possible. We are apprehensive about any embedded advertising and self-promotion in the plugin, so we must rely on notifications until a better system is available in WordPress.

Detailed log

> View code changes.
> View closed issues.

For everyone

  • Added:
    • TSF is now compatible with PHP 8.0.0. This ensures compatibility with PHP 8.0.0 when it becomes generally available, but changes may be provisionary.
      • Although a new PHP version is exciting, we advise against updating until the dust has settled. PHP 8.0 brings many deprecations and breaking changes, and those will probably cause many issues on your website for months to come, until all your active plugins and theme have been updated accordingly. There’s also no measurable performance benefit using PHP 8.0 over PHP 7.4 for WordPress.
    • When Polylang is active, you can access any sitemap language via the lang query — even when Polylang settings are configured otherwise. This helps mitigate any sporadic issues you might still encounter.
      • For example (es for Spanish sitemap): https://example.com/sitemap.xml?lang=es.
      • Another example (es for Spanish sitemap): https://en-gb.example.com/sitemap.xml?lang=es.
    • We now suggest a free extension in-line at the title settings when necessary theme support for titles is found missing. This message is only visible to users that can install plugins and should help lower our ever-increasing support burden.
      • You can add define( 'TSF_DISABLE_SUGGESTIONS', true ) to your wp-config.php file to prevent any suggestions showing up in your dashboard, even some that are seen as advertisement.
    • You can now enable sitemap prerendering. This helps mitigate timeout issues when the sitemap takes longer than a minute to render.
      • Prerendering only works when:
        1. you use The SEO Framework’s optimized sitemap;
        2. you enable the sitemap’s transient caching via the SEO Settings’ “General Settings > Performance” options;
        3. and when pinging via cron is enabled.
      • When you inspect the source of the sitemap, you can now see whether it’s prerendered via cron or generated via a manual request on line 5:
        • <-- Sitemap is generated/prerendered on ... -->.
    • When the sitemap’s caching is enabled, and when no sitemap is generated yet whilst being called multiple times in a row (by anybody), subsequent requests are now blocked with a 503 error until (whichever comes first):
      • the sitemap is fully generated;
      • or after PHP’s configuration max_execution_time seconds (or 3 minutes, whichever is sooner).
      • Note: This feature prevents overloading the server when the sitemap is generated.
      • Note: When using a translation plugin, this feature only prerenders one (most likely the main language’s) sitemap.
    • TSF now integrates with WordPress 5.5 Core sitemaps. These sitemaps become active when you disable TSF’s “optimized” sitemap.
      • The following options now affect Core Sitemaps:
        • Sitemap Query Limit.
        • Sitemap Hinting.
        • Timestamps Settings.
        • Ping Settings.
          • Excluding the new prerendering feature.
      • Core sitemaps’ entries are now removed when they’re not indexable.
        • Since we do not catalog the ‘indexables’, you may find that some sitemaps will return a 404-response because of this. You can safely ignore this issue while we await a proper solution.
        • We achieved this through unorthodox means — by reassigning the sitemap provider classes, extending the original classes yet overwriting the WP Core URL list function. This can cause compatibility issues in the long haul. However, we will change this when a proper workaround is implemented.
      • Core sitemaps’ user-sitemap is now hidden when author pages are marked with noindex via TSF’s global robots meta settings.
  • Improved:
    • UI cohesiveness:
      • Note: When you use filters, these changes might not be fully cohesive.
      • Note: We did not apply these changes to the quick-edit screens, since the interface is much too intertwined with WordPress’s, plausibly causing confusion.
      • Glossary: protected means “password protected”. WILL means definitely. MAY means depending on other factors interfering unlikely. MIGHT means depending on other factors interfering likely.
      • Page(/post) edit screen:
        • When you change a public page to private or protected, you’ll now notice before you save the page that:
          • the description placeholder WILL now become hidden;
          • the canonical URL placeholder WILL now become hidden;
          • the default indexing state MIGHT change from ‘index’ to ‘noindex’.
        • When you change a private or protected page to public, you’ll now notice before you save the page that:
          • the canonical URL placeholder MAY now become visible;
          • the default indexing state MAY change from ‘noindex’ to ‘index’.
          • Note: We cannot generate a description before you edit a private or protected post and set the post to public. We consider this an edge-case not worth looking into right now because we’ll have to affect the underlying description API.
          • Note: When using the Classic Editor, we cannot dynamically fetch the provisioned canonical URL if you change the slug.
        • When you set a page’s indexing state to ‘noindex’, you’ll now notice before you save the page that:
          • the canonical URL placeholder WILL now become hidden.
        • When you set a page’s indexing state to ‘index’, you’ll now notice before you save the page that:
          • the canonical URL placeholder MAY now become visible.
      • Term edit screen:
        • When you set a term’s indexing state to ‘noindex’, you’ll now notice before you save the term that:
          • the canonical URL placeholder WILL now become hidden.
        • When you set a term’s indexing state to ‘index’, you’ll now notice before you save the term that:
          • the canonical URL placeholder MAY now become visible.
    • Sitemap UI:
      • We now clearly refer to “optimized sitemap” whenever an option (group) only impacts TSF’s sitemap.
    • Performance:
      • Disabling the “Output multiple Open Graph image tags?” option will now improve front-end performance when a custom social image or a featured image is registered for the post.
  • Fixed:
    • Resolved an issue where the notice dismissal button isn’t spanned correctly when administrative script concatenation is turned off.
    • Resolved an issue where the default robots indexing state selection wasn’t correctly annotated when you edit a private or protected post.
    • Resolved an issue where the quick-and bulk-edit options weren’t correctly styled after disabling the SEO Bar in overview tables.
    • Resolved an issue where filtered-in query strings were removed from paginated URLs. Props hivecl.
    • Resolved an issue where emojis were converted in the reference title to image-elements by Twemoji via wpEmoji’s observer on tags and categories. Props bjarne.
    • Resolved an issue where the title settings’ example page title output could be empty when only invalid tags were supplied to the latest post’s title.
    • Resolved an issue where the Sitelinks search box URL wasn’t properly slashed based on custom permalink settings.
    • Resolved an issue where archive translation strings from WP 5.5 weren’t properly integrated. Props teropaajoki.
    • Polylang related:
      • Resolved an issue where sitemaps didn’t output reliably on some subdomains or subdirectories.
      • Resolved an issue where sitemap stylesheets didn’t affect the endpoint’s URL correctly to abide by CORS.
      • Resolved an issue where Polylang didn’t correctly find the sitemap’s language when using cookies.
      • Resolved an issue where non-translatable post types were excluded from the sitemap. They’re now solely appended to the primary language’s sitemap.
  • Other:
    • The “Priority Settings” for the sitemaps are now hidden when disabled.
      • This feature is planned to be removed entirely in TSF v5.0.
    • Added a “learn more” link to our KB at the sitemap settings.
    • This update is required for the upcoming Extension Manager v2.5.

For translators

  • Added:
    • New translation strings are available.
  • Updated:
    • POT translation file.

For developers

  • Database notes:
    • This plugin now uses database version 4120.
  • Option notes:
    • For index autodescription-site-settings (constant THE_SEO_FRAMEWORK_SITE_OPTIONS):
      • Added:
        • ping_use_cron_prerender, integer 1 or 0.
      • Changed:
        • multi_og_image now defaults to 0, instead of 1, for new installations.
          • We made this change to reduce needless processing power.
          • This feature is also confusing to some users, since it can cause unexpected (from the user’s standpoint) sharing behavior on Facebook.
          • Current TSF installations are unaffected.
  • Action notes:
    • Added:
      • tsf_sitemap_cron_hook_before, runs just before pinging.
      • tsf_sitemap_cron_hook_after, runs right after pinging.
      • tsf_sitemap_cron_hook_retry, scheduled when first ping fails due to sitemap lock.
      • the_seo_framework_before_redirect, runs right before redirecting.
    • Changed:
      • the_seo_framework_sitemap_transient_cleared: Added index ping_use_cron_prerender to the first parameter.
  • Filter notes:
    • Added:
      • the_seo_framework_sitemap_base_path, used internally to override Polylang’s cookie-based home path changing behavior.
    • Other:
      • The internal use of the_seo_framework_sitemap_path_prefix for Polylang compatibility now runs at priority 99, instead of 9.
        • This eases intercompatibility between plugins, which might set a custom prefix before we apply the Polylang compatibility layer.
  • File notes:
    • inc\traits\core\overload.trait.php is no longer available.
  • Trait notes:
    • Removed:
      • These traits contained magic methods with their visibility changed for added security. This is no longer legal in PHP 8.0. The added security was only beneficial if we had made oversights in our programming.
        • The_SEO_Framework\Traits\Enclose_Stray_Private
        • The_SEO_Framework\Traits\Enclose_Core_Final
  • Object notes:
    • For façade object the_seo_framework():
      • Added:
        • use_core_sitemaps(), tells whether WP 5.5 Core Sitemaps are used.
      • Changed:
        • get_social_image_uploader_form() no longer adds a redundant title to the selection button.
        • generate_dismissible_notice():
          1. No longer invokes the script loader during AJAX-requests.
          2. Now accepts empty messages so that AJAX-invoked generators can grab a notice wrapper.
          3. Added the $inline parameter.
          4. Now enqueues scripts in the footer so that templates won’t spam the header.
        • do_dismissible_notice() added the $inline parameter.
        • remove_pagination_from_url() now correctly reappends query when pagination isn’t removed.
        • get_paged_urls():
          1. Added back memoization.
          2. Reduced needless canonical URL generation when it wouldn’t be processed anyway.
        • generate_cache_key_by_type() now accepts $type sitemap_lock.
        • init_cron_actions():
          1. Added hook for sitemap prerender.
          2. Added hook for ping retry.
        • output_js_title_elements(), output_js_title_data(), output_js_description_elements(), and output_js_description_data():
          • Now prevents wp-emoji.js parsing the references and data.
        • get_image_details_from_cache() Added a $single parameter, which helps reduce processing power required.
          • This parameter might get deprecated when we start supporting PHP 7.1+ only. This acts as a workaround for WP moving forward too slowly.
          • In light of this, these methods now forward the multi_og_image option to the generator—this is a temporary workaround.
          • get_image_from_cache()
          • twitter_image()
          • og_image()
        • get_ld_json_website() now properly slashes the search URL.
    • For object \The_SEO_Framework\Builders\CoreSitemaps\Main:
      • This is a new object.
        • Extends object \The_SEO_Framework\Builders\Sitemap.
      • Added:
        • get_instance()
    • For object \The_SEO_Framework\Builders\CoreSitemaps\Posts:
      • This is a new object.
        • Extends object \WP_Sitemaps_Posts.
        • Overrides get_url_list()
    • For object \The_SEO_Framework\Builders\CoreSitemaps\Taxonomies:
      • This is a new object.
        • Extends object \WP_Sitemaps_Taxonomies.
        • Overrides get_url_list()
    • For object \The_SEO_Framework\Bridges\Ping:
      • Added:
        • engage_pinging_retry_cron(), engages another pinging cron hook.
        • retry_ping_search_engines(), hooked into the retry cron hook, retries pinging.
      • Changed:
        • engage_pinging_cron() now registers before and after cron hooks. They should run subsequential when successful.
    • For object \The_SEO_Framework\Bridges\Scripts:
      • Changed:
        • get_media_scripts() removed redundant button titles.
    • For object \The_SEO_Framework\Bridges\Sitemap:
      • Added:
        • sitemap_cache_enabled(), tells whether sitemap caching is enabled by the user.
        • output_locked_header(), prevents rendering of the sitemap whilst it’s still generating. Tells the visitor the maximum timeout.
          • The sitemap can unlock before this timeout expires.
        • lock_sitemap(), locks a sitemap for regeneration.
        • unlock_sitemap(), unlocks a sitemap for regeneration.
        • is_sitemap_locked(), tells whether a sitemap is locked.
      • Changed:
        • get_expected_sitemap_endpoint_url() no longer passes the path to the home_url() function.
        • output_base_sitemap() is now static.
        • output_stylesheet() is now static.
    • For object \The_SEO_Framework\Builders\Scripts:
      • Added:
        • footer_enqueue(), this allows you to delay outputting scripts.
    • For object \The_SEO_Framework\Builders\Sitemap:
      • Added:
        • generate_sitemap(), a semi-abstract method that allows you to generate the sitemap.
    • For object \The_SEO_Framework\Builders\Sitemap_Base:
      • Added:
        • $base_is_regenerated, boolean for whether the sitemap is done regenerating.
        • $base_is_prerendering, boolean for whether the sitemap is prerendering in the current request.
        • base_get_sitemap_store_key(), returns the default sitemap transient name used since aeons.
        • prerender_sitemap(), generates and stores the sitemap in transient cache.
        • generate_sitemap(), an abstracted method to generate and store the sitemap in transient cache.
  • JavaScript notes:
    • For object window.tsf:
      • Added:
        • triggerNoticeReset(), this allows you to dynamically insert interactive TSF notices, even persistent.
    • For object window.tsfDescription:
      • Added:
        • updateStateOf now listens to part useDefaultDescription.
    • For object window.tsfMedia:
      • Added:
        • resetImageEditorActions(), this allows you to dynamically insert interactive TSF image editors.
  • Fixed:
    • The template loader unsets templates prior to looping over them. This prevents plausible infinite loops where scripts need to be reenqueued.
Filed Under: The SEO Framework Changelog

About Sybre Waaijer

Developer of The SEO Framework plugins.
Twitter  GitHub  WordPress

Looking for something?

Do more with extensions

AMP

View extension
Connect TSF with AMP in just one click.

Articles

View extension
Google News and structured data.

Get Extension Manager

Commercial

The SEO Framework
Trademark of CyberWire B.V.
Leidse Schouw 2
2408 AE Alphen a/d Rijn
The Netherlands
KvK: 83230076
BTW/VAT: NL862781322B01

Twitter  GitHub

Professional

Pricing
About
Support
Press

Rational

Blog
Privacy Policy
Terms and Conditions
Refund Policy

Practical

Documentation
TSF on WordPress
TSF on GitHub
TSFEM on here
TSFEM on GitHub
Feature Highlights

Strict security standards in 2025 › The SEO Framework