Changelog (latest version)
Last updated: 10th May 2016.
- WooCommerce schema.org breadcrumbs.
- Intelligently nested schema.org breadcrumbs.
- Clarified schema.org website name.
- Better Automated Description sentence endings.
- Vibrant character counters for when you need extra visual assistance.
- New Automated Description options.
- New Archive title prefix options.
- Modernized and Smarter SEO bar, with many more conditional checks.
- Many linguistic improvements, with more flow in the SEO Bar.
- Yandex Sitemap pinging support.
- Extended Title Fix extension support.
- Improved performance, more efficient cache key generation.
- New Sitemap Date output options.
- Adaptive WPML URL generation.
- Improved editorial translations.
- Automatic option merging.
- New AJAX integration when adding tags.
- Personalized error handling for developers.
- Over 155 new public functions for developers.
- 24 brand new filters for developers.
- WP Query Admin synchronization for developers.
- Automated setting navigation tabs for developers.
- Default options merging on plugin update, so you don’t have to check out the new features manually with each update. When new features are added which have not yet been registered. These features will now be updated to its default settings. Multisite compatible.
- Archive title prefix options!
- Schema SEO!
- Schema SEO will allow you to enable and disable global Schema.org features.
- LD+Json Schema.org website name and URL header markup on the front-page. This should change the
example.com > category > subcategoryoutput in Google to
Example Site > category > subcategory. See this page for more info.
- Time display options for the sitemap. Now you can select how the time is output. Default “Complete date plus hours, minutes and timezone”.
- Buffer cleaner before the sitemap begins outputting. This makes sure the sitemap can’t be erroneous through other plugin or theme errors.
- New global Automated Description options.
- Removal of the three dots after the description if the excerpt ends with a dot, question mark or exclamation point.
- Removal commas if the excerpt ends with one in the automated description.
- Extra compatibility for when the theme is doing it wrong, for when the Title Fix extension plugin has been used.
- Article Modified Time now also works for WooCommerce products and are treated as Posts.
- Headway compatibility. Done by using one of their SEO plugin detection filters which disables their SEO functionality.
- Runway Framework theme compatibility.
- Yandex sitemap pinging support.
- Yandex Webmasters verification code support.
- Description excerpt detection. Now when an excerpt is filled in, no description additions will be added in front of them.
- Lowered pinging response time to 3s from 5s, to reduce max script time to 12s from 20s on post publish.
- The SEO Bar now has a Double Title check (will appear red). This will make sure that you can see where the copy of SEO data went wrong.
- The SEO Bar now also checks for global category and tag indexing, following and archiving options on the applicable pages.
- The SEO Bar now has breaks in the description at various places, to impact behavior through glances.
- The SEO Bar Indexing notice turns red if Indexing has been enabled, yet the blog isn’t set to public.
- The SEO Bar Following notice turns yellow if Following has been disabled, yet the blog isn’t set to public.
- The SEO Bar Archiving notice turns yellow if Archiving has been enabled, yet the blog isn’t set to public.
- The SEO Bar Categories and Tags Robots options now reflect in the SEO bar.
- The SEO Bar’s description notification word counter now has a filterable minimum word character length which will have a higher tolerance for repeated words that are less than (filterable) 3 characters (5 times instead of 3).
- The SEO Bar will now show an exclamation mark when the Post ID can’t be found. It’s quite nice, and you probably won’t ever see it :(.
index.phpfiles in folders which contain readable files, to prevent indexing of such.
- WooCommerce breadcrumb support!
- Nested post categories now also have a breadcrumb script. Multiple even, when applicable.
- All admin notices are now dismissible.
- Term AJAX handler for the SEO bar, so when you add a new term you can already check its SEO state.
- Small notification in the Feed Settings when the feed is already converted into an excerpt.
- The blog page is now also shown within the Sitemap.
- Front Page pagination robots noindex option. Default off.
- Front Page link relationship option. The Front page now only listens to this option. Default on.
- Color Deficiency options have been added to the character counters. Clicking on them will add extra information.
- The Color Deficiency options have been split into four options: Counter, Counter + Name, Name, Counter inversed.
- Descriptive URL on Title Blogname removal option.
- Title generation cache. It no longer gets generated more than once per page load.
- Feed location URL in the Feed Settings.
- The SEO Bar is now flat and square. Much more modern.
- The SEO Bar’s balloon is now also flat and square.
- The SEO Bar T/D and G letters have a space removed between them to make it a little more appealing on smaller screens.
- The SEO Bar now has a maximum width of 220px instead of 260px.
- Description “good” detection length range has been extended to 137 minimum instead of 145, to eliminate over-optimization.
- When no description can be generated from the content or excerpt, the social description is now completely empty.
- LD+Json markup now uses double quotes instead of single.
- LD+Json Sitelinks Search Box script now excludes the Alternative Name, as it’s optional and non-configurable (yet).
- Short explanatory text on Canonical question mark title within the inpost SEO metabox is displayed rather than the HTML output.
- When a Post ID can’t be found for the SEO Bar, a more elegant notification is displayed.
- Moved SEO Bar before bbPress Reply Created.
- The sitemap, theme doing it right, description and LD+Json transient keys have been invalidated.
- Open Graph plugin detection now only shows a notification, instead of removing OG output as well. These values may be duplicated (although undesired).
- When a Custom Home Page Title Tagline is set, it’s now used for the Title on the description on the home page.
- When no Blog Tagline has been set, it will now return “Untitled”.
twitter:image:srctag has been deprecated, it has been changed into
- Several sentences to have a better English structure to what they do.
- URL generation.
- WPML URL generation, it’s now much more consistent and will now also work with custom language settings. It will now also show the correct URL in admin at all times, moreover, it will with subdomains too.
- WPML shortlink URL now also redirect correctly when visited in special scenarios.
- qTranslate X URL generation, it will now work with all kinds of settings.
- Massively improved URL generation time by adding more layers of cache on often used and also heavy scripts.
- Massively improved LD-json script generation time by adding more layers of cache and exchanging heavy operations for more efficient ones.
- Metabox setting tabs no longer rely on WordPress Core admin navigation tabs.
- Description excerpt generation exceeding words calculation.
- The SEO Bar’s now more reliable in its data.
- The SEO Bar hover balloon translations, “but” now can’t show up twice, and is instead replaced with “and”. E.g. “But the blog isn’t set to public. And there are no posts…”
- The SEO Bar buttons are now converted to placeholder hyperlinks. So screen-readers know they’re clickable.
- The SEO Bar’s text is now easier on the eyes due to added text-shadow.
- The SEO Bar’s hover balloon is now aligned with its bar on Posts and Pages overview and to column in Term overview.
- Translations with multiple variable strings can now safely be translated and switched around.
- The automated description orders are now translatable.
- LD+Json transient is also flushed on change within the SEO Settings page when the home page is a blog.
- Robots tag generation time.
- Removed break (
<br />) closing tag throughout the plugin as we’re not using XHTML in WordPress.
- Sanitation of URLs where query args must be removed is now compatible on any (odd) server configuration.
- Post State “No Search” additions check is now only done on singular pages within the admin dashboard.
- The Term SEO Box is removed if another popular SEO plugin is detected.
- Feed excerpt generation time.
- Sitemap generation time.
- Disabled query caching when fetching posts on the sitemap as it’s a redundant feature at that point.
- Right before the sitemap gets rendered, many filters have been cleaned up to save memory.
- The custom title is now trimmed from whitespace in the Home Page Settings metabox.
- WPMUdev Domain Mapping database values are now all fetched in one query instead of two.
- External SEO plugin detection, it now uses constants to search for when applicable.
- External Sitemap plugin detection, it now uses constants to search for when applicable.
- Settings tabs vertical icon alignment.
- The Home Page settings are now divided with navigation tabs.
- No more accidents: The setting checkbox labels now don’t overflow anymore to the width of its container. This means you have to click on the text for the checkbox to change, rather than also possibly on the whitespace next to it. In the future all checkboxes and radio buttons will obtain this property.
- Reduced the chance of WPMUdev Domain Mapping’s Async CDSSO Script being incorrect due to unorthodox rewrite flushing.
- Added cache key language detection, to build correct descriptions for the right language. This works on WPML, qTranslate X and many other translation plugins.
- Added back Genesis schema.org
<head>markup indicator on the home page.
- Post type support check was run throughout the WordPress admin dashboard, now it only checks if there are actually posts to check.
- WPML query args canonical pagination links.
- Plausible description cache conflict when the home page has been switched from page to blog in the SEO settings page.
- WPML URL base structure check was done wrongfully, the canonical URLs are now fixed for multilingual pages.
- Incorrect title counter length on all posts and pages when the home page title tagline has been removed. This issue was first encountered in version 2.5.0.
- Incorrect description was output on some archives.
- The removal of title additions are now also reflecting its setting on the placeholders within categories and tags.
- Some deprecated functions gave a fatal error or warning, this has been resolved.
- When Reading Settings’ Feed Options are set to summary, the backlink is now still shown when enabled.
- Screen Options showed an SEO column, while there isn’t any in pages, posts and terms.
- When using diacritic characters, like in French, The SEO Bar’s description word counter would be incorrect.
- On WooCommerce product tag search within the dashboard, Products showed the wrong SEO bar.
- On WooCommerce product tag search within the dashboard, Products could show the wrong post SEO state.
- On Touching the SEO bar, the pointer could be misplaced.
- When a category is added, the SEO bar doesn’t show an empty and shifted row anymore.
- Double subdirectory generation in special Site Address URL configurations.
- Link relationship on the second Page was pointing to itself.
- The SEO Bar within Terms had a minor pixel overflow on small screens.
- Unneeded Page navigation confirmation warning when deleting post.
- Global page and paged variables could’ve been overwritten by the theme resulting in a crash. This can’t happen anymore.
- Pinging the Search Engines of sitemap changes now won’t happen on post creation.
- External URLs to a root domain without slash now work correctly in custom 301 redirect.
- Servers that don’t support PCRE will now have 301 redirects parsed correctly.
- Archive rel next/prev pagination links now also work on the Blog Page.
- Second or later archive pages now allow for pagination in the Canonical URL.
- When the Home Page title additions location is set to Right and has a title filled in in the Inpost SEO Box as well as the Home Page Settings and when the Home Page Settings is emptied, the placeholder title location and additions are reversed when no Tagline options are touched.
- WordPress version compare could sometimes return incorrect values when dealing with unstable versions.
- The Canonical URL is now selecting the primary domain when available when using WPMUdev Domain Mapping.
- Blogname cache wasn’t initialized correctly.
- Blog Description cache wasn’t initialized correctly.
- When using subsets of languages, e.g. “nl-NL-formal”, the check no longer falls back to “en_US”, but to “nl_NL”. This affects
- Shortlink URL from Home Page, as it’s quite useless and self referring there.
- Yahoo Pinging option and initiation, as they’ve moved to Bing quite some time ago (oops).
- WPMUdev Avatars support. As WordPress core has taken over this feature and it was unreliable.
- Canonical URL from Search and 404 pages. It yields no value on those pages and might even yield incorrect results.
- Official support for WordPress 3.6 and 3.7. It takes too much time to maintain such backwards compatibility.
- New filters! See Filter Notes below.
- More than 150 new functions to make this plugin more maintainable.
AutoDescription_Coreclass, this class replaced
AutoDescription_Initfrom being the latest class.
AutoDescription_Authorclass (placeholder for upcoming Author update; holding user/author data).
AutoDescription_PostInfoclass (placeholder for upcoming Author update; holding post publish/author meta).
AutoDescription_Queryclass, this class contains queries which use the default WP_Query class, but then extends it to be used in the admin area as well.
AutoDescription_Generate_Title::get_the_real_archive_title()function, which also works in the admin area and has a term object argument and outputs no HTML, effectively speading the whole plugin up on archive pages.
AutoDescription_Detect::current_theme_supports_title_tag()function, returns cached true if theme supports title tag.
AutoDescription_Render::the_url_from_cache()now has a fifth parameter
$paged_plural. Default true.
$argsparameter now accepts the ‘paged_plural’ index. Default true.
- Customized error handlers.
THE_SEO_FRAMEWORK_DISABLE_TRANSIENTSboolean constant listener to disable transients.
$post_idarguments, see Filter notes for more information below.
- Untitled Term Name when using WordPress core archive title filters when returning falsy.
- Debugging now shows memory usage and processing time.
- When debugging is enabled, the memory usage is also shown in the plugin indicator within HTML.
- Sitemap debug memory usage shows peak usage rather than current usage now.
AutoDescription_Core::post_type_support()now has an array argument parameter.
AutoDescription_Core::get_the_real_ID()now returns 0 instead of false if no ID is found.
AutoDescription_Generate_Title::build_title_notagline()is now protected.
array $argsfor parameters.
array $argsfor parameters.
AutoDescription_Generate_Title::title()admin functions now don’t rely on
$args['meta']anymore to bypass doing it wrong detection, but rather on
$args['meta']is now set to default
- CSS and JS file identifiers have their duplicated
autodescription-css, and so forth.
- JS files and cache.
- CSS files and cache.
- Class structure and order.
AutoDescription_DoingItRightand all its contents.
AutoDescription_Generate_Descriptionand all its contents.
AutoDescription_Transients::generate_cache_key(), it’s much faster and more accurate now.
AutoDescription_Generate_Urland all its contents.
AutoDescription_Generate_Ldjsonand all its contents.
AutoDescription_Generate_Titleand all its contents.
- Functions have been put in their respective aptly named classes where applicable.
- Debugging has been modified to clean up the code greatly.
- Metabox Setting Navigation Tabs, now your tabs are automatically styled and integrated when using the
AutoDescription_Metaboxes::nav_tab_wrapper()function. It’s also less “search-and-destroy” and thus easier on the browser.
- The metabox navigation tabs’ content is now also automatically aligned.
- All SEO Settings page checkboxes are now wrapped in a normalized function for a more seamless integration and if-needed adjustments.
- Hundreds of type optimization checks in if-statements, not only making it more readable, but also two to forty time less taxing on the CPU per optimization (count the Hertz!).
- Cached the SEO bar translations.
- render.class.php filters can now return empty string to disable its output.
The_SEO_Framework_Load::call_function()consumes less memory.
the_seo_framework_knowledgegraph_settings_tabsfilter now has an argument parameter.
the_seo_framework_sitemaps_settings_tabsfilter now has an argument parameter.
the_seo_framework_social_settings_tabsfilter now has an argument parameter.
the_seo_framework_add_blogname_to_titlefilter now has effect throughout the plugin.
the_seo_framework_canonical_force_schemefilter now works on all URLs generated by this plugin and has now an
$schemeargument which passes the current used scheme.
- WordPress Query detection.
- Blog page and Home Page query detection.
- Search query titles aren’t escaped twice anymore.
- Removed duplicated term object calls on term pages, reducing memory usage.
- When the paged URLs filter is used, the then useless URLs aren’t rendered.
- Plugin settings activation filter usage is now reflected throughout the plugin.
- When using the plugin settings activation filter, new default options are still applied (which are also filterable).
- Benchmarks have shown that an array flip to use an isset match only benefits huge arrays very little and only when you’re certain the result is at the end of the array. Otherwise, it’s a drastic performance decrease. Therefore
$this->is_array()calls have been set back to the default PHP behavior.
og:imageresizing now doesn’t use PCRE anymore, but regular PHP find and replace.
og:imagequality has been upped to 82 from 70. This is according to the new WordPress 4.5.0 standards.
- This plugin’s admin CSS and JS are now registered and cached prior to enqueueing. This speeds things up if multiple script calling hooks are used.
- The Term SEO box initialization now only happens on the term edit screens.
- The protected warned site options are no longer stored in the object. Evidentily removing the
$warned_site_optionsobject variable and putting it into a function.
AutoDescription_Siteoptions::get_warned_settings()now simply converts the given option values into booleans and then ones and zeros, rather than escaping thoroughly.
AutoDescription_Adminpages::is_default_checked()now doesn’t return
''anymore when using the echo parameter.
AutoDescription_Adminpages::is_warning_checked()now doesn’t return
''anymore when using the echo parameter.
- Disabled the Network options constructor and its class variables, as it’s not yet used (and protected).
the_seo_framework_dot_version()now checks for four dot versions if applicable.
AutoDescription_Core::get_the_real_ID()won’t return the latest post ID anymore on taxonomial archives.
AutoDescription_Generate_Image::get_image()now returns something when the third parameter is set to false.
- The SEO Bar column initialization filter used to be called as an action and mixed echoing and returning. It’s now a consistent filter, as WP core suggests.
- Empty delimiter PHP warning when the theme is doing it wrong and no separator has been provided.
- Improperly sanitized option, disclosed. Although, it holds no security treat as all options always go through multiple sanitation processes.
- PHP Warning in the robots.txt output. This will make subdirectory sitemaps work again.
The_SEO_Framework_Load::call_function()contained wrong error handling.
The_SEO_Framework_Load::call_function()now converts and checks for
$thiscorrectly. Evidently speeding up the plugin greatly.
The_SEO_Framework_Load::call_function()now doesn’t return a fatal error anymore if class and method isn’t found when the class is referred to as string.
- LD+Json Home Page flushing cache wasn’t initialized correctly on SEO settings save.
- Warned options cache.
AutoDescription::title_for_home()now correctly fetches the front page title option if called outside of the Home Page loop.
AutoDescription_Detect::current_theme_supports(), use core
- Second parameter for
AutoDescription_Debug::echo_debug_information()function, replaced by
AutoDescription_DoingItRight::seo_column()function, replaced by
AutoDescription_DoingItRight::seo_bar()to eliminate naming confusion.
AutoDescription_Sitemaps::setup_sitemap_transient()function, replaced by
AutoDescription_Sitemaps::setup_sitemap()to eliminate naming confusion.
AutoDescription_Detect::is_locale()function, replaced by
AutoDescription_Detect::check_wp_locale()to eliminate naming confusion.
AutoDescription_Generate_Title::title()instead with the argument
AutoDescription_Siteoptions::initialize_defaults_admin()function. Without replacement.
- Open Graph plugins check from Canonical URL output, these are unrelated.
- Filter/Constant/Action PHP comments indicating changes from 2.3.0 to clean up code.
- Title generation
- Cleaned up code, massively.
- Filter Notes:
(string) the_seo_framework_pre_add_title, used for embedding the title.
(string) the_seo_framework_pro_add_title, used to fetch the written title and adjusting it accordingly.
(string) the_seo_framework_metabox_id(Warning: Do not use. Will break JS and CSS. It’s a placeholder for a future update).
(bool)/(string) the_seo_framework_twitterimage_outputnow listens to
false, resulting in no
(bool)/(string) the_seo_framework_ogimage_outputnow listens to
false, resulting in no
(bool) the_seo_framework_output_canonical, added
(string) the_seo_framework_og_image_after_featured, added
(string) the_seo_framework_og_image_after_header, added
(string) the_seo_framework_description_output, added
(string) the_seo_framework_ogdescription_output, added
(string) the_seo_framework_oglocale_output, added
(string) the_seo_framework_ogtitle_output, added
(string) the_seo_framework_ogtype_output, added
(string) the_seo_framework_ogimage_output, added
(string) the_seo_framework_ogsitename_output, added
(string) the_seo_framework_twittercard_output, added
(string) the_seo_framework_twittersite_output, added
(string) the_seo_framework_twittercreator_output, added
(string) the_seo_framework_twittertitle_output, added
(string) the_seo_framework_twitterdescription_output, added
(string) the_seo_framework_twitterimage_output, added
(string) the_seo_framework_facebookauthor_output, added
(string) the_seo_framework_facebookpublisher_output, added
(string) the_seo_framework_facebookappid_output, added
(string) the_seo_framework_publishedtime_output, added
(string) the_seo_framework_modifiedtime_output, added
(string) the_seo_framework_googlesite_output, added
(string) the_seo_framework_bingsite_output, added
(string) the_seo_framework_pintsite_output, added
(string) the_seo_framework_robots_meta, added
(array) the_seo_framework_robots_settings_tabs, added
(array) the_seo_framework_social_settings_tabs, added
(array) the_seo_framework_knowledgegraph_settings_tabs, added
(array) the_seo_framework_sitemaps_settings_tabs, added
(bool) the_seo_framework_seo_bar_squared. Replaced by
- Constant Notes:
(bool) THE_SEO_FRAMEWORK_DISABLE_TRANSIENTS. Note: Does not disable transients for pinging search engines.
(bool) THE_SEO_FRAMEWORK_DEBUG_MORE. It always shows more now.
- Action Notes:
- I marked numerous functions with
@access private. These functions can change behavior at any time without notice and should never be used in extension plugins, even though publicly accessible. Please duplicate the function if you really need to use it.
- Please be aware that all CSS classes will change in a future update, to cover a synonymous namespace for The SEO Framework.
- At the moment this plugin is hooking into more than 90 actions and filters. WordPress hold the class information when this is done (because of
$this) and can take up a lot of memory. To resolve this, many class variables will be put into cached functions in an upcoming update.
- There’s an upcoming function for the home title. Currently, the blogname and title are unaptly named. This means that the title is the blogname, and the blogname is the title. The current home page title functions are therefore marked private. It will become: “title” – “sep” – “additions”, this will be reflected upon throughout the title class.
- I marked numerous functions with