Before diving into this guide, I wanted to say there are affiliate links inside, but I promise I would not spend hours and hours to craft this if I didn’t honestly recommend the products.
Permatters is a WordPress performance plugin that cleans up default settings, blocks scripts/styles, and various other common-sense tasks. With a simple UI so you end up with a fantastic baseline in just 5 minutes.
It’s one of my core, go-to performance plugins for building fast websites because of its simple interface and an excellent selection of functionality.
Let’s put it this way. It’s so good I use it on every site I create. There are a few key features I appreciate when seeking the fastest performance I can eke out of my website (here on WP🐹 I’ve seen tests showing less than 300ms load times).
If you want to take advantage of this tool, here is where you can get Perfmatters for yourself.
In this guide, I want to explain what Perfmatters is, why I think you should use it, and then go deep and explain every nook and cranny of it.
Let’s get into this!
Why Use Perfmatters?
I am not kidding when I say Perfmatters is one of the core plugins in my web performance arsenal. The capabilities it brings and the intuitive UI without trying to do everything under the sun is what primarily draws me to it.
But I do want to go over a few key reasons why I use and wholeheartedly recommend Perfmatters to you.
Default WordPress cleanup
There are a bunch of little bits of code spread throughout WordPress to clean up to produce a better result for your website.
Things like Really Simple Discovery link, the WordPress version, disabling jQuery migrate, and so on.
Perfmatters will take care of these for you with a few easy toggles.
The script manager
To me, this is the real power of Perfmatters.
The Perfmatters script manager gives you the ability to prevent scripts and styles from loading on a page-by-page basis. It’s honestly one of the biggest reasons WP🐹 can load as quickly as it does.
And using it couldn’t be easier. When viewing the page you wish to manage, click “script manager” in the top menu and then choose which scripts to block/allow.
I’ll go really in depth on this later in the “Unofficial Guide to Perfmatters” down below.
But free alternatives?
Yes, there are free alternatives you could use to do some of the things Perfmatters does. Or a combination of free plugins to mostly do all the same things.
But the reason I recommend Perfmatters is the attention to detail they provide. Everything has documentation when you need it.
Plus, they provide excellent support should you need it. And I think most of all; it isn’t crazy overpriced. It’s a very manageable price: $25 the first year, 15% off each subsequent year (at the time of this writing).
Consistent updates & new features
Perhaps the best reason for supporting a premium plugin is the effort the developer puts toward adding new capabilities.
While you’re free to work on your service, your content — to please your readers and users — Perfmatters continues to add new features enhancing your site more.
For example, currently in beta testing, the ability to disable entire plugins on a page-by-page basis. You can already block scripts/styles, but soon you’ll be able to prevent the execution of plugins altogether.
It’s like having a developer on your team, keeping your system updated and improving over time.
The Deep-Dive Guide to Perfmatters
Let’s go through everything step-by-step, tab-by-tab, line-by-line — and leave nothing undiscussed.
This guide is current as of Perfmatters version 1.5.8 (July 24, 2020).
Here is where you find the settings that will clean up much of the default WordPress settings and act as a solid baseline to begin more performance-enhancing changes.
- Disable Emojis [ON] — WordPress has an emoji script that loads on every page load. But if you don’t use emojis, then you can remove this. An interesting thing, though, I remove emojis, and yet, WP🐹 still works.
- Disable Embeds [OFF] — WordPress loads a script that powers an embed “preview swap” sort of capability.
- Remove Query Strings [OFF] — query strings are the
?something=1234part of a URL. The issue is, caching plugins may cache pages based on these, using more storage. Turning this on can improve performance, can also introduce technical issues. If you don’t understand the technical side of this, I recommend leaving it off.
- Another side-effect of removing query strings is when you make design changes but you can’t seem to see the changes publicly on your site. This is because the reader’s browser has cached the older version of your styles.
- Typically a query string could “bust” the cache so the new changes show immediately (but this can’t happen when query strings are removed)
- Disable XML-RPC [ON] — XML-RPC is a kind of remote connection capability. The JetPack plugin does use it some, as well as the WordPress mobile app. But it also introduces some security risks. If you’re not using an app to update WordPress, turn this on (which disables XML-RPC).
- Remove jQuery Migrate [ON] — jQuery migrate is a bandaid to help compatibility for older, inactive, plugins. Chances are you’ll be fine removing jQuery migrate, but test this for your site.
- Hide WP Version [ON] — for some reason, WordPress feels it’s a good idea to show which version of WordPress your site is running publicly. This is bad for security since would-be hackers can simply attack your site with known vulnerabilities based on the release.
- Remove wlwmanifest Link [ON] — the wlwmanifest is for Windows Live Writer. This used to be a somewhat popular way to write posts. If you aren’t using it, it might as well remove the link to it.
- Remove RSD Link [ON] — this is a feature that would allow third-party clients to publish and update content on your site. Chances are you are not using this and can safely remove it.
- Remove Shortlink [ON] — every post and page in WordPress has a unique ID. And using this ID, every page/post has a unique “short” URL like
https://wpguineapig.com/?p=123. If you have your permalinks set up correctly, then this should be removed.
- Disable RSS Feeds [ON] — WordPress by default will generate a series of Really Simple Syndication (RSS) feeds. These are feeds of your posts, pages, and categories/tags that feed readers would use to bring your content to others.
- This is less important today than in previous eras and can likely be disabled (unless you know for sure you use RSS feeds). And chances are you’re using an SEO plugin to generate a sitemap, so these RSS feeds are less useful.
- Remove RSS Feed Links [ON] — WordPress will generate extra HTML code to link to your RSS feeds. Turning this option on will remove those to clean up your site’s code.
- Disable Self Pingbacks [ON] — self-pingbacks are annoying, they are comments automatically created when you link back to your content inside your site. Confused? Yea, just turn this on and disable this waste of resources.
- Disable REST API [Disable for Non-Admins] — the REST API does create some excellent capabilities, but has an unfortunate side-effect too — it could expose your user’s usernames. Not cool, right?
- Luckily Perfmatters can disable it except when logged in as admin (as the Gutenberg block editor does need it).
- Remove REST API Links [ON] — this is another place where WordPress adds links to the REST API in the front-end of your site. Use this feature to clean up this code as it’s unnecessary.
- Disable Dashicons [ON] — Dashicons are the font icons WordPress uses (they are the official font icon pack). Chances are you don’t use these in the front-end of your site and can safely disable them.
- Disable Google Maps [ON] — if you do not embed Google Maps maps in your posts, you’re safe to disable this.
- Tip: link to a Google map versus embedding it where you can. Embedded maps are terrible for performance and are often difficult to navigate on mobile.
- Disable Google Fonts [ON] — Google Fonts can add quite a load time to your site. I recommend sticking with the System Stack for the best performance.
- The System Stack are fonts already installed on computers, so visitors don’t need to download them when reading your site.
- Disable Password Strength Meter [ON] — if you’re an information site like WP🐹 and do not have user accounts (people do not register to create user accounts), then there is no need for a password strength meter.
- Disable Comments [ON] — I do not have comments turned on. A beautiful thing about this feature, when you disable comments using Perfmatters, it also removes it from the admin menu. Of course, if you do use comments, leave this off.
- Remove Comment URLs [ON] — this feature is extra nice. If you do allow comments, you are concerned about spam. Typically spammers are looking to put links into their comments on your site. Turning this on will remove the ability to add links.
- Note: the benefit of this is two-fold. One, you won’t have to deal with links in comments, and two, since there is no link benefit — spammers are less likely to target you.
- Disable Heartbeat [Only Allow When Editing Posts/Pages] — while you’re in the WordPress dashboard, WP is making calls to wp-ajax.php to perform tasks such as saving post revisions. These consume hosting resources, and this Perfmatters feature can reduce it.
- I recommend setting this to “Only Allow When Editing Posts/Pages,” which means all the heartbeat “stuff” works while editing but doesn’t hammer your site when unneeded.
- Heartbeat Frequency [60 Seconds] — setting this to 60 seconds means these calls happen far less and therefore consume less hosting resources.
- The default of 15 seconds is too frequent.
- Limit Post Revisions [2-3] — post revisions have their place, so I don’t recommend flat out disabling them. But you also don’t need your database becoming cluttered with revisions. Set this to 2 or 3, your preference.
- Autosave Interval [5 Minutes] — this is how frequently WordPress will autosave your post while you’re writing/editing. I set this to 5 minutes because I have a good habit of saving when I feel like I have made enough changes.
- Heads up, this feature is often a part of other performance plugins too. If you get a warning, then leave this setting alone.
- Change Login URL — this is a security feature. There are two built-in WordPress pages for login and admin, wp-login.php and wp-admin.php. You don’t want others to access these. And since this is a WordPress default, attackers often try to exploit them.
- Enter something like cool-admin-dashboard or something unique that you will remember. Then Perfmatters will hide wp-login.php and wp-admin.php from the non-admin view.
- Note: if you set this, from then on you will use that unique text to log in, i.e.
Lazy loading is an important concept in web performance. I have a full article with explainer videos “How Does Lazy/Deferred Loading Improve WordPress Performance?“
- Images [ON] — Lazy loading images is important. You don’t want images outside the view of the reader loading (the reader may never scroll to them). This setting will add the
loading="lazy"attribute to your images.
- Note: The next major release of WordPress will make this part of core. You won’t need this anymore.
- iFrames and Videos [ON] — just like images, iframes, and videos should be lazy-loaded too in case the reader never actually scrolls to them.
- YouTube Preview Thumbnails [ON] — this is a great feature. When you embed a YouTube video, rather than actually embedding the player, Perfmatters will show the thumbnail and a lightweight play button — improving load time quite a lot.
- And when your visitor clicks the thumbnail/play button the player will load. A handy feature considering not every visitor will play the video.
- DOM Monitoring [OFF] — another cool feature. This is used when you have infinite scrolling (when scrolling to the bottom of the page more post automatically load). This will monitor the newly loaded content for images to lazy load.
Note: I don’t use WooCommerce on WP🐹. These recommendations are based on what I would do if I did use WC.
- Disable Scripts [ON] — a common goal in web performance is only loading what is necessary. This setting will ensure WooCommerce scripts are only loading on the WooCommerce pages — versus everywhere on your site.
- Disable Cart Fragmentation [ON] — WooCommerce has an annoying ajax call it does shopping cart updates. If you don’t want that, disable it with this setting — as this has shown to be a slow load (especially on large sites).
- Disable Status Meta Box [ON] — this is the admin dashboard widget. If you don’t want it showing this setting will remove it.
- Disable Widgets [ON] — WooCommerce sets up a lot of widgets. Normally they could be used to build your own layouts with various e-commerce components. But these days themes often handle much of this for you — so they can be disabled.
CDN stands for Content Delivery Network. If you are using a CDN such as BunnyCDN or KeyCDN, these settings will make those work with your site.
Note: I don’t use Perfmatters’ CDN settings since the Litespeed Cache plugin already does this for me. But if it didn’t, this is an easy way to add CDN to your site.
If you need this feature, here are my recommended settings:
- Enable CDN Rewrite [ON] — this toggles the CDN rewrite feature on/off, telling Perfmatters to rewrite the URL of your images, scripts, and styles to use the CDN URL instead of your site’s domain.
- CDN URL — this will be the URL you get from your CDN provider. For example, here on WP🐹 it is
- Included Directories — this tells Perfmatters which directories of files to perform the CDN rewrite on. Leave this as default ‘wp-content,wp-includes’ (there are very few instances where you’d need to change this)
- CDN Exclusions — generally you would leave this as default too ‘.php’ (but add others if you did not want them using CDN
- Enable Local Analytics [ON] — local Analytics means loading the Google Analytics script from your site’s server (or CDN) rather than third-party from Google’s servers.
- You should test this. For my purposes, it is faster. But it will depend on your host.
- Tracking ID [UA-XXXXXXXX-XX] — if you are going to use local Analytics, you’d enter the tracking ID code Google gives you here.
- You find this code by logging into Google Analytics and then at the bottom of the menu, clicking “Admin.” Then click on “Property Settings” and at the top of that page will be the ID for the page you’re tracking.
- Tracking Code Position [Footer] — this setting determines where to load the Google Analytics script. I recommend footer for performance.
- There is a small side-effect to loading in the footer though. If the user doesn’t wait for the page to load and moves on, there could be a chance the analytics script doesn’t load in time. I don’t worry about this, but I wanted you to be aware.
- Disable Display Features [ON] — this is a feature of Google Analytics tracking a little extra information above advertising and remarketing. If you don’t plan on paying for Google ads then you can disable this safely — and you’ll get a small performance boost too.
- Anonymize IP [ON] — this is a privacy feature telling Google Analytics not to track the exact IP address of the user visiting your site. You should pretty much always turn this on, especially if you have visitors coming from the European Union.
- Track Logged In Admins [OFF] — leaving this off will ensure your activity as an admin is NOT tracked. Nothing more annoying that your own visitors start being counted.
- Adjusted Bounce Rate [10-30] — this is a way to inform Google when a visitor is considered a “quality visitor.” I use 20 seconds. Essentially, after 20 seconds of a visitor being on the site, an event is triggered to tell Google not to count the user as a bounce.
- Use MonsterInsights [OFF] — Unless you use MonsterInsights, this can be left off.
- You may want to use MonsterInsights if you need to add event tagging and other advanced Google Analytics features. Read up on Perfmatters documentation if you do use MonsterInsights.
- Script Manager [ON] — absolutely ON. This is really the feature you should install Perfmatters for. Everything else is just icing on the cake. The script manager will make the biggest gains in your quest for ultimate performance.
- More about the script manager below.
- DNS Prefetch — this is a way to resolve the domain name of third-parties you often link to, or resources you often load. For example, if you link to Wikipedia in the majority of your posts, it may be worth adding
//wikipedia.comto this list.
- This will cause your reader’s browser to resolve the Wikipedia domain name before the reader has even clicked your link — making it load faster for them.
- Preconnect — this feature gives you the ability to mark certain resources to tell your reader’s browser to make an early connection to the domain so when the resource is needed it can be loaded more quickly.
- I use it for the CDN URL like so:
- I use it for the CDN URL like so:
- Add Blank Favicon [ON] — some tools will show you a 404 error if you don’t have a favicon. Enabling this will load a blank favicon in the even you haven’t set one yet.
- Add Header Code — this is a text-area where you can add code that will be injected into the
headsection of your site. Useful for things like Google Search Console verification meta.
- Here on WP🐹, I don’t use it for anything, as I verify Search Console another way. Pinterest and other platforms can be verified by pasting code here too.
- Add Body Code — a text-area where you can add code to be injected into the top of the
bodyof your pages.
- I do not use this and am not really sure what you would want to use it for. But it’s here if you do.
- Add Footer Code — a text-area where you can add code that will be injected at the bottom of the
bodyof our page. It says footer, but it doesn’t inject into your theme’s footer area.
- You could use this to create your own footer or a sub-footer.
This section is all about optimizing your database, or in other words, cleaning up things that, over time, can begin to clutter your DB and have the potential to slightly impact the performance of your site.
Here is an important thing to note. Perfmatters isn’t the only database optimization plugin, but there is one feature I like about it — the ability to pick what to optimize.
As I go through the settings below, know that you can turn on/off each one individually — most don’t offer this level of granularity.
- Post Revisions [ON] — every time you save a draft or update a post WordPress saves revisions of the post — which is intended to give you the ability to roll back changes. But over time these revisions can build up. This option will remove unused post revisions.
- Post Auto-Drafts [ON] — auto drafts are similar to revisions, but is something WordPress does while you’re writing your post. By default every 60 seconds WP will save a revision to protect you from losing your work while writing. But once you’ve published the post, these are no longer needed.
- Trashed Posts [ON] — when you delete a post WordPress doesn’t permanently delete the post immediately. It goes into a trash bin — to protect you from accidentally deleting something irrevocably. This will delete the trashed posts.
- Spam Comments [ON] — spam comments are article discussion comments flagged as spam. You can see them when using plugins such as Akismet or AntiSpam Bee. This option gives you a simple way to delete all the spam comments in one click. I recommend you leave this option off, but turn it on when you want to clean comment spam.
- Trashed Comments [ON] — these are comments which you have deleted, but just like posts, WordPress doesn’t immediately delete them. They’ll remain in the trash bin until you clear it. This option will delete all the trashed comments.
- Expired Transients [ON] — transients are temporary caches of data WordPress and plugins use to improve performance (by reducing subsequent calls for the same data). These transients expire. This option removes expired transients from your DB.
- All Transients [OFF] — while expired transients clutter the DB, the other transients are actually there for a reason. Clearing them will cause WP to re-query for the original data again. This option would remove them but will cause more DB queries to occur.
- Tables [OFF] — MySQL, the DB powering WordPress, has a command that can clean up tables — but there’s a catch — since 2010 MySQL has used the InnoDB engine which does not need to be optimized.
- Optimize Database — this is the button you click to trigger the database optimization, based on the options you turned on above.
- Scheduled Optimization — here you can schedule the optimization to trigger every day, week, or month. If you follow the recommendations above, I recommend you choose monthly here, or even just leaving it off and manually optimizing when you want. DB clutter even after many months of no cleanup will have a negligible impact on your site performance (unless you’re a massive publisher).
One more thing I like about Perfmatters here, the DB optimization is run as a background task. When you click the optimize button it will run the optimization in the background to limit the impact to your site’s performance while running.
This section is all about settings affecting the Perfmatters plugin — not the performance of your site. They’re things to help you manage the settings or what happens when you delete the plugin.
- Clean Uninstall — it is not uncommon for WordPress plugins to leave settings in your database when you uninstall them. This option instructs Permatters to clean up after itself and completely remove everything from the DB if you decide to uninstall it.
- Accessibility Mode — you may have noticed Perfmatters has a nice UI, using toggles instead of checkboxes. But they aren’t the best for accessibility. If you need a more accessible Perfmatters admin area, turning this on will revert everything to traditional checkboxes.
- Export Settings — self-explanatory. You can export the settings so you could import later, or import on another site with Perfmatters installed
- Import Settings — again, self-explanatory. Here you can select an exported settings file to import.
I won’t go into depth on this tab because it is self-explanatory. Here is where you enter your license key to activate Perfmatters so you can get updates and support.
Script manager magic
As I have alluded to throughout this guide, the script manager is where all the magic happens. Here you can disable scripts and styles from loading when they aren’t needed.
For instance, you may have a page that is simply informational. It could be a how-to for something in your industry. No e-commerce on it. But your Easy Digital Downloads scripts/styles are loading on it — since you do sell an e-book on another page.
This is because you’ll find most plugins simply load their scripts and styles globally (meaning they load on all posts/pages).
But you don’t want this. Every script and style adds to the payload your reader’s browser must download and render. You want every page to be as lean as you can make it.
That’s where the script manager comes in — accessed by clicking “Script Manager” in the admin bar at the top when viewing the page you want to optimize.
After the script manager loads you’ll see a list of plugins that are loading things on the current page. Here is where you can control what loads.
Heads up, this part will require some testing. Make changes and then check the page to ensure it still functions and looks like you expect it to.
There are two huge benefits to this view. One, you get to see what is loading and how large the payload sent to your reader is. Awareness is a significant advantage. Some things are probably loading you didn’t expect to be.
The second benefit is you can now control what is allowed to load — and you get some fine-grain controls. It looks like this:
In the top right corner you can see this plugin is set to OFF. This opens the options you see. Let’s step through them.
- Disabled [Everywhere/Current/Regex] — this lets you decide if you want this plugin’s scripts/styles disabled everywhere, just on the current URL, or by using a regular expression.
- I rarely use the Regex option. I usually disable everywhere and then set exceptions.
- Also, keep in mind this can be set on a page-by-page basis. You can set it to “Everywhere” and then on specific pages exclude the current URL
- Exceptions [Current URL/Post Types/Regex] — this option means that you can choose which pages do not follow the disabled rule above.
- I mentioned setting disabled to everywhere and then by page choosing the “Current URL” exception. This is where you would do that — on the pages you wish to exclude.
- Post Types — here you can exclude all posts, or all pages at once.
- Regex — this is a programmatic way of excluding things from being disabled.
And that’s it for the script manager — it is an easy, yet powerful, tool. You simply go through all the pages you wish to optimize and then disable what you can to remove as much payload burden as possible from your reader.
This is one massive step toward the fastest site you can reach (depending on a ton of variables such as type of content, hosting, software versions, etc.).
In this guide I first covered what Perfmatters is and why I use it — and why I recommend it for you to use as well.
Then did a deep-dive into all the settings so you can begin to mimic the performance I achieve here on WP🐹.
Another performance plugin I recently review is Flying Pages — a way to efficiently preload content so your readers can experience ultra-fast page loads.
Thank you for reading this and I hope you learned a ton about this fantastic product.