Speed Testing
Pagespeed’s Business Impact
Pagespeed/Load Time directly influences conversions, time on page, bounce rate, reading time, Google search engine result rankings, user experience, and revenue. For E-Commerce sites improving Pagespeed increases sales, reduces the amount of abandoned carts, and increases the percentage of users who complete the checkout process.
Performance Optimization is one of the most important things you can do to improve a website, whether that be for improved user experience or increasing the amount of revenue generated by the business.
Web.dev Article
https://web.dev/case-studies/vitals-business-impact
Business impact analysis of Core Web Vitals improvements directly from Google.
Conductor Article
https://www.conductor.com/academy/page-speed-resources/
Another article with solid case studies of the improvements in many metrics that sites have seen after improving their Pagespeed.
Deloitte Report
A thorough analysis of Pagespeed Improvement’s impact on Business’ revenue.
Metrics Explained
Escape Creative Article
https://escapecreative.io/google-pagespeed-insights-explained/
This page has a decent overview of the Metrics and what they mean.
Corelogix Article
https://coralogix.com/guides/real-user-monitoring/core-web-vitals/
Another useful article with somewhat in-depth explanations of various Core Web Vitals metrics and their definitions.
Google’s Core Web Vitals Documentation
https://web.dev/articles/vitals
Core Web Vitals documentation and definitions straight from Google.
Why Do Test Scores Change Every Time I Run A Speed Test?
There are many factors that will impact the score you see on these tests. These variables can range from your location related to the website, activity on your server, network routes and variability, and even the background activity of your local device. There will always be inter-test variance, across all speed testing providers, no two tests will be exactly the same regardless of the speed test used.
If your site is well optimized the range of values will be smaller and you’ll get more consistent scores in the same range, but an unoptimized site is going to have wildly varying scores between tests. However, as aforementioned, there will always be variance between tests, both for mobile and desktop.
Note: Your true scores are best measured as an average of multiple page speed tests. I generally perform 3 tests before I average them together.
Mobile Pagespeed Scores Are The Only Scores That Matter
The reason mobile performance is all that matters is multi-fold.
Improving Mobile Scores Inherently Improves Desktop Scores.
The source of pagespeed issues (css, js, unoptimized images, etc) is not specific to either Mobile or Desktop devices, rather their impacts are universal and felt by both Desktop and Mobile users.
However, the impacts of each performance issue are exacerbated on mobile and the performance impact of these detriments is larger.
There are no "unique" optimizations that will only improve performance on mobile or only improve performance on Desktop. When you improve performance for mobile, you've improved performance across the board, including Desktop.
Mobile Has Greater Variability Between Test Scores
There is a greater range of variability in the scores. If you were only to rely on Desktop scores, you could easily end up being deceived that nothing else needs to be optimized.
It's quite easy to get a Desktop site to score under 1 second load time, and to get 90+ or 100/100 on Desktop is generally a walk in the park, but that's just Desktop.
Performance Issues Have A Greater Impact On Mobile Devices
Under a 1 second desktop load time can be anywhere from 2-6 seconds on mobile, potentially worse due to how much more powerful Desktop's are than mobile devices.
That is because network conditions may change (cell service or distance from a Wifi network access point), and device load is also in constant flux. Each additional kilobyte of data (especially images) has a far greater effect on a mobile device's performance more than it does a Desktop device.
A 60 KB image vs a 30 KB image may have no impact on the total Desktop performance scores out of 100, but the size difference certainly can and will make a noticeable impact on mobile. Desktop scores may show 0 CLS, but that can be very deceptive as mobile devices may have a large amount of CLS when accessing the same website.
Mobile Pagespeed Tests Are Taken Under Controlled Simulated Conditions
These simulated conditions are equivalent to the "worst case scenario" of an under powered device (Currently the simulated target is a Moto G Power).
Google's Pagespeed Weighting On Rankings Are Ranked By Mobile Pagespeed First, Always, Without Exception.
Whether the majority of your site's traffic is Desktop or Mobile is irrelevant insofar to how Google ranks your webpage. Google does not care about Desktop performance when they rank a website. 80%+ of traffic on the internet is from mobile devices, and Google calculates their rankings accordingly. Even if your website’s users are browsing from a majority of Desktop devices, your mobile score is the only one that will be considered as a ranking factor.
Desktop Scores Are Irrelevant
Desktop scores have such little diagnostic value as to be essentially useless. In fact, their only diagnostic value is as a reverse metric. Poor Desktop scores are indicative of one thing and one thing only, a massive amount of performance issues that must be solved. Good Desktop performance scores indicate nothing as to how well a website is optimized.
They have such little value that they can be summarily ignored, Desktop scores are irrelevant.
The vast majority of times a website screenshots with high scores in the 90s are generally displaying Desktop performance scores. Anyone lauding their Desktop performance scores are deceiving themselves as well as their customers, and the immediate reaction should be skepticism and to open your browser’s console immediately with inspect to run a lighthouse mobile test on their website.
The amount of performance “experts” who claim good desktop performance means their site is well optimized is far, far too high.
Desktop Performance Vs Mobile Performance Example
Here is a great example of a site with good Desktop performance scores with poor mobile scores. Always verify what a site's mobile scores are when they claim to have rock solid performance, they’re almost always referring to Desktop.
The Desktop version scores very well, with almost zero CLS and every metric displays as loading in under 1 second, and yet the Mobile Scores are a complete mismatch to the Desktop performance scores. Google will incorporate this site’s poor Mobile Pagespeed scores as the performance metrics in their ranking score, with zero weight given to the Desktop score.
TTFB
TTFB Components
DNS
The DNS lookup time is the time taken to query and receive a response from a DNS server with the IP address of the domain. If the DNS response is not cached locally, this process can add significant time to the TTFB.
How to optimize the DNS portion of TTFB
Use a fast DNS provider with DNS caching such as Cloudflare. Even if you don’t use them as a CDN, I highly recommend using them as your DNS provider.
Connect
Connection time includes the time it takes to perform the TCP handshake, which is essential for setting up a TCP connection before any actual data can be sent. This typically involves the sending of SYN and ACK packets between the client and server to acknowledge the connection.
How to optimize the Connect portion of TTFB
Follow the steps in the TCP optimization portion of the VPS section above.
SSL
The SSL/TLS handshake time is the duration taken to authenticate the server (and optionally the client), as well as to negotiate the encryption and the key exchange for the session. This process involves multiple steps of exchanging messages and can add considerable time to the TTFB, especially in cases where a new session is established without using session resumption techniques.
How to optimize the SSL portion of TTFB
The SSL optimization section above has a multitude of resources on how to optimize SSL connection speed.
Sending
This component measures the time taken to send the first byte of the response from the server to the client after the server has finished processing the request. This includes the time it takes to send the initial data of the HTTP response header.
How to optimize the Sending portion of TTFB
Brotli/Gzip Compression
Utilize compression techniques such as GZIP or Brotli to compress the data sent from the server. This reduces the size of the data being transmitted, thus decreasing the time it takes for the first byte to reach the client. It's especially effective for text-based content like HTML, CSS, and JavaScript files.
Optimize Your Server Configuration
Ensure that your server is well-configured to handle requests efficiently. This includes tuning web server software settings (like Apache or Nginx) for better performance by adjusting worker processes, keep-alive settings, and client request handling.
Consider using a reverse proxy or a load balancer that can manage connections and distribute traffic effectively, minimizing delays in sending data.
Use HTTP/2 or HTTP/3
Implement HTTP/2 or HTTP/3, as both protocols provide improvements over HTTP/1.1 in reducing the overhead associated with sending data. HTTP/2 introduces multiplexing, which allows multiple requests and responses to be intermingled on a single connection, reducing the latency associated with setting up multiple TCP connections. HTTP/3 further improves the process by reducing connection establishment time and minimizing the impact of packet loss
.
Minimize TLS Handshake Delays
If using HTTPS (recommended), optimize SSL/TLS settings by choosing faster cipher suites that require less computational power and support techniques like TLS False Start and Session Resumption. These methods can significantly reduce the time taken to establish a secure connection, hence speeding up the sending phase.
Consider using a Content Delivery Network (CDN) with edge nodes that support modern TLS features and are closer to your users to decrease the distance data needs to travel.
(Additional SSL Optimization Strategies are in the SSL optimization section above)
Review and Optimize Application Code
Analyze and optimize the backend code of your application. Ensure that any server-side scripting (like PHP, Python, or Node.js) is optimized for performance. This includes reducing database query times, optimizing algorithms, and ensuring efficient data processing.
Use server-side performance tools to monitor and identify bottlenecks in real-time.
This also encompasses all Wordpress optimizations below.
Content Delivery Network (CDN)
Deploying your content across a CDN can potentially reduce the sending time significantly. CDNs store copies of your data in multiple geographic locations, reducing the physical distance between the server and the client, thus minimizing the data travel time.
Database Optimization
Optimize database queries to ensure they execute swiftly and do not become a bottleneck. Efficient indexing, query optimization, and appropriate caching strategies can reduce the time it takes for the server to retrieve data and start sending it to the client.
(Database Optimization has a section below)
Waiting (Server Processing Time)
This is the time taken by the server to process the request and prepare a response. It includes the time taken to run server-side scripts, query databases, and load any necessary resources to generate the response.
How to optimize the Waiting portion of TTFB
Optimize Wordpress at the application level. This is where Wordpress optimization comes in. Inline javascript, how heavy your HTML is, inline CSS, etc. This is where your HTML DOM and Document size come into play.
Receiving
This final component accounts for the time it takes for the client to receive the first byte of data from the server.
How to optimize the Receiving portion of TTFB
1. Reduce Server Response Size
For the receiving portion, both inline and external CSS and JavaScript files matter because they can influence the size of the initial server response. While inline resources directly add to the HTML document size, external files contribute to the overall number of bytes the browser must handle after the initial HTML is received.
Reducing the overall size of these resources (both inline and external) can decrease the time it takes for the client to start receiving data from the server. Techniques such as minifying and compressing (using GZIP or Brotli) these resources are directly applicable here.
2. Streamline Initial Payload
Deliver only what is necessary for the initial render of the page. This might mean optimizing the HTML to include only essential inline CSS/JS and deferring everything else.
For external resources, adjust the timing of their fetching (through async and defer attributes in script tags) so that they do not clog the initial payload, potentially delaying the start of the data transmission.
Follow the Wordpress Optimization steps below
3. Use HTTP/2 or HTTP/3
Both HTTP/2 and HTTP/3 improve the efficiency of data transfer. HTTP/2's multiplexing feature allows multiple requests and responses between the client and server to be intermingled on a single connection, reducing the overhead caused by multiple connections.
HTTP/3 further improves upon this by reducing connection and transport latency, utilizing QUIC, which can start sending data as soon as the connection is established, potentially decreasing the delay in receiving the first byte.
4. Efficient Use of TCP and Adjust TCP Windows
Optimize TCP settings, including the initial congestion window, which can affect how much data can be sent during the start of the connection. A larger window size allows more data to be "in flight" on the network, potentially reducing the time until the first byte is received.
Ensure that the server’s TCP stack is optimized for quick delivery, which includes considerations of TCP slow start, acknowledgments, and retransmissions.
TCP Optimization is a subsection of the VPS section
ByteCheck (Free)
Byte Check provides a really nice breakdown of TTFB and breaks it down into its constituent components(DNS, Connect time, SSL, Send, Wait, Receive).
Byte Check is indicating that there is 16 MS of processing time from the origin server, which it’s breaking out into a separate component it is labeling as the TTFB. On the majority of other speed tests, they will display the total value of 154 MS, which comprises the 6 components on the right, as the TTFB.
That means GTMetrix, Debug Bear, etc are going to display the TTFB as the total time before your files begin to serve to the user’s browser. While Debug Bear and GTMetrix include small subsections on their waterfall charts for the initial html document request, Bytecheck is just way easier to interpret and read and is the best tool to measure TTFB.
Byte Check is a useful speed test to use as a complement alongside Debug Bear/GtMetrix/Pagespeed insights.
Note
PSA to anyone who uses Bytecheck: make sure the HTTP response code isn't a 403. Cloudflare likes to block Bytecheck, returning a 403, but Bytecheck doesn't make it immediately obvious unless you check the HTTP response code. So your results may look superb, but in reality that's because it's only loading a basic 403 error page.
Credit to /u/TTEH3 on Reddit.
What is a good TTFB?
Under 300 MS for Desktop and under 500 for mobile.
Contrary to what many guides online will tell you, a TTFB higher than 300 ms on Desktop is unacceptable. Many sites will tell you under 800 ms, which in kind words is…generous. That is a ridiculously, absurdly large TTFB and a value reserved for the lazy. For the sites I optimize, after optimization the TTFB is generally ~200 ms. I get mad at myself when I can’t hit sub-300. On a good host I can hit 150-200 ms when the site is fully optimized depending on the way the site was built. When your site has a large TTFB, you can feel it. Reducing your TTFB score is critical for pagespeed performance.
Mobile TTFB
Note: Mobile TTFB will always be larger than Desktop TTFB. Under 300 MS TTFB is for Desktop scores, you want to shoot for ~400-500 MS maximum for mobile TTFB if possible. Since TTFB has 6 different components it can be a bit of a challenge to reduce TTFB time to a reasonable value, so be prepared for a bit of trial and error.
If your site is testing with a Desktop TTFB over 300 or a mobile TTFB over 500 MS, you likely have unimplemented optimization opportunities remaining.
You Do Not Need Paid Speed Testing Plans
Everything needed to optimize a site can be gleaned from free speed tests. Paid speed testing plans are completely unnecessary unless continuous monitoring is desired. Even then, there are 2 free self-hosted open source tools included at the bottom of this section for continuous monitoring.
Waterfall Charts
How to analyze a waterfall chart
https://www.keycdn.com/blog/waterfall-analysis
Page Weight and reducing the amount of files that load.
One of your primary goals when optimizing is to reduce the total weight(size in KB/MB) of a page to the absolute minimum possible.
For the following sections I am using a GTMetrix waterfall chart for the screenshots, however any waterfall chart will have the same information.
Input the url you want to speed test:
You can see the file weight of a page at the bottom of the waterfall chart on GTMetrix, another reason why it’s one of the most useful tools you can use for speed tests.
The other important metric you are trying to reduce is the number of requests, shown at the bottom of the GTMetrix waterfall.
Both total page weight and the number of requests need to be reduced to the minimum possible values you can achieve.
This is how to sort by file size:
What is an ideal page weight?
An ideal page weight is 500 kb or less. My site’s homepage running Elementor + Woocommerce is 168 kb before user interaction.
How to filter by File Type
This is how to filter by file type on GTMetrix. Debug Bear has similar filters:
Every additional request(even if they are incredibly small, even a .3 kb request) adds additional latency. Eliminate as many requests as you possibly can. Delaying javascript files will completely negate their pagespeed impact entirely, as the files will not download before user interaction. That is how my site’s page weight tests at 250 kb.
The page will appear to load instantaneously, and the javascript will have no impact on the initial page load time. The user will experience no visible delay/performance impact when the delayed javascript is loaded.
How to identify which files need to be optimized
The prime targets for optimization are your Javascript and image files. CSS files can be taken care of in 1 shot with removed unused CSS(baring the need to add exclusions to the CSS removal feature of course).
Going based off the picture above, let’s break it down file by file. Lazysizes.min.js cannot be delayed or deferred. That is because lazysizes is an optimization JS file that modifies image loading to improve page speed.
Tingle.js, while small (3 kb), is likely an extraneous file that does not need to load immediately. That should be delayed(and an exclusion added if needed). You want to reduce the amount of files loading as much as possible, even if they are small.
Keen_slider.js can safely be delayed. A slider requires user interaction to function, so unless the slider is set to auto-play between different photos and this feature is needed immediately after the slider loads, it can be delayed without issue. If the slider plugin is sensitive to delay and the file cannot be delayed, add an exclusion.
Global.js seems like something Klaviyo would load. If you expand the waterfall item, you can see where the file is coming from. A plugin, third party, etc. Based on that information, you can glean whether it’s a good target for delaying.
Main.js and Klaviyo.min.js are both third party files. From Order Groove and Klaviyo respectively. Of the two, Order Groove is more likely to break something because it sounds like part of the e-commerce featureset. Klaviyo is for analytics and can be safely delayed. Order Groove’s file would require testing to ensure it doesn’t break any functionality.
I would recommend testing delaying each js file individually, one at a time just to be sure. You don’t want to leave any performance on the table by not delaying them if possible. To reiterate, you want to reduce the amount of files loading on the initial page load as much as possible.
Which Speed Test To Use For Diagnosis
For Mobile, your best tool to test with will be Debug Bear.
Debug Bear is superior to Pagespeed insights for Mobile scores and and provides more actionable info on what you need to optimize, as you can access the waterfall chart to see load times for specific files, as well as a list of all CSS and JS files that are loading on a specific page that you are testing. You can run the test on individual URLs such as the homepage, an about page, service page or whatever you want to test on the site you are testing.
If your Mobile score is good on Debug Bear, it should be good enough for Google.
Chrome Dev Tools Network Tab
Chrome dev tools network tab can be accessed by right clicking on a page, clicking “inspect” and then clicking the network tab at the top of the panel. While the network tab in dev tools provides less detailed info than Debug Bear, you can access the network tab just by right clicking a page and clicking inspect. Useful for a quick analysis of a domain’s request tree, but for a thorough analysis Debug Bear is recommended.
Mobile Page Speed Testing
Note: For mobile speed tests (the only ones that actually matter), Pagespeed Insights is the end all be all of the limbo bar, but their diagnostic utility (how you figure out what you need to optimize) is practically zero. You need to use third party tools to actually identify the issues.
Google Pagespeed Insights (Free)
You need to satisfy Google’s speed tests for your SEO. Other sites may offer mobile pagespeed tests, and perhaps they have a waterfall chart for mobile, but the end all be all for mobile tests is Google’s Pagespeed Insights testing tool.
While you are trying to give the user the best possible experience on mobile(as the majority of the site’s traffic will be coming from mobile), the only company you need to satisfy for speed tests is Google because they are the gatekeepers for SEO. Bing refers less than 5% of the traffic to your sites than Google does, and if your metrics satisfy Google, they will satisfy Bing. You only care about optimizing for Google for SEO.
Debug Bear (Free)
https://www.debugbear.com/test/website-speed
I use Debug Bear to diagnose my issues, but Pagespeed insights to gauge how much farther I have to go on my optimizations.
You are always aiming to optimize your mobile score on Pagespeed Insights. Pagespeed insights is the only metric used for Google’s ranking for search results. Debug Bear is simply for diagnosis so you know what to fix.
I cannot stress this enough, the metrics Pagespeed Insights measures for mobile are the only ones that matter. Debug Bear scores only real value are as a gauge of your progress and what you need to fix.
If your mobile score improves on Debug Bear, your mobile performance scores on Pagespeed Insights will improve along with it.
Debug Bear Tools (Free)
https://www.debugbear.com/tools
Very useful collection of free pagespeed testing tools
Yellow Lab Tools (Free)
Online Version (Free)
Yellow Lab Tools has some unique metrics that can be useful in some instances to diagnose issues that may not be indicated by other scanners.
Docker Image (Free)
https://github.com/YellowLabTools/YellowLabTools
Docker Image for Yellow Lab Tools.
Bulk Pagespeed Speed Testing
Experte (Free)
https://www.experte.com/pagespeed
Bulk test multiple pages on a site at once.
Optimize for Pagespeed Insights lab data scores
Always optimize for lab data. Pretty much every other tutorial will tell you to focus on field data, the load times on real world user's devices. When you do a pagespeed scan, the scores that are immediately reported (regardless of the service used), are “lab data”. When you improve lab test metrics, you inherently are improving the real world load time, the field data, for users. The lab data metrics are there for a reason. “Synthetic” pagespeed testing (lab data) are the only scores you can actually optimize for since that is what page speed tests generate. Real world metrics (Field Data) are collected over a 30 day period, which does not have any diagnostic utility.
Real world performance
The speed may seem artificially faster on speed tests (i.e. your scores have improved), however it may load faster than reported in the speed tests in the real world. Real world load times improvements are more important than Pagespeed Insights lab data results, but they are directly tied to the field data. Lab data improvements mean there are real world improvements, and that will be reflected when the next round of field data is collected over the next 30 days after optimizations have been implemented.
Page Speed tests lab results are mostly accurate (and satisfying Pagespeed Insights is absolutely necessary for SEO), but the real world measurement should be measured by your own perception and always gauged by your eyes. In some cases, a pagespeed test may tell you that your performance is good and rock solid, but loading it yourself and viewing the timing may actually show that it’s slower (rarely).
The real world speed not matching a speed test result is very rare, but it does occur on occasion, so always check how fast the site loads on your own devices, instead of synthetic speed tests (pagespeed measurement tools).
If there is a mismatch between real world performance and your speed tests, something is wrong which you need to diagnose, and you may need to restore to a backup if you can’t reverse the effects of changes you have made for any reason.
You need to improve both the real world load time and the pagespeed test results on pagespeed insights, but the lab data is always the best heuristic to use, and the mismatch is so unlikely that it should be considered an edge case.
Not all speed tests are equal
Some speed testing providers will return wildly inaccurate results. Dotcom tools being one of them. To reiterate, the only test results that actually matter are Google’s. Everything else is just for analysis.
What Is An Ideal Mobile Pagespeed Score On Pagespeed Insights?
Any site you are optimizing should ideally have a mobile score of 90+ once optimized. For the vast, vast majority of sites that is easily achievable. Anyone reading this guide should be able to achieve that on any normal site once the majority of the steps are implemented. Some dynamic sites require some additional special strategies which have yet to be added to the guide, but these are special cases and not the norm.
What does an ideal mobile score look like?
Don’t settle for less than a score of 90! All it takes is a little effort and some trial and error. Once you implement everything in this guide, this will be easy to achieve and repeat, site after site. We’re after all green.
Continuous Monitoring
Continuous Monitoring will measure your real world and lab data scores over time, which are useful metrics as the fluctuations do have diagnostic utility. These two tools are self-hosted, and are not SAAS tools/services. I recommend getting a separate VPS to host these tools so you don’t cause unnecessary load on a server hosting live sites or staging sites. There are cheap VPS providers mentioned in the hosting section which are useful for this purpose.
Self-Hosted Tools
These can either be self-hosted on your local machine, or on a cheap VPS server.
Lighthouse CI (Free)
https://github.com/GoogleChrome/lighthouse-ci
Lighthouse CI is a suite of tools that make continuously running, saving, retrieving, and asserting against Lighthouse results as easy as possible.
Lighthouse CI requires a CI service, these are listed here, free options included:
https://github.com/GoogleChrome/lighthouse-ci/blob/main/docs/introduction-to-ci.md
Gitlab CI (Free)
https://docs.gitlab.com/ee/ci/quick_start/
Lighthouse CI Server (Free)
https://github.com/GoogleChrome/lighthouse-ci/blob/main/docs/server.md
Lighthouse CI Visual Frontend/Dashboard
SiteSpeed.io (Free)
https://github.com/sitespeedio/sitespeed.io
Another free Open Source continuous monitoring toolkit, visually presents more useful data than Lighthouse CI.
Available as either a Docker Image (cross-platform, including Windows support) or a NodeJS NPM package (Linux).
Competitor and Comparative Analysis
Lightest App (Free)
Free competitor/comparison speed testing against multiple domains.
Debug Bear (Free)
https://www.debugbear.com/docs/compare-pages
Note 1: Requires a free account
Note 2: From my tests, the comparison speed tests statistics are mismatched, and have poorer scores than a regular Debug Bear speed test. Regular Debug Bear speed tests are more accurate.
WebPageTest (Free)
https://www.webpagetest.org/video/
Pretty janky interface, but offers comparative speed testing against multiple urls.
Inferences
Waterfall Chart Analysis
Performance Optimization requires inferences. You will never have every optimization opportunity identified by a Pagespeed Performance Test, regardless of if you are using the best in class performance test or not.
There is simply no way for an external tool to identify backend issues, and none of them will currently identify all frontend issues. Therefore, identifying issues based on information that is not explicitly identified in Pagespeed reports is required. This requires you to make these conclusions via interpretation of the Pagespeed Test Request Waterfall Chart.
The example below contains some of the inferences that can be made by reviewing a waterfall chart.
Even Well Optimized Sites May Have Lots Of Opportunities For Improvement
ThemeIsle Case Study
Some sites are sitting at the cusp of perfect performance, but have some low hanging fruit optimizations that would rocket their scores to 90-100 with just some simple tweaks. This is a great example of a site that is already ~85-90% of the way there to being fully optimized based on their pagespeed report.
There are many, many conclusions that can be drawn from the above waterfall chart. Only 16 requests are displayed in the top screenshot, some sites can have hundred+ requests. None of these will be explicitly warned about in a Pagespeed report, you must make these conclusions through your own analysis of a report.
Icons
Font Awesome
The Font Awesome Icon Library is in use, and two separate woff2 font files for font awesome are loading, with weights of 400 and 900 (note the values in the file name). These files are preloaded, which forces them to the top of the request tree.
Their file sizes are 13.4 kb and 77.7 kb respectively, so the site is loading a total of 91.4 kb of just icon fonts. This is a big problem, and one that will have a sizable impact on a speed test. These two requests need to be eliminated if possible, and the icons need to be replaced with individual small svg files. Even on pages with 1 or 2 icons, many plugins and themes call the entire font library with the entirety of icons within (possibly thousands of icons), completely unused.
Sometimes font awesome has a toggle in plugins and themes, sometimes not.
And this is just one conclusion that can be drawn from the waterfall chart.
Individual Twitter SVG
The font awesome library is in use, and yet an individual Twitter icon SVG is also being loaded. This is completely unnecessary as the Font Awesome libraries already have a Twitter icon included. One of two things should be done, replace all icons with individual SVGs (best practice), or use the Font Awesome library’s Twitter Icon (Preferable when Font Awesome cannot be removed) to eliminate an unnecessary request.
Unoptimized Images
Images Are Not Lazy Loaded
9 images are loading in the request tree, which right off the bat is the most noticeable issue. Firstly, only one of these images is actually in the viewport (the author photo). None of the photos that are out of the viewport are lazy loaded, meaning tons of unnecessary page weight is being downloaded on the initial render, which negatively impacts all metrics, but has the most significant impact on LCP and CLS scores.
Images Can Be Further Compressed
Secondly, many of the images are large and can be further compressed, preferably manually if possible.
Image Sizes
There are multiple image sizes that can be identified from the 9 image requests filenames: 772x250, 1024x683, 1024x512, and 1024x736.
This indicates a few things. The image sizes are wildly inconsistent, there are 4 separate image sizes being used on the page. The smaller the image size, the lower its file weight will be, reducing its performance impact.
It may be possible to resize some of these images while maintaining visual quality on mobile (specific resolutions/breakpoints can be targeted with SRC set/image resizing plugins) which will reduce their file size further.
There is an explicit warning in the report about image sizes, but even more information can be gleaned from just inspecting the filenames.
File Formats
Two File Formats for the 9 images that are loading can be identified in the waterfall, jpg and png. The file size of the images can potentially be further reduced beyond just resizing and compression by serving “next-gen” formats like AVIF and WebP to newer browsers while still serving the jpg and png files to unsupported older browsers as a fallback.
Bloated HTML Document
One issue with performance tests is it’s threshold for the large HTML document warning is set too high. The appropriate threshold for the weight of a bloated HTML document should be 50 kb, anything greater than that should be considered large and has a noticeably detrimental effect on performance.
We can see based on the top request for the page “blog” (the root html of the page) that the HTML weight is 86.0 kb, which exceeds the 50 kb maximum threshold target. The HTML document weight of a site should be reduced as much as possible for the greatest performance improvements.
Cache Plugin Used
WP Rocket
Because CSS files have been inlined using a remove unused CSS feature and all javascript has been delayed (likely) or inlined (unlikely), because there are no javascript files loading in the request tree, the optimization plugin cannot be identified by analyzing the URLs in the request tree.
Instead, the HTML body must be viewed. As soon as the HTML body is opened, it is very clear that WP Rocket is in use since it is referenced multiple times (“nowprocket”).
Although WP Rocket is not recommended as it’s generally possible to obtain better results with Flyingpress, its implementation is functioning perfectly and no changes should be made unless problems arise when performing further optimizations. WP Rocket with all of its flaws is still one of the most performant caching plugins.
CDN
The site is using Cloudflare as the CDN, and there is a cache hit (meaning the file is served from Cache correctly) for some files (served from Cloudflare cache).
Brotli
Brotli is in use.
Document Bloat Components
Debug Bear breaks down the components of the HTML document and displays their size. 28.91% of the HTML document weight comes from inlined CSS (style), 12.79% comes from inlined javascript (script), 9.93% is from inlined SVGs (path).
The inlined CSS styles have the greatest performance impact, 26.6 KB of inlined CSS styles is excessive.
11.1 KB of javascript also has a significant performance impact.
Inlining too many SVGs can also have a negative impact. Inlining should be used sparingly and only for critical resources.
You’ll need to examine the sub-contents of these items and determine the source, then you can proceed to optimize it. This requires manually inspecting the HTML tree in Debug Bear.
External Third-Party Calls
There are 9 requests to files from the host domain.
At the bottom of the waterfall there are 6 requests to third party domains. 2 to use.typekit.net (fonts), and 4 to ps.w.org (images). The typekit calls are unavoidable and must be made unless the fonts are locally hostable, so if they are required, they should be set to preconnect to the third party domain (use.typekit.net), as well as preloading the resource. The preload attribute is set appropriately for the typekit requests, however the preconnect attribute is not and should be added.
The 4 calls to ps.w.org are images that should be replaced with locally hosted copies.
Quantity Of Requests Is Low
Very few resources are being called in the request tree (23 resources + the root HTML, 14 resources displayed in the non-expanded tree screenshotted). This is a good indicator of a well optimized site.
Anything under 40 is in the sweet spot.
Resource Fetch Priority
Two files have the Fetch Priority attribute set to “high”, logo.png and best-wordpress-image-optimizer.xxx.png. There are two more high priority requests to the use.typekit.net domain. All the other requests besides the root HTML document’s fetch priority is set to “low”. This fetch priority “low” attribute may be retained even when the file is set to preload, this does not negatively affect the preload functionality.
Too Many Fonts Are Preloaded
Too many font files are preloaded. The number of preloaded resources should be kept to a minimum and only used for critical resources.
Unused CSS Has Been Removed
There are no CSS files being loaded in the request tree. This is a good thing, and indicates that a Remove Unused CSS function has been activated in an optimization plugin, or that the needed code has been manually inlined. All unused CSS has been removed, and critical CSS inlined into the HTML document. CSS can be safely checked off the list and marked as optimized.
No Javascript Requests
There are zero requests for any javascript files. This is a very good thing as this indicates the site has delayed all of their javascript (in their case all of it could be safely delayed) or that it is a static website. There is zero javascript code that is being downloaded or executed during the initial render, completely negating any performance impact that javascript code would have on the initial page render.
Images Are Being Served Over HTTP/2
HTTP/3 is enabled on themeisle.com, however, some resources are still being served over HTTP/2. The image files are still being served over HTTP/2, which leaves some performance on the table.
Avoids Redirect Chains
There is no intermediary HTTP > HTTPS > HTTPS://WWW redirect.
LCP (Logo) Is Preloaded
The LCP image is preloaded correctly.
Layout Shift
The CLS score (Layout Shift) indicates that height and width attributes have not been applied to images.
Low TTFB Indicates An Optimized, Low Load Database
Low TTFB indicates that the Database backend has been well optimized and is experiencing load load. High TTFB is usually indicative of an overwhelmed database, a VPS/Hosting with low RAM or weak CPU, or a poorly configured mysql implementation.
Low CPU Time Indicates Optimized Javascript And An Optimized Database
CPU evaluation time largely comes from javascript. Since all Critical Javascript has been inlined (no JS files loading in the request tree), the javascript inlined into the HTML document is minimal and well optimized. It is likely the database is well optimized, as a poorly optimized database can have significant performance impacts on both CPU time and TTFB.
No Iframes In Use
There are no third party calls for Iframes.
TLS 1.3 Is In Use
TLS 1.3 (SSL) is enabled on the domain, which is currently the newest and most performant version of TLS available.
Over Half Of The Current Page Weight Can Be Removed From The Initial Render
Simply implementing a functional lazy load solution would automatically halve the page weight. After implementing all of the above suggestions, the page weight could likely be reduced ~3x from 1.16 MB to ~400-450 kb. A 700 kb reduction, resulting in significant performance improvements.
Case Study 2: Elementor.com
Comic Relief
You’ve gotten this far into the guide, who’s ready for some comic relief?
https://www.debugbear.com/test/website-speed/jl9XSI2N/overview
Here’s some screenshots of pagespeed reports for Elementor.com itself.
And here’s the Pagespeed report for a personally developed and optimized Pagespeed Optimization Services site (currently not live as it’s still in development!) built with Elementor:
Analysis
Strap in, this is going to be a long one. Going to do this in chunks, too many screenshots to do all at once.
Visual Website Optimizer
From the second item in the waterfall it’s clear that they are using Visual Website Optimizer for customer analytics. To optimize VWO, the javascript should be delayed with a delay javascript feature in an optimization plugin.
Geo-Loader
Elementor.com is using a self-developed plugin for Geolocation called “geo-loader”. We can infer that they are using this to identify where customers are located, and this data is fed into either an external analytics platform, or a custom developed one.
Jquery Numerator
Jquery Numerator is loading, which is used to animate numbers. This js file can usually be delayed to negate its performance impact unless the animated element is above the fold and the animation is needed immediately without user interaction.
Newsletter Enrollment
They are using a custom developed newsletter enrollment plugin. This can almost certainly be delayed to negate the performance impact with no functionality affected as this is unneeded until the user interacts with the form linked to the functionality.
WP Polyfill
The WP Core file wp-polyfill.min.js is loading, which can safely be unloaded with Asset Cleanup/Perfmatters/a selective asset unloading plugin, or delayed. The tell that this is a file loaded from WP Core (Wordpress core) is that the file path contains “wp-includes”, which is where all WP Core files are stored.
Polyfill is for fallback rendering for old unsupported browsers (internet explorer), which is unnecessary.
Regenerator Runtime
Another WP Core file which is unneeded in most cases. Elementor does not need this file for any functionality, and can be safely delayed or disabled. A few plugins depend on this file (rarely), so test your site after disabling/delaying it, but in the vast majority of cases it should be safely removable.
Cloudflare Mirage
There are a few things we can glean from this request. First is that Elementor.com is using Cloudflare as their CDN. Second is that it is using the Mirage Image Optimization feature. I recommend avoiding this as image optimization should be done locally on your webserver, and a CDNs feature like this is a band-aid, not an actual solution. If Mirage is truly desired, it should be used as a supplement after images have already been optimized manually or with an image optimization plugin. It is not a replacement for image optimization.
Elementor.com has made the mistake of relying entirely on Mirage for image optimization, which is why they have a lot of large, bloated images on the page.
Images Loaded JS
The imagesloaded javascript file is another WP Core javascript file which can usually be safely delayed. It is usually loaded by default. This file is sometimes unneeded in the initial render even when images are in the viewport/above the fold when the page loads. Sliders can potentially depend on this file however, so make sure to test delaying it or even unloading it on a staging site first before pushing the change to production.
i18n
Another WP Core file which is loaded by default on every Wordpress site. This file is used for translation functionality. If your site is not multi-lingual, this file is extraneous and can be safely unloaded or delayed. You will get an error in your browser console if this is unloaded or delayed, but this error is ignorable and is not detrimental to performance and does not harm functionality.
Hooks.min.js
Another WP Core file which is loaded by default. Many plugins and themes depend on this js file for functionality, but most of them do not require it to load immediately, which means it can safely be delayed in most cases. I do not recommend unloading this file, and recommend delaying it instead.
Google Tag Manager
Elementor is using Google Tag Manager to implement some analytics tracking. This file is delayable which will mitigate its performance impact, but be aware delaying Tag Manager will fuzz your analytics a little bit, especially bounce rate statistics. This is a worthwhile tradeoff, because the real goal is increased traffic, conversions and sales. Data for data’s sake ignores the actual goals of a website.
Captcha
Without expanding this request it is not immediately obvious that this is for a captcha, even though the first screenshot references google.com on the right side. However, once expanded we can see the word “recaptcha” in the url, which is a direct indicator that a captcha from Google is in use.
Captchas are extremely performance intensive, and add quite a bit of page weight. Captchas should be avoided entirely when possible and a different solution should be implemented. Since the site is already using Cloudflare, if a captcha is truly needed, Cloudflare’s captcha should be used instead. There are alternative solutions to captchas for forms and bots listed further down in the guide.
ScrollTrigger.min.js
We can make a few inferences based on this request. One is that the functionality is related to actions triggered by scrolling. Second is that this is a third party request to an external domain, in this case to a CDN.
This javascript file is triply problematic. It adds 17.2 kb of page weight, which is already substantial for a javascript file and can cause a significant amount of additional processing time, even with the relatively small file weight.
Secondly, because it makes an external request to a separate domain, it introduces round trip network latency because of the HTTP request.
Third, all javascript files are parser blocking, which means the Blocking Time metric (also sometimes referred to as a TBT on some speed tests) is going to increase, which also hurts pagespeed scores.
This file should be removed entirely if possible, and if it is needed it should be delayed if doing so does not break the intended functionality.
To Be Continued
There are another 120-130 files left in the waterfall for elementor.com left to add to this case study, I’ll be continuing on with the analysis soon.
Beyond Waterfall Charts
BuiltWith
Some plugins and services (analytics for instance) cannot be identified from the waterfall tree. To identify those plugins, BuiltWith is a fantastic tool which allows plugin identification.
BuiltWith can identify common plugins explicitly. Here we can see Yoast, ConvertBox, Google Tag Manager for Wordpress and WP Rocket are directly identified. TypeKit is also in use.
Common Misconceptions
Pagespeed Lab Scores Don’t Matter
A common misconception is that Google Pagespeed Insights lab scores do not matter. They are the metrics you are optimizing for, because any speed test can only measure “synthetic” lab data which is simulated under controlled conditions. They use a simulated version of the lowest common denominator phone with weak hardware, on a bandwidth limited connection. The tests are meant to simulate an average “worst case scenario” when a user loads a site.
These scores are very accurate within that context. Improvements in your lab scores via optimization will directly translate into improvements in real world performance.
It’s Impossible To Create A Performant Site With A Page Builder
A common refrain is that you must avoid page builders entirely because they are bloated and slow. This is only a half truth. Any pagebuilder will be slow without optimization. Oxygen and Bricks are relatively well optimized out of the box, but if you put large images above the fold, your LCP and speed index are still going to score poorly. Every page builder can benefit from caching, database caching, css optimization, etc. Bricks and Oxygen included.
Once optimized, a well or even a poorly coded builder can easily achieve scores over 90 on a Mobile Pagespeed Insights test.
Server Level Page Caching Is A Replacement For Wordpress Caching Plugins
This is a very common misconception, and incorrect. Wordpress level html page caching with plugins is complementary to server level page html caching, and they should be used simultaneously.
Workflow and Interaction
Initial Request Handling
When a user requests a page for the first time, the request goes through the web server (e.g., NGINX, Apache). If the server-level cache (e.g., Varnish, NGINX FastCGI) doesn't have a cached version of the page, it forwards the request to the application (WordPress).
WordPress-Level Page Caching
The WordPress caching plugin (e.g., Flyingpress, W3 Total Cache) checks if it has a cached static HTML version of the requested page.
If a cached version exists, it serves the cached static HTML content. If not, WordPress dynamically generates the page, and the caching plugin saves a static HTML version for future requests.
Server-Level Caching
The generated or cached static HTML content from WordPress is then sent back to the web server.
The server-level cache can now cache this static HTML content for even faster delivery on subsequent requests.
Caching Layers Sequence
First Request
User request → Web server (server-level cache miss) → WordPress (WordPress-level cache miss) → WordPress dynamically generates page → WordPress caching plugin saves static HTML → Server receives static HTML → Server-level cache saves static HTML.
Subsequent Requests
User request → Web server (server-level cache hit) → Static HTML is served from server-level cache.
If server-level cache misses
User request → Web server (server-level cache miss) → WordPress (WordPress-level cache hit) → WordPress serves cached static HTML → Server receives and caches static HTML.
Summary of the Interaction
Server-Level Cache
Operates first, caching the entire response at the web server level for very fast delivery. It handles the request before it reaches WordPress.
WordPress-Level Cache
Acts as a secondary cache that handles requests if the server-level cache misses. It generates or serves static HTML from within the WordPress application.
Layering Caches creates a multi-tiered caching system
The server-level cache (e.g., NGINX, Varnish) serves as the first line of defense, caching and serving static HTML quickly without involving PHP or WordPress.
The WordPress-level cache (e.g., Flyingpress, W3 Total Cache) provides a secondary layer, ensuring that even if the server-level cache misses, a cached version within WordPress can be served without regenerating the page dynamically.
Why Page Caching Plugins Are Necessary
Optimized HTML Generation
WordPress caching plugins often do more than just caching. They also optimize the HTML output by removing unnecessary characters, comments, and whitespace, which reduces the overall size of the HTML document.
Granular Control
WordPress caching plugins allow for more granular control over what is cached and how. This can include specific rules for logged-in users, e-commerce pages, or other dynamic content that server-level caching might not handle as efficiently.
Reduced Backend Load
While server-level caching reduces the load on the web server, WordPress caching plugins reduce the load on the WordPress application itself. This means fewer database queries and PHP executions, leading to faster response times and better scores.
Improved TTFB (Time to First Byte)
WordPress caching plugins can improve the TTFB by serving static HTML content directly from the WordPress layer. This immediate response helps in achieving better PageSpeed scores.
Cache Warming
Some caching plugins provide a feature to pre-cache or "warm-up" pages, ensuring that visitors always get the fastest possible response.
Practical Example
Even with server-level caching enabled, consider the following improvements a WordPress caching plugin might bring
Before Plugin Installation
Server-level cache is enabled, but the initial HTML generation might still involve unnecessary database queries and unoptimized HTML output. PageSpeed scores are good but not optimal.
After Plugin Installation
The WordPress caching plugin starts serving a cleaner, optimized HTML version of the page.
Additional optimizations like minification, image compression, and reduced HTTP requests further enhance performance.
The combined effect results in lower page load times, improved TTFB, and higher PageSpeed scores.
The immediate improvement in PageSpeed scores after adding a WordPress caching plugin, even with server-level caching enabled, is primarily due to the additional optimizations and efficiency improvements the plugin brings to the HTML generation and overall resource handling. These enhancements go beyond simple caching and contribute significantly to better performance metrics.
A Bloated DOM Will Hurt Performance
This is another half truth. The whole truth is that a bloated DOM in conjunction with a large HTML document weight will significantly hurt your pagespeed. Your DOM can be large if your document weight is low without significant effects on performance.
Elementor for instance does add a lot of DOM elements which is unfortunate as it makes targeting elements with custom css more difficult, however once optimized the performance impact of the excessive DOM size is mitigated. The most significant factor regarding optimization is always page/asset weight.
Ideally a page's DOM size should be below 1000 elements to minimize performance impact. Once the DOM size increases beyond that you will see minimal drops in pagespeed. A page with 1500 or even 2000 can render quickly if the HTML document weight is low. If you exceed 2000 elements, then you will begin to encounter noticeable (but relatively small) drops in pagespeed scores, even with a smaller HTML document.
Pagebuilder Sites Cannot Handle High Server Load On High Traffic Sites
This is also a partial fallacy. An unoptimized pagebuilder created site will easily collapse under the strain of excessive traffic. The database server (MySQL or any other database variant (such as MariaDB)) will quickly be overwhelmed by an influx of database queries, even with object caching.
To mitigate the impact of these queries, ensure that all autoload options that can be set to "no" are configured accordingly. Optimizing your pagebuilders CSS, Javascript and any other files that can be optimized will reduce Database queries which will reduce the strain on your server. An optimized Elementor site can easily handle 100k concurrent users on a mid-grade VPS, and that could potentially scale into millions of concurrent users.
Elementor can perform just as well as Gutenberg can when properly optimized.
Headers and Footers Must be Hardcoded In CSS instead of Your Builder For The Best Performance
While hardcoding Headers and Footers in CSS can have performance benefits, the impact is minimal at best when using the Remove Unused CSS feature with optimization plugins. Many Pagebuilders will generate bulky CSS files for many elements, including headers and footers, which can be mitigated with a simple toggle.
Caveat: Some Page Builders will receive greater benefits from hardcoding Header and Footer than others.
Pagespeed Only Affects SEO
While the primary motivation for improving page speed is often better SEO rankings, an often overlooked factor is customer retention. Increased visitor retention can lead to a substantial increase in revenue, in addition to simply increasing your total visitor count and reducing bounce rate. For instance, reducing your bounce rate from 60% to 30% can result in significantly higher revenue/conversions, more sales, and improvements in actions like contact form fill-outs.
The benefits of enhanced visitor engagement/retention extend beyond just attracting more visitors, the importance of retaining visitors cannot be overstated.
Pagespeed Scores Don’t Matter
This is one of the most patently absurd refrains ever to be found when discussing pagespeed. Pagespeed scores absolutely matter. As discussed in the Speed Testing and Inferences sections, Pagespeed scores are a composite of various metrics which result in a singular composite score out of 100.
The total scores diagnostic value is a measure of progress towards the desired optimization metrics, but the score in and of itself does not relay useful diagnostic information. The sub-metrics which the composite Pagespeed score is based on (TTFB, INFP, INTP, CLS, Speed Index, LCP, FCP, Blocking Time (TBT)) are the metrics with utility, and have specific meanings explained above. These metrics are quantifiable, with clear indications of why they are relevant to a user's experience on the website.
When someone says that these metrics are unimportant, this indicates an underlying misunderstanding of what these metrics mean.
Included here once again are their definitions:
Escape Creative Article
https://escapecreative.io/google-pagespeed-insights-explained/
This page has a decent overview of the Metrics and what they mean.
Corelogix Article
https://coralogix.com/guides/real-user-monitoring/core-web-vitals/
Another useful article with somewhat in-depth explanations of various Core Web Vitals metrics and their definitions.
Google’s Core Web Vitals Documentation
https://web.dev/articles/vitals
Core Web Vitals documentation and definitions straight from Google.
Wordfence Is A Requirement
Half true. Files should be scanned semi-regularly only on a staging site. Wordfence has a significant detrimental effect on site performance. A well optimized site can drop 10-15 points on a mobile Pagespeed test just by activating Wordfence.
Your staging server’s performance is irrelevant to users and will have no impact on conversions.
Instead of using Wordfence’s firewall functionality, a lightweight application level (Wordpress) firewall plugin is recommended (Ninja Firewall and BBQ firewall are relatively good options).
Instead of relying solely on Firewall plugins, it is recommended to have three layers of firewalls. One at the WAF level (Cloudflare for example). A server level firewall (such as the 8G/7G firewall for Apache/NGINX), and finally an application level firewall for Wordpress. Wordpress should be the absolute last line of defense, if bots are getting through the first two layers there’s already a major problem. Additionally, adding in Patchstack is highly recommended.
Security
Security Measures Performance Impact
High CPU Load And Excessive RAM Pressure
High CPU Load and/or excessive RAM pressure will slow your site to a crawl, and in many instances may completely take down your server temporarily until an infection has been remediated (removed).
Malware’s Detrimental Performance Impact
Sudden unexplained high CPU load or excessive RAM pressure may indicate a Malware infection. Security mitigations are critical to resolving issues related to Malware, however they will not increase the performance of a website, they will only prevent detrimental effects up to the existing baseline performance.
An example: A site is scoring in the 60s without additional CPU load and RAM load before a security incident such as a Malware infection or DDOS. Once the site starts to experience the attack, the average score jumps down to the 30s.
Remediating a malware infection will return the site’s score back to baseline, i.e. the 60s in this hypothetical. Performance of the website will not improve from baseline performance sans the malware, only the negative effects of the malware infection/DDOS/other attack type will be mitigated.
Mitigations Performance Impact
In fact, security solutions and mitigation implemented to remediate malware, infection protection methods such as firewalls and security plugins can and will have a detrimental effect on baseline performance. However the tradeoff of preventing these kinds of attacks with a small performance hit may be worth it if your site is experiencing cyberattacks, especially regular cyberattacks.
Brute Force Attacks
Is It WP Article
https://www.isitwp.com/stop-brute-force-attacks-wordpress-website/
Basic article which has a few methods to mitigate brute force attacks
Brute Force attacks means that you receive an excessive amount of login attempts which can cause High CPU Load and saturate the servers RAM. Thousands of login attempts can slow down your site and even cause it to crash. It can disrupt your user experience which means visitors will leave your site since it won’t load fast enough by absorbing all of the server’s resources.
Limit Login Attempts Reloaded (Free)
https://wordpress.org/plugins/limit-login-attempts-reloaded/
Limit Login Attempts Reloaded functions as a robust deterrent against brute force attacks. It restricts the number of login attempts allowed. This applies not only to the standard login method, but also to XMLRPC, Woocommerce, and custom login pages.
Disable XML-RPC
Why Should I Disable XML-RPC?
DDoS (Distributed Denial-of-Service) attacks are when a bad actor overloads a web server with internet traffic to stop other users from accessing your online websites and services. Attackers use the PingBack feature to send pingbacks to numerous sites, and with XML-RPC, giving the attacker an unlimited amount of IP addresses to distribute the DDoS attacks.
Brute Force Attacks
XML-RPC.php is used to test different combinations of usernames and passwords. This security hole allows them to automate the attack with a command that pushes thousands of combinations at once, bypassing the security of your website and gaining access to it.
How To Disable XML-RPC
Asset Cleanup (Free and Pro)
Asset Cleanup is a highly recommended multi-function plugin which largely focuses on selective CSS and JS asset disabling, as well as the ability to fully disable plugins from loading on selected pages.
Asset Cleanup also has functionality to disable XML-RPC.
Simple Disable XML-RPC (Free)
https://wordpress.org/plugins/simple-disable-xml-rpc/
Simple Disable XML-RPC’s sole function is to disable XML-RPC, with a sizable amount of configurability. Very lightweight, the plugin is just 10 kb total.
Firewalls
Firewall Types
Firewalls will always have a negative performance impact on your site. Security vs performance is a trade-off that must be considered/evaluated when implementing various security measures.
Differences between WAFs and Network/Server Layer Firewalls
Firewalls Performance Impact
IJSTR Article
https://www.ijstr.org/final-print/mar2017/Impact-Of-Firewall-On-Network-Performance.pdf
A comprehensive analysis of the performance impact of Firewalls on website performance.
WAF Network Performance Impacts
Aisnet
https://aisel.aisnet.org/cgi/viewcontent.cgi?article=1007&context=wisp2020
ResearchGate
Fortinet Article
Performant Server Level Firewalls
7G NGINX Firewall (Free)
https://perishablepress.com/7g-firewall-nginx/
Jeff Starr’s performant 7G firewall for NGINX. The 8G version for NGINX is currently in development.
8G Apache Firewall (Free)
https://perishablepress.com/8g-firewall/
Jeff Starr’s 8G Apache Firewall.
Performant Web Application Firewalls (WAFs)
Web Application Firewall
A Web Application Firewall (WAF), usually from a CDN, works at the network layer to block malicious traffic before it reaches your webserver. Cloudflare has a solid WAF, Microsoft has Front Door for Azure, there are plenty of them out there. This allows much more granular control and regularly updated cloud definitions for threats as they emerge.
A WAF will also let you have some nifty features that allow you to blanket ban countries to restrict traffic which will reduce server load (if your site is being attacked regularly) and hacking attempts.
BunkerWeb (Free)
https://github.com/bunkerity/bunkerweb
Free Flexible and Configurable Server Level WAF.
NGINX App Protect WAF (Free)
https://gigaom.com/report/high-performance-web-application-firewall-testing/
In GigaOm’s tests, NGINX App Protect was found to be more performant than the 3 Cloud WAFs they tested.
Configuration Guide
https://docs.nginx.com/nginx-app-protect-waf/v4/configuration-guide/configuration/
Cloudflare WAF (Free and Pro)
https://www.cloudflare.com/application-services/products/waf/
A performant WAF developed by Cloudflare. Like any firewall it has a negative performance impact, but Cloudflare’s is relatively well optimized. Best combined with Cloudflare’s Argo as well as other Cloudflare network and traffic performance optimization features.
Cloudflare Firewall Rules for Securing WordPress Websites
https://gridpane.com/blog/cloudflare-firewall-rules-for-securing-wordpress-websites/
PHP Errors
PHP errors can potentially have significant detrimental effects on performance.
Debug Log Manager (Free)
https://wordpress.org/plugins/debug-log-manager/
Debug Log Manager can enable multiple types of logging automatically which is a great way to catch PHP errors, which can relay a bunch of diagnostic information to both discover and remediate PHP errors. Most plugins and themes have PHP errors, even if they are minor, and every PHP error has the potential to have a negative performance impact.
If you have custom code, Debug Log Manager can help identify problems with the code you have written, and if you have PHP errors from plugins or themes it will give you clear information to report as a bug to the developer so they can implement a fix.
Query Monitor (Free)
https://wordpress.org/plugins/query-monitor/
Query Monitor reports PHP errors.
Security Plugins
WP Beginner Article
https://www.wpbeginner.com/plugins/how-to-scan-your-wordpress-site-for-potentially-malicious-code/
Very basic article which explains how to use a security scanner plugin
GOTMLS (Free)
https://wordpress.org/plugins/gotmls/
Lightweight anti-malware plugin
Plugins To Avoid
Wordfence
Do not use Wordfence on your live site. It’s insanely bulky and very detrimental to performance. Wordfence is a good way to scan your site for malware, but only use it on staging! Firewall and scanner functionality can easily be obtained with other more performant plugins.
Two Factor Authentication
Two Factor (Free)
https://wordpress.org/plugins/two-factor/
Official 2 Factor login plugin from the Wordpress core dev team. Lightweight and great support for any issues.
Fluent Auth (Free)
https://wordpress.org/plugins/fluent-security/
Lightweight two factor authentication plugin
BBQ Firewall (Free)
https://wordpress.org/plugins/block-bad-queries/
Neat application level firewall from Jeff Starr. Recommended to layer this with the 8G server level firewall as well as a WAF.
Block Bad Bots
Banhammer (Free)
https://wordpress.org/plugins/banhammer/
Banhammer gives you full control over who and what may access your site.
Security Headers
Security Headers Scanner (Free)
Your site should score an A on securityheaders.com. This is actually very easy to achieve!
Headers Security Advanced & HSTS WP (Free)
https://wordpress.org/plugins/headers-security-advanced-hsts-wp/
Headers Security Advanced & HSTS WP (Free)
https://wordpress.org/plugins/headers-security-advanced-hsts-wp/
The Headers Security Advanced & HSTS WP project implements HTTP response headers that your site can use to increase the security of your website.
The plug-in will automatically set up all Best Practices (you don’t have to think about anything), these HTTP response headers can prevent modern browsers from running into easily predictable vulnerabilities.
The Headers Security Advanced & HSTS WP project wants to popularize and increase awareness and usage of these headers for all wordpress users.
Patchstack (Freemium)
Patchstack can apply virtual patches to vulnerable plugins before the plugin is even updated by the developers, which can prevent your site from being hacked. Patchstack is one of the best vulnerability analysis companies and are frequently the ones to find zero days. Highly recommended.
Patchstack has a free tier, but to get the really good, useful stuff you need one of the paid plans.
Hardenize (Free)
Hardenize: Comprehensive web site configuration test
Scan your site for common security issues.
No Unsafe Inline Scripts (Free)
https://wordpress.org/plugins/no-unsafe-inline/
Linux Server Hardening Guide
https://ivansalloum.com/comprehensive-linux-server-hardening-guide/
SOC Compliance for Wordpress
https://www.kevinleary.net/blog/soc-compliance-wordpress-websites/
Imunify360 (Paid)
A very comprehensive security suite. Does a lot of nifty things I haven’t seen other security providers have. Janky early 2000s looking interface though.
Kevin Leary’s Blog
https://www.kevinleary.net/blog/securing-a-wordpress-website/
Audit Log
CoreActivity Log (Free)
https://wordpress.org/plugins/coreactivity/
Free CoreActivity Log is a free plugin for monitoring and logging various activities. The plugin is highly modular, with events registered and controlled by multiple Components.
Currently, the plugin has 28 components with a total of 174 events, with direct integration with 12 popular plugins. Out of all the options for audit logging, this is the most comprehensive.
Stream (Free)
https://wordpress.org/plugins/stream/
The plugin records WordPress user and system action to the Stream logs. Every logged-in user action is displayed in an activity stream and organized for easy filtering by User, Role, Context, Action or IP address. Admins can highlight entries in the Stream log—such as suspicious user activity—to investigate what’s happening in real time. Stream also allows you to configure email alerts and webhooks for integrations like Slack and IFTTT to notify you and your team when something has gone wrong.
Stream is entirely free with no pro plan
Aryo Activity Log (Free)
https://wordpress.org/plugins/aryo-activity-log/
Another activity monitoring plugin, also entirely free.
DecaLog (Free)
https://wordpress.org/plugins/decalog/
While DecaLog doesn’t specifically log user events, it does have the wonderful function of logging various events on a site that are not logged by either Stream or Aryo, which gives you different insights into background processes, which makes it easier to catch malware in the act.
If you have trouble interpreting the results, I suggest screenshotting the logs and then uploading it to an AI bot to interpret them for you. Paid AI bots can be accessed for free via Poe.
Automatically Update Server Software
Outdated Server Software
Outdated software such as old PHP versions, old MySQL versions, old NGINX versions, Old Apache versions, old varnish versions etc can potentially be big security issues. Patches for these pieces of software are regularly released, and it’s highly recommended to regularly update the software installed on your server to mitigate security incidents.
Schedule System Cron Jobs (Free)
These updates can automated via Cron Jobs
Hive Velocity Article
https://www.hivelocity.net/kb/how-to-schedule-system-updates-and-tasks-using-cron-jobs/
System Cronjob Generators
Free System Cronjob Generators
Cronhub (Free)
Crontab Guru (Free)
Crontab Generator (Free)
https://crontab-generator.org/
File Change Monitoring
Website File Changes Monitor (Free)
https://wordpress.org/plugins/website-file-changes-monitor/
Get alerted via email of file changes on your WordPress sites to boost reliability & security
High CPU Load And Excessive RAM Pressure
Security Incidents
In addition to Malware Infections, Brute Force Attacks, DDOS’s and other security incidents, high CPU usage and RAM pressure can be caused by other factors.
Excessive Database Load
A large amount of autoloaded options, excessive amount of revisions, excessive amounts of transients, bloated Database tables, slow queries, lack of Object Caching, lack of indexes on specific tables can all cause high CPU Load and Excessive RAM pressure.
Mitigations
Excessive Amount Of Wordpress Cronjobs
Disable Wordpress Cronjobs And Enable Server Cronjobs (Free)
WP Beginner Article
System Cronjob Generators
Free System Cronjob Generators
Cronhub (Free)
Crontab Guru (Free)
Crontab Generator (Free)
https://crontab-generator.org/
Cloud Server Autoscaling (Paid)
Many Cloud VPS providers and Serverless providers have an auto-scaling functionality which will automatically upgrade and downgrade your server resources based on server load. This service is on a usage basis and does not have a flat monthly cost. Auto-scaling is a necessity on high traffic sites.
Too Many WP-Admin Tabs Open Simultaneously
Having too many WP Admin Backend tabs open at the same time can cause excessive CPU load and RAM pressure, even with other mitigations applied. Modifying the Wordpress Heartbeat interval can mitigate some of the performance impact of numerous WP-Admin tabs in your browser.
Wordpress Heartbeat
WP Beginner Article
https://www.wpbeginner.com/plugins/how-to-limit-heartbeat-api-in-wordpress/
Very short explainer Wordpress’s Heartbeat functionality.
Dynamic Frontend Wordpress Heartbeat Control (Free)
https://wordpress.org/plugins/dynamic-front-end-heartbeat-control/
The plugin offers an efficient approach to dynamically control the front-end heartbeat, automatically determining the optimal settings for your website. By analyzing user usage, WordPress site assets, and server environment, it empowers your WordPress performance to achieve its full potential.
Once activated, it immediately begins improving performance without any need for user intervention. It intelligently adjusts the heartbeat interval in real-time, adapting to the changing demands of your website. This dynamic control guarantees an optimized and efficient heartbeat system, resulting in improved overall performance and responsiveness.
Admin and Site Enhancements (Free)
https://wordpress.org/plugins/admin-site-enhancements/
Admin and Site Enhancements allows you to control the heartbeat frequency as well. Less flexible than Dynamic Frontend Heartbeat Control.
Tune MySQL Configuration Settings (Free)
Automatic Tuning
MySQL Tuner (Free)
https://github.com/major/MySQLTuner-perl
MySQLTuner is a script written in Perl that allows you to review a MySQL installation quickly and make adjustments to increase performance and stability. The current configuration variables and status data is retrieved and presented in a brief format along with some basic performance suggestions.
MySQLTuner supports ~300 indicators for MySQL/MariaDB/Percona Server in this la
Releem (Paid)
Releem will autotune your MySQL configuration on a VPS automatically and adjust the configuration based on both the current and average MySQL load on the server.
Reduce Autoloaded Options
Sweeppress (Free)
https://wordpress.org/plugins/sweeppress/
Modify Autoload Settings or delete the autoload options
AAA Option Optimizer (Free)
https://wordpress.org/plugins/aaa-option-optimizer/
Another Autoload Option Optimization plugin
Object Caching
Docket Cache (Free)
https://wordpress.org/plugins/docket-cache/
Docket cache can be used when you cannot install Redis(some shared hosting plans don’t have it for instance). Docket cache is an object cache, just like Redis is, except it functions at the Wordpress level as opposed to the server level. It can have better performance than Redis in many cases.
Redis (Free)
Dragonfly Redis Performance Optimization Guide
https://www.dragonflydb.io/guides/redis-memory-and-performance-optimization
Extensive article on optimizing Redis performance.
General Redis information for Wordpress
Redis is also a server level service, which you will need a Wordpress plugin to use as a connector to the server level redis service. REdis must be installed on your VPS/by your hosting provider for the plugin to work.
Redis Object Cache (Free)
https://wordpress.org/plugins/redis-cache/
Redis Object Cache developed by Till Krüss.
Poorly Coded Plugins And Themes
Poorly Coded PHP Scripts In Plugins And Themes
Many Themes And Plugins which are coded poorly have both a large amount of PHP scripts, as well as poorly coded PHP scripts which can overwhelm a server when it experiences even moderately high traffic.
Diagnosis
F12 Profiler (Free)
https://wordpress.org/plugins/f12-profiler/
F12 Profiler is a great plugin to diagnose plugin and theme performance impacts. It adds a section to the Wordpress admin bar which can display the load time impact of each.
It hasn’t been updated in quite a while, but it still works perfectly from my testing.
Code Profiler (Free and Pro)
Code Profiler can be used to diagnose which plugins/theme is causing high CPU Load and Excessive RAM pressure
Poorly Configured Or Lack Of Page And/Or Server Caching
Poorly configured or lack of caching can severely impact CPU load and cause Excessive RAM pressure.
Very simple solution, simply enable server caching as well as page caching. This is covered ~halfway down in this guide.
Direct Link:
https://docs.google.com/document/d/1ncQcxnD-CxDk4h01QYyrlOh1lEYDS-DV/edit#heading=h.3cqmetx
Reinstall Wordpress Core (Free)
WP Beginner Article
https://www.wpbeginner.com/wp-tutorials/how-to-uninstall-and-reinstall-wordpress/
When all else fails, sometimes reinstalling Wordpress Core can resolve High CPU Load and Excessive RAM Pressure. This is very rarely needed.
Fix Redirect Chains
You should always rectify redirect chains. Your site should either be set to have a single https redirect to https://yourdomain.com or a single redirect directly to the https://www.yourdomain.com version.
You should never have an intermediary redirect between the unprotected SSLless http version to the https www version if you choose to use www.
E.G. http>https://>https://www. This extra hop will always introduce additional latency. Make sure that you eliminate it.
To reiterate, you should only have the bare http link which is immediately redirected to the correct https link in your waterfall chart on gtmetrix.
If it’s www, it should be http://yourdomain.com>https://www.yourdomain.com. You should not have an intermediary redirect to https://example.com.
If your domain has no WWW link, it should be http://yourdomain.com> https://yourdomain.com with no intermediary redirect in the middle.
This can be done either through an htaccess/nginx rule, a redirection plugin or via your CDN. Cloudflare allows you to create a redirect rule that will always forward http links straight to www, skipping the intermediary redirect. Your SEO plugin will usually also have this option, but doing it via the wordpress side will introduce additional latency. You will want to implement this on the server level or via your CDN to achieve the lowest latency.
Plugin option and articles
https://wordpress.org/plugins/safe-redirect-manager/
https://wordpress.org/plugins/redirection/
Your SEO plugin almost certainly has an option for redirects as well. Plugin fixes may have slightly worse performance than implementing redirections via .htaccess or NGINX configuration files, but are easier to manage.
Manual identification of redirects and how to fix them
https://kinsta.com/blog/remove-the-following-redirect-chain-if-possible/
https://prerender.io/blog/do-redirect-chains-hurt-seo/
https://tillison.co.uk/blog/how-to-fix-redirect-chains-and-loops-in-wordpress/
https://www.semrush.com/blog/301-redirect-htaccess/
Server and Network Performance Monitoring
Activate New Relic only when diagnosing issues on your live Site Or Preferably On Staging
New Relic and Signoz have performance overhead and therefore will have negative performance impacts on your server. If possible, only activate New Relic or SigNoz when troubleshooting/logging/analyzing issues to avoid any performance impacts they may cause by leaving them active long term.
New Relic (Free and Pro)
New Relic Open Source Projects (Free)
https://github.com/orgs/newrelic/repositories?type=all
New Relic has free open source github projects, which basically function as a free community edition as well. A fantastic option for observability and performance statistics.
https://docs.newrelic.com/docs/network-performance-monitoring/get-started/npm-introduction/
New Relic is a server level application that monitors a variety of network traffic and statistics which provides a high level of observability into performance issues as well as troubleshooting. New Relic is an invaluable diagnostic tool that is highly recommended for any dev to integrate into their toolkit.
It monitors all aspects of your web stack performance.
Automation Script for Automatically Installing Open Source New Relic On Most Linux Distributions
https://docs.google.com/document/d/1wtIcwh4vjAEIr_71WioxIUCV1q3DtIzhQKYxDz6RcbY/
SigNoz (Free and Pro)
https://signoz.io/docs/install/docker/
https://github.com/signoz/signoz
SigNoz has an Open Source community version which is self-hostable, which can be used entirely for free. A good alternative to New Relic. Slightly easier to install than New Relic.
Wordpress Optimizations
Should I use every optimization opportunity in this guide simultaneously?
Yes! Every feature listed here is complementary and can and should be used together simultaneously. Implement every feature that you can for the best performance benefit. Contrary to popular belief, there is no such thing as “too many” plugins. A plugin is simply a bundled snippet of code prepackaged and developed by a plugin developer. A plugin could just be a single simple PHP function. It’s the quality and content of the code inside a plugin which is what counts.
If the plugin is lightweight and doesn’t interfere with another, there is no harm running as many plugins as you’d like. A properly optimized site could run 90 plugins simultaneously without performance issues. Unoptimized plugins' negative effects are additive, so make sure to only choose quality, optimized plugins to avoid slowing down your site.
On the other hand, you should only have debug and analysis plugins active when they are needed, as they will cause a performance hit and slow your site down if left active. These should preferably only be enabled on a staging site to avoid slow downs for users.
Even when debug plugins are well optimized, there are a lot of hits to the database, so only use them on staging or enable them on your live site for as short a time as necessary to get the information you need.
Use as few plugins as necessary to achieve whatever design you’d like, but there is simply no such thing as too many optimization plugins(or other plugins in general if they are well optimized). Optimization plugins are intended to improve your performance, not hurt it. You will not bog your site down running all of the optimization stack simultaneously. Implementing all of these techniques together is how to achieve optimal scores.
Best practices
Activate plugins you are testing on staging.
Do not activate any plugins on your live site that you are not certain that you want. Always test them in staging or on a local wordpress development server. This cannot be stressed enough. Some plugins introduce lag that cannot be completely removed even by cleaning the database tables/disabling autoload options or deleting the options entirely.
Take Regular Backups
Create backups often when you are working on the Wordpress side. You don’t want to lose the work you’ve put in due to an easily avoidable mistake which causes you to restore. It’s best to create them after every change to prevent loss of progress.
Sometimes a plugin or change will create a critical error(relatively rare), lock you out of a specific section of the admin backend, prevent the admin backend from loading entirely or other weird behavior. When this occurs, the only solution is to restore to a working backup.
I’ve gained some performance back by removing the database entries that some plugins have created, but there have been times you cannot reclaim all of the lost performance, and you will have to revert to a backup.
Always test your new plugins in a non-live staging environment before you commit to them and implement them on your live site.
Choose Quality Plugins
If there are multiple plugins that all suit your needs for a certain task, pick the most optimized one, because it will run the best. If there are 3 plugins, one is 300 kb, 700kb, and 1.2MB, the 300 kb plugin is the one that will perform best most of the time as a general rule(although this is not always the case). Always compare the file sizes of the plugins, but the only real way to tell is to test them one at a time. Comparing file sizes to get a likely ballpark for the pagespeed impact is a good rule of thumb however. Plugins with a smaller file size will usually perform better, so it's a good heuristic to judge a plugin’s likely impact.
All of the plugins listed in this guide are performance optimized. Any of the plugins for specific features(charts, SEO, tables, custom fields, backups, user management, woocommerce, forms, LMS’s, support plugins, etc) that I’ve included have been intentionally selected as they have optimized, performant code. If you build your site with only plugins listed in this guide, your page weight will be low even prior to optimization.
Disable Unneeded Database Autoload Options
After you install a plugin, make sure to inspect your database with Advanced Database Cleaner to check how many tables and plugin options were added. Many plugins will create too many options set to autoload, which can seriously slow your site down. Most options can generally be set to autoload no without impacting functionality, but that is not always the case.
Disabling autoload could have severe negative impacts if you disable the wrong option, in some extreme cases you can even be entirely locked out of the backend and trigger critical plugin errors. Disabling autoload options for performance is always a good idea for performance, but be careful which ones you disable and always test your changes on staging first!
ALWAYS test disabling autoloading options for active plugins on staging before pushing the changes live. There’s trial and error involved, make sure you have backups before changing autoload settings on the live site!
Remove Unneeded Database Entries
If a plugin adds too many database tables and options and you want to remove the plugin, you have to delete the database entries with Advanced Database Cleaner or another database cleanup plugin in the database section after deleting the plugin as most plugins leave all of their options and tables in the database when deactivating/deleting them. Many plugins set options to autoload even if they do not need to be autoloaded, so make sure to disable as many autoloaded options as possible(without breaking functionality).
Automatic plugin and theme updates
Keep themes and plugins up to date.
Keep your themes and plugins up to date for security and performance reasons. Devs generally will frequently issue performance, feature and security updates for their plugins, and they should ideally always be kept up to date.
Only set some of your plugins that do not have critical site functionality to auto-update. You wouldn’t want to auto-update a pagebuilder for instance. Some plugin updates can completely break certain functionality by introducing new bugs, so it’s a good idea to have backups before updating in case you need to revert. Test on staging when updating plugins. In very rare cases even a non-critical plugin can break your site, so as always, take regular backups!
Theme updates could break your site as well, especially since if you’re following the advice in this guide, you should be disabling everything humanly possible in your theme and work exclusively with some sort of page builder or custom code your site if that’s your preference.
WP-Config Memory limit constant
You can paste it into your wp-config file just above the line “/* That's all, stop editing! Happy publishing. */” just make sure to modify the value to match whatever you set in your PHP settings.
E.g:
define( 'WP_MEMORY_LIMIT', '256M' );
Note: The memory limit is how much RAM is allowed to be allocated to a single PHP process. You should not have any plugins or scripts taking up that much RAM. If you do, I recommend you switch plugins. The default recommendation on most guides is 256M. If you must raise the value above 256M, do not set the value to exceed 512M. 512M should be the cap.
Disable XML-RPC
Disable XML-RPC. There are a variety of ways to disable it. I use Asset Cleanup to do so, but there are many plugin options. This will enhance your site’s security and also prevent some ddos attacks. You can just delete the file, XML-RPC is not used by 99% of wordpress sites, you only want XML-RPC active if it’s necessary for a plugin to function.
Diagnosis and Analysis
Database Tools
Database Query Analysis
Query Monitor (Free)
https://wordpress.org/plugins/query-monitor/
Helps to debug database queries, PHP errors, hooks and actions, block editor blocks, enqueued scripts and stylesheets, HTTP API calls, and more
Add-Ons (Free)
https://querymonitor.com/help/add-on-plugins/
Collection of Query Monitor Addons to extend Query Monitor’s functionality.
Fluent Query Logger (Free)
https://wordpress.org/plugins/fluent-query-logger/
Query Logger with Selective Logging Functionality.
WP Database Snapshots (Free)
https://wordpress.org/plugins/wpvivid-snapshot-database/
WPvivid Database Snapshots allows you to quickly create snapshots of all tables in your WordPress database.
Making a database snapshot is much faster than making a database backup. If you need a quicker rollback solution for safely testing WordPress database-related changes, use a snapshot.
Enable Database Tools (Free)
https://wordpress.org/plugins/enable-database-tools
Does one thing: Enables you to optimize and repair InnoDB and MyISAM tables using WordPress built-in database tools.
Database Administration
Database Admin (Free)
https://github.com/qriouslad/database-admin
Adminer replacement, directly from within the Wordpress admin dashboard!
WP phpMyAdmin (Free)
https://wordpress.org/plugins/wp-phpmyadmin-extension/
PHP My Admin from within the Wordpress admin dashboard.
Performance Profiling
Code Profiler (Free and Pro)
https://wordpress.org/plugins/code-profiler/
Code Profiler helps you measure the performance of your plugins and themes at the PHP level and to quickly find any potential problem in your WordPress installation. Useful for troubleshooting and identifying which of the plugins you are using have poor performance.
It can point to the specific lines of code and plugins which are triggering performance issues. Very useful if you are creating your own plugin, want to modify someone else’s to fix the issue yourself, identify a plugin which is detrimental to performance or want to report the identified issue to a plugin developer so it can be fixed.
F12 Profiler (Free)
https://wordpress.org/plugins/f12-profiler/
A code profiling plugin, not as granular or detailed as Code Profiler, but has some nice features that Code Profiler doesn’t have, such as a frontend admin menu bar which displays profiling information for the current page you are viewing on the frontend.
AIO Performance Profiler (Free)
https://wordpress.org/plugins/all-in-one-performance-accelerator/
Note: I don’t recommend activating this on a live site, activate it on staging. It’s useful for diagnosis, but it slowed the site I was working down a lot even once deactivated, I never dug into why. I suggest you use this plugin only on a staging site.
LAPS Performance Profiling (Free)
Lightweight performance profiler. It provides a visual summary in the admin toolbar that is quick and easy to inspect.
Fix Plugin Conflicts
Check Conflicts (Free)
https://wordpress.org/plugins/check-conflicts/
The plugin allows you to disable/enable plugins and/or activate a default theme for checking conflict between them only for your IP; other users won’t see any changes during the tests.
Plugin Detective (Free)
https://wordpress.org/plugins/plugin-detective/
Helps diagnose plugin conflicts in a step-by-step manner.
WP Tools (Free)
https://wordpress.org/plugins/wptools/
The WP Tools plugin (wp-tools) features a comprehensive dashboard showcasing server statistics, including a chart of errors, page load time also by page and boasts over 47 tools designed to simplify your WordPress management tasks.
System Dashboard (Free)
https://wordpress.org/plugins/system-dashboard/
This plugin provides a central dashboard to monitor various WordPress components, processes and data, including server hardware, software and resource usage. Pairs well with Query Monitor
Filters and Hooks
WP Hooks Finder (Free)
https://wordpress.org/plugins/wp-hooks-finder/
If you look at any WordPress page or post, they appear through the combination of action & filter hooks. Sometimes useful for debugging and plugin development.
Per Page List Of Plugins In Use
Plugin List (Free)
https://wordpress.org/plugins/plugins-list/
The plugin inserts an XHTML list into any post/page through a shortcode. If you’re into customization, you can specify a format argument and indicate the exact output you are after.
There’s also an option to display inactive plugins as well.
A simple template system allows you to format how you’d like the plugin information to be shown
Template tags are available for automatically linked items as well as simple text
Choose from a number of pieces of plugin data to be output
Display inactive plugins as well as active plugins if you wish
Automatically limit long descriptions to specific lengths, and even remove emojis from the output
Output is cached to provide a super-quick response
A separate shortcode allows you to display how many plugins you have!
Gutenberg Block Usage
Find My Blocks (Free)
https://wordpress.org/plugins/find-my-blocks/
Fast search for block locations
Save your time by scanning your entire site (including posts, pages and custom post types) to locate instances of WordPress Blocks.
Find & replace blocks safely with quick edit and preview links.
WordPress Full Site Editing support. Block Templates & Template parts will be searched.
Performance settings for low (shared hosting) to high-end hosting.
100% free & open source.
Issues Tracker (Free)
https://wordpress.org/plugins/issues-tracker/
Issues Tracker allows you to view and search WordPress Debug logs, receive security advice, track 404 errors, and view your server settings.
Inspect and Block HTTP Requests (Free)
https://wordpress.org/plugins/inspect-http-requests/
Monitor all the HTTP Requests being made via WP HTTP Methods i.e. wp_remote_get, wp_remote_post. Block any request by just a click of a button.
Track how much time a request like updating core/plugin/theme taking (may be useful for bandwidth consumption analysis)
Transients Manager (Free)
https://wordpress.org/plugins/transients-manager/
Transients manager allows you to:
Toolbar button to suspend transient writes
View all transients in the database
Edit the name, expiration, and value of any transient
Delete any transient
Search transients by name
Bulk actions to delete: all, expired, unexpired, or persistent transients
Performance Testing From Within The Admin Dashboard
The speed testing section above is one of the major resources you will use to diagnose performance issues. Waterfall charts are critical to diagnosing which files need to be delayed, disabled, compressed, lazy loaded or need loading attributes such as defer.
Vibes (Free)
https://wordpress.org/plugins/vibes/
A plugin from the PerfOps one suite, free lighthouse testing directly from the admin dashboard, very useful.
WP Speed Of Light (Free)
https://wordpress.org/plugins/wp-speed-of-light/
WP Speed Of Light is a free optimization plugin with integrated pagespeed testing. There is a pro version, but it is completely unnecessary if this is used as an optimization/caching plugin in addition to the speed testing functionality. All of the pro features are available via free plugins in other sections.
WPO Checker (Free)
https://wordpress.org/plugins/wpo-checker/
Adds links to external pagespeed tools on the page/post list.
Has not been updated in a while, activate on staging to ensure there are no conflicts.
Speed Guard (Free)
https://wordpress.org/plugins/speedguard/
Bulk Pagespeed Insights Testing tool. Add urls to test in the backend, and it will run bulk pagespeed tests on all of them.
Caveats: the functionality for displaying the LCP score of each tested page on the plugin settings page is broken, and all of the pagespeed reports need to be opened individually (there is no overview) to see the scores.
Admin Bar Tools (Free)
https://wordpress.org/plugins/admin-bar-tools/
Adds a Pagespeed Insights link to the admin bar to launch a test for any page viewed on the frontend.
SEO Booster (Paid)
https://wordpress.org/plugins/seo-booster/
The paid version of SEO Booster has Pagespeed Insights Testing functionality.
WP Performance Tester (Free)
https://wordpress.org/plugins/wpperformancetester/
WPPerformanceTester was written as a tool to benchmark WordPress in the WordPress Hosting Performance Benchmarks (2015) by Review Signal. Current benchmarks are on WPHostingBenchmarks.com. It was designed to test the server’s performance by stressing PHP, MySql and running $wpdb queries.
WPPerformanceTester performs the following tests
Math – 100,000 math function tests
String Manipulation – 100,000 string manipulation tests
Loops – 1,000,000 loop iterations
Conditionals – 1,000,000 conditional logic checks
MySql (connect, select, version, aes_encrypt) – basic mysql functions and 5,000,000 AES_ENCRYPT() iterations
\$wpdb – 250 insert, select, update and delete operations through \$wpdb
It also allows you to see how your server’s performance stacks up against our industry benchmark. Our industry benchmark is the average of all submitted test results.
Page Size Analysis
GreenerWP (Free)
https://wordpress.org/plugins/greenerwp/
Bulk page size scanner. Not very detailed info, but provides a quick overview of individual page weight across multiple individual pages.
Logging
Mail Logging
WP Mail Logging (Free)
https://wordpress.org/plugins/wp-mail-logging/
Use this plugin to log all outgoing emails from your WordPress site. If there are any errors when sending the email from your site, our email logs will catch that error and display it to you.
Debug Logging
Debug Log Manager (Free)
https://wordpress.org/plugins/debug-log-manager/
Parse the debug.log file and view distinct errors and when they last occurred
Quickly find and filter more specific errors for your debugging work.
Make error details easier to read by identifying error source
Easily view files where PHP errors occurred. This includes WordPress core, plugin and theme files.
Enable auto-refresh to automatically load new log entries.
Easily clear the debug.log file to save disk space and more easily observe newly occurring errors on your site.
Show an indicator on the admin bar when error logging is enabled.
Add a dashboard widget showing the latest errors logged.
Use error_log() to output error info into your debug log
Bugfu (Free)
https://wordpress.org/plugins/bugfu-console-debugger/
Log/Debug the PHP code in your Theme/Plugin in your Browser Console (no extension needed).
Debug This (Free)
https://wordpress.org/plugins/debug-this/
Provides a ton of information about your WordPress installation, all from the front-end admin bar.
The current WP_Query object
Blog info and options
Embed providers
Files in rendered HTML (CSS, images, JavaScript)
Filters and actions
Images sizes
Globals and constants
Menus
Object cache stats
Plugins, must-use plugins, and dropins
Rewrite rules
Queries
PHP and server information
Post attachments
Post types
Scripts and styles enqueued
Shortcodes
Sidebars and widgets
Taxonomies and terms
Themes
Users
WP cron schedules and jobs
WP debug log
Debug Bar (Free)
https://wordpress.org/plugins/debug-bar/
Adds a debug menu to the admin bar that shows query, cache, and other helpful debugging information.
Action and Audit Logging
CoreActivity Log (Free)
https://wordpress.org/plugins/coreactivity/
Free CoreActivity Log is a free plugin for monitoring and logging various activities. The plugin is highly modular, with events registered and controlled by multiple Components.
Currently, the plugin has 28 components with a total of 174 events, with direct integration with 12 popular plugins. Out of all the options for audit logging, this is the most comprehensive.
Log Dash (Free)
https://wordpress.org/plugins/logdash-activity-log/
Lightweight activity log allows you to effortlessly monitor and track all actions on your WordPress site, including user logins, content changes, plugin updates, and more. Its user-friendly dashboard gives you instant access to critical information, making it easy to identify and resolve issues quickly.
Stream (Free)
https://wordpress.org/plugins/stream/
The plugin records WordPress user and system action to the Stream logs. Every logged-in user action is displayed in an activity stream and organized for easy filtering by User, Role, Context, Action or IP address. Admins can highlight entries in the Stream log—such as suspicious user activity—to investigate what’s happening in real time. Stream also allows you to configure email alerts and webhooks for integrations like Slack and IFTTT to notify you and your team when something has gone wrong.
Stream is entirely free with no pro plan
Aryo Activity Log (Free)
https://wordpress.org/plugins/aryo-activity-log/
Another activity monitoring plugin, also entirely free.
DecaLog (Free)
https://wordpress.org/plugins/decalog/
While DecaLog doesn’t specifically log user events, it does have a wonderful function of logging various events on a site that are not logged by either Stream or Aryo, which gives you different insights into background processes, which makes it easier to catch malware.
If you have trouble interpreting the results, I suggest screenshotting the logs and then uploading it to an AI bot to interpret them for you. Paid AI bots can be accessed for free via Poe.
Simple History (Free)
https://wordpress.org/plugins/simple-history/
Audit log for Wordpress, useful for diagnosing changes made by users and has detailed logging, and direct integration with multiple plugins.
Ajax Event Logging
Amuga Ajax Log (Free)
https://wordpress.org/plugins/amuga-ajax-log/
Logs Ajax calls
Cron Logging
Cron Logger (Free)
https://wordpress.org/plugins/cron-logger/
This plugin will help you identify which Cronjobs (if any) are problematic.
Performance and Wordpress Analysis
Query Monitor (Free)
https://wordpress.org/plugins/query-monitor/
Helps to debug and identify slow database queries, PHP errors, hooks and actions, block editor blocks, enqueued scripts and stylesheets, HTTP API calls, and more. A critical tool in the toolbelt for diagnosing performance problems.
PerfOps One Plugins (Free)
A suite of free and open source WordPress plugins dedicated to observability and operations performance.
OPcache Manager (Free)
https://wordpress.org/plugins/opcache-manager/
Full featured OPcache management and analytics reporting tool. OPcache Manager allows you to supervise and optimize OPcache operations on a WordPress site.
Sessions (Free)
https://wordpress.org/plugins/sessions/
Powerful sessions manager for WordPress with multi-criteria sessions limiter and full analytics reporting. Sessions relies on the standard WordPress sessions manager and adds extra features and controls.
Traffic (Free)
https://wordpress.org/plugins/traffic/
Full featured analytics reporting tool that brings accurate oversight about all inbound and outbound API calls made to/from a WordPress site.
Vibes (Free)
https://wordpress.org/plugins/vibes/
User experience and browsing performance monitoring solution that analyzes perceived performance from a users’ viewpoint.
Keys Master (Free)
https://wordpress.org/plugins/keys-master/
Robust application passwords manager for WordPress with role-based usage control and full analytics reporting. Keys Master relies on the standard WordPress “application password” core feature and adds extra features and controls.
oEmbed Manager (Free)
https://wordpress.org/plugins/oembed-manager/
Management tool which helps to fine-tune and conditionally activate WordPress core oEmbed producer/consumer. oEmbed Manager can help to achieve GDPR compliance.
DecaLog (Free)
https://wordpress.org/plugins/decalog/
De-facto standard stack for WordPress observability, DecaLog provides reliable and powerful logging, monitoring and tracing features for WordPress core, PHP, database, plugins and themes.
APCu Manager (Free)
https://wordpress.org/plugins/apcu-manager/
Full featured APCu management and analytics reporting tool. APCu Manager allows you to supervise and optimize APCu operations on a WordPress site.
IP Locator (Free)
https://wordpress.org/plugins/ip-locator/
Country and language detection service for WordPress. Fast, reliable, and plug & play. IP Locator provides conditional customization and detection API for WordPress core and plugins needing it.
Device Detector (Free)
https://wordpress.org/plugins/device-detector/
Detection and management tool that detects all devices accessing a WordPress site. Device Detector provides comprehensive analytics reports, CSS customization and detection API for WordPress core and plugins which need it.
MailArchiver (Free)
https://wordpress.org/plugins/mailarchiver/
Automatic outbound mails archiving tool which perfectly works regardless of the mail service provider and the technology used: API, SMTP, IMAP or native PHP
Apache Status & Info (Free)
https://wordpress.org/plugins/htaccess-server-info-server-status/
Tool to activate and set up urls for Apache server-status and server-info modules. In addition, Apache Status & Info allows you to check Apache configuration and settings, within WPadmin.
Image Optimization
The majority of options included in this section are free
Manual Image compression
Always compress multiple times(as many as possible) until you get to the point where compressing further unacceptably degrades quality. I’ve done 10-20 different compression passes on an image before without noticeable degradation in quality. Run TinyJPG and TinyPNG on images as many times as possible before switching to another compressor.
Once you compress an image with an alternative service, you can run it through TinyPNG and TinyJPG again for further compression runs!
As an example: TinyPNG > TinyPNG > TinyPNG > TinyPNG > TinyJPG > TinyJPG > TinyPNG > TinyPNG > 11zon > TinyPNG > 11zon > TinyJPG > TinyPNG
Just keep compressing it and bouncing it around services to compress it further until you can’t compress the image on any service further or quality degrades beyond an acceptable level.
Even once a service exhausts its ability to compress further after multiple runs, using another service to generate an even more compressed image will sometimes allow the previous compression site to compress further. Converting an image to another format will always allow you to use compression services to compress them even further once they’ve been converted.
TinyPNG (Free)
Great optimization site. Tinypng is unique in that you can do multiple compression passes. E.g. Compress the image once, download it, then immediately drag it back to tinypng to compress it further. TinyPNG can usually do at least 3 passes. Always do multiple passes with TinyPNG! Once TinyPNG can’t reduce the size further, run the image through TinyJPG
TinyJPG (Free)
Incredibly similar to tinypng, but uses a slightly different algorithm. Run images through TinyJPG after TinyPNG (or vice-versa)
Compress-or-die (Free)
Batch Compress (Free)
Batch compress converts PNGs to JPG and will eliminate any transparency effects on the compressed png. Only use batchcompress if you do not need png transparency.
Squeeze Pics (Free)
Batch compress images
11zon (Free)
https://imagecompressor.11zon.com/
Free Convert (Free)
Note
I recommend bouncing the images you are compressing through multiple services, compressing the image multiple times.
It’s best to start with a high quality picture that has a large file size, because when you run it through a compressor multiple times it degrades the quality with each pass.
You can get your images to under 100 kb through this process, even if the image starts at 4-9 MB. It’s certainly a hassle to do this, but it does work. The quality degrades on each compression run, so it’s best to start with an ultra crisp high quality image so the degradation isn’t noticeable. Once you start getting to the low hundreds check the image quality after each compression run to ensure it still looks acceptable.
Some compression services are better than others and will produce better quality images at equivalent file sizes.
When you notice that the image quality degrades past the point where you find it acceptable(photo becomes too grainy), use the compressed image with the lowest file weight (most compressed version) of the image that is still visually high quality.
Compressed images should ideally be under 100 kb if possible. The lower the file size, the better. A 300-400 kb file weight difference could be the difference from a score in the low 80s vs a score in the high 90s (e.g. 490 kb original file weight vs 90 kb for the compressed image).
Image file weight can definitely make that big of a difference in your pagespeed scores, so compress your images as much as possible!
Image Compression Plugins
Image Quality Control (Free)
https://wordpress.org/plugins/still-be-image-quality-control/
Neat little plugin, very customizable, unlimited free usage.
Bulk Image Optimizer (Free)
https://wordpress.org/plugins/bulk-image-resizer/
Compresses images, resizing, and converts to WebP. All completely free, zero image size limits, all done on the host server, no third party services.
Smush (Free and Premium)
https://wordpress.org/plugins/wp-smushit/
One of the best image optimization plugins. Its free tier is extremely generous(unlimited images under 5 MB), and has a full suite of image optimization features. Smush Pro helps due to allowing image optimization to run in the background, which is is necessary if you have a large amount of images on your site(if you choose Smush)
PhastPress (Free)
https://wordpress.org/plugins/phastpress
Image optimization:
Phast optimizes images using PNG quantization (pngquant) and JPEG recoding (libjpeg-turbo).
Phast inlines small images (< 512 bytes) in the page.
Phast converts JPEG images into WebP for supporting browsers.
Phast enables native lazy loading to speed up page loading and save bandwidth.
Flying Images (Free)
https://wordpress.org/plugins/nazy-load/
Free multi-function image optimization plugin with on-the-fly image compression. Free unlimited usage.
ShortPixel (Freemium)
https://wordpress.org/plugins/shortpixel-image-optimiser/
ThemeIsle Article
https://themeisle.com/blog/wordpress-image-optimizer-plugins-compared/#image-compression-winner
ShortPixel is the best image optimization plugin according to ThemeIsle’s comparison tests.
Mobile is the optimization target, and ShortPixel wins by a mile. While ShortPixel’s Image Compression is apparently inferior to Optimole’s, ShortPixel has better overall results and results in a greater performance improvement over Optimole.
Resmush it (Free)
https://wordpress.org/plugins/resmushit-image-optimizer/
“ReSmush.it Image Optimizer allows you to use free Image optimization based on the reSmush.it API. reSmush.it provides image size reduction based on several advanced algorithms. The API accepts JPG, PNG and GIF files up to 5MB.”
CompressX (Free)
https://wordpress.org/plugins/compressx/
Free image compression and conversion, fully local.
WP Vivid Image Optimization (freemium)
https://wordpress.org/plugins/wpvivid-imgoptim/
Fully featured optimization plugin, the majority of optimization features enabled for free. 2000 images/month, any image size under 5 MB. Highly recommend checking this out and comparing with the other options.
WP-Optimize (Free)
https://wordpress.org/plugins/wp-optimize/
Free Bulk Image Compression
Reduce Colors
Reducing the amount of colors used in an image will reduce its file size. It is possible to remove some without harming image quality, it will take some trial and error to find what’s within an acceptable threshold. The amount of colors that can be removed without damaging image quality will vary image to image.
Online PNG Tools (Free)
Decrease PNG Color Count
https://onlinepngtools.com/decrease-png-color-count
Reduce WebP Color Count
https://onlinetools.com/webp/reduce-webp-colors
Reduce JPG Colors
https://onlinejpgtools.com/reduce-jpg-colors
Installable Compression Software
Installable compression software on your host device (Windows, Mac, Linux)
LibVips (Free)
https://github.com/libvips/libvips
LibVips is an image compression and optimization library with a multitude of features, which extends beyond just simple image compression, allowing you to compress/optimize your images deeply and granularly.
Official GUI
Nip2 (Free)
https://github.com/libvips/nip2
WSRV (Free)
https://github.com/weserv/images
wsrv.nl is an image cache & resize service. Their servers resize your image, cache it worldwide, and display it. Uses the LibVips library, extends it with more features.
ImgProxy (Free)
https://github.com/imgproxy/imgproxy
Uses the LibVips library, it has a multitude of image optimization features.
Documentation
Lazy Load Images and Videos
Lazyload will prevent images that are below the fold(out of the user’s viewport when the site loads) from loading until the picture enters the user’s viewport(i.e. they can see it on screen), which reduces the weight of pages that contain images, which will significantly speed up their load time. This is crucial if you have a very image heavy website.
Exclude Above The Fold Images From Lazy Load
Above the fold images(images that are loaded within the viewport without scrolling) should be excluded from Lazy Load. Only Lazy Load images below the fold. Most plugins can auto-detect image locations, but you may need to add manual exclusions. Perfmatters does a good job (which is what I use) of auto-excluding images it can detect, but it isn’t perfect.
Every lazy load plugin is functionally the same as far as excluding images. There will be a text box where you can paste the image filename to exclude it from Lazy Loading, just check the settings.
Auto-sizes for Lazy-loaded Images (Free)
https://wordpress.org/plugins/auto-sizes/
This plugin implements the HTML spec for adding sizes="auto" to lazy-loaded images.
For background, see: https://github.com/whatwg/html/issues/4654
Flying Images (Free)
https://wordpress.org/plugins/nazy-load/
Has a lazyload feature, both browser native and javascript lazy load.
Rocket Lazyload (Free)
https://wordpress.org/plugins/rocket-lazy-load/
A3 Lazyload (Free)
https://wordpress.org/plugins/a3-lazy-load/
Paid Optimization Plugins
All paid caching plugins have the ability to lazy load images. Many, many image optimization plugins have it as well.
Image Converters
Converter for Media (Free)
https://wordpress.org/plugins/webp-converter-for-media/
Auto Converts images to WebP.
Batch Image Format Converter
XnConvert (Free)
https://www.xnview.com/en/xnconvert/
XnConvert is a fast, powerful and free cross-platform batch image converter. You can convert and compress your images, photos and pictures easily, and apply over 80 actions (like resize, crop, color adjustments, filter, and more, all common picture and graphics formats are supported (JPEG, TIFF, PNG, GIF, WebP, PSD, JPEG2000, JPEG-XL, OpenEXR, camera RAW, HEIC, PDF, DNG, CR2). You can save and re-use your presets for another batch image conversion.
Select the right image size
Once you have uploaded the file to Wordpress, Wordpress will automatically create various sizes of your images. If you choose one of the smaller sizes that it creates(medium, medium-large etc), if you are using a page builder such as Elementor, you can select the smaller size(if appropriate) and the file size will be reduced further.
You can also use an adaptive/responsive images plugin to automatically resize them.
Make sure the image is of acceptable quality before you put it live on your site.
Flying Images (Free)
https://wordpress.org/plugins/nazy-load/
Flying Images for image compression, WebP and lazyload(free):
You can use Flying Images to compress and optimize my images.
It automatically serves them from an image based cdn, and auto-converts to the WEBP format on the fly for supported browsers. Do not install Flying Images if you are using WP-Rockets lazyload instead of Flying Images lazyload, it will load the media files from your site instead of the statically cdn. If you want to use Flying Images/the statically cdn, Lazy Load must be disabled in other plugins. You should only be using one plugin for Lazy Loading functionality.
Fix Image Related CLS Issues
Add missing width and height attributes to your images
Adding missing height and width attributes to your images will help reduce the Content Layout Shift (CLS) page speed metric.
Perfmatters (Paid)
https://perfmatters.io/docs/missing-width-height-images/
Flyingpress (Paid)
https://docs.flyingpress.com/en/article/add-missing-width-and-height-i1n2w9/
Adding missing height and width dimensions to your images will significantly reduce Content Layout Shift(CLS) on Page Speed scores.
Optimize More! Images (Free)
https://wordpress.org/plugins/optimize-more-images/
Adds missing height and width attributes to improve CLS scores.
Specify Missing Image Dimensions (Free)
https://wordpress.org/plugins/specify-missing-image-dimensions/
Free plugin, the only feature is adding missing image dimensions
JCH Optimize (Free)
https://wordpress.org/plugins/jch-optimize/
Multiple function optimization plugin that can add missing height and width attributes
Phastpress (Free)
https://wordpress.org/plugins/phastpress/
Multi-function optimization plugin, can also add missing height and width attributes
However, you need to add image exclusions in the exclusion box to all the images that load in the above the fold content so that they are not lazy loaded in WP-Rockets settings if you use their lazy-load.
You do not want to lazyload the files that are above the fold, as that will artificially slow down their load times because they will load after the lazyload js file. This will negatively impact your performance if you do not add the exclusions, so don’t forget! As long as you don’t forget to add exclusions, lazyload will significantly boost your site’s performance.
Image Resizing
Imsanity (Completely free)
https://wordpress.org/plugins/imsanity/
Features:
Automatically scales large image uploads to a more “sane” size
Bulk resize feature to resize existing images
Selectively resize images directly in the Media Library (List View)
Allows configuration of max width/height and JPG quality
Optionally converts BMP and PNG files to JPG for more savings
Once enabled, Imsanity requires no actions on the part of the user
Uses WordPress built-in image scaling functions
Bulk Image Optimizer (Completely Free)
https://wordpress.org/plugins/bulk-image-resizer/
Compresses images, resizing, and converts to WebP. All completely free, zero image size limits, all done on the host server, no third party services.
Simple Image Sizes (Free)
https://wordpress.org/plugins/simple-image-sizes/
This plugin allows create custom image sizes for your site. Override your theme sizes directly on the media option page.
Better Image Sizes (Completely Free)
https://wordpress.org/plugins/better-image-sizes/
This plugin allows you to:
disable auto generated image sizes
dynamically generate only needed image sizes for only needed images
delete generated image sizes from this plugin individually or all together
specify different focal point that will be in the focus while creating cropped versions of the image
automatically detect focal point by face detection algorithm
disable big image size threshold, so image bigger than 2560x2560px will be not be scaled down
ImgProxy (Free)
https://github.com/imgproxy/imgproxy
Imgproxy is a fast and secure standalone server for resizing, processing, and converting images. The guiding principles behind imgproxy are security, speed, and simplicity.
Adaptive Images
Adaptive Images (Free)
https://wordpress.org/plugins/adaptive-images/
Free adaptive image generation plugin
ShortPixel Adaptive Images (Freemium)
https://wordpress.org/plugins/shortpixel-adaptive-images/
Enable Responsive Images for Gutenberg (Free)
https://wordpress.org/plugins/enable-responsive-image/
Flying Images (Free)
https://wordpress.org/plugins/nazy-load/
Free Image Optimization plugin with nice features such as free image CDN, on the fly image compression, on the fly webP conversion, and adaptive images.
Preload Images
Lazyload, Preload and More (Free)
https://wordpress.org/plugins/lazyload-preload-and-more/
Can add the Preload attribute as well as the loading eager attribute.
Preload is more powerful than Fetch Priority and takes precedence over the Fetch Priority attribute. If you need an image to download as soon as possible, use Preload over Fetch Priority.
Preload Featured Images (Free)
https://wordpress.org/plugins/preload-featured-images/
Automatically preloads featured images
Pre-Party (Free)
https://wordpress.org/plugins/pre-party-browser-hints/
Pre-Party can add a variety of loading attributes, including the preload attribute.
Perfmatters (Paid)
https://perfmatters.io/docs/preload/
Perfmatters has an integrated Preload function for images
Image Fetch Priority
Custom Image Attributes (Free)
https://wordpress.org/plugins/custom-image-attributes/
Another plugin to add image attributes(including fetch priority).
Image Prioritizer (Free)
https://wordpress.org/plugins/image-prioritizer/
This plugin optimizes the loading of images which are the LCP (Largest Contentful Paint) element, including both img elements and elements with CSS background images (where there is a style attribute with a background-image property). Different breakpoints in a theme’s responsive design may result in differing elements being the LCP element. The LCP element for each breakpoint is captured so that high-fetchpriority preload links with media queries are added which prioritize loading the LCP image specific to the viewport of the visitor.
Fetch Priority Plugin (Free)
https://wordpress.org/plugins/fetchpriority/
Fetch Priority Plugin made by the Wordpress Performance Team. Automatically applies the fetch priority attribute to a single image determined automatically. There are no settings and nothing to configure.
If you need granular control over the Fetch Priority Attribute, I recommend purchasing Perfmatters.
Perfmatters (Paid)
https://perfmatters.io/docs/fetch-priority/
Perfmatters gives you explicit control over which images have the fetch priority attribute
SpeedSize (Paid)
https://wordpress.org/plugins/speedsize-ai-image-optimizer/
Interesting unique features. Could be good, haven’t had a chance to test it yet.
Image Decoding
Wordpress Image Async
Inline Image Base64 (Free)
https://wordpress.org/plugins/inline-image-base64/
With Inline Image Base64 you can inline specific images directly into the HTML as base64.
Note: Only use this with extremely small images that are less than 20-30 kb(ideally under10 kb). Keep the file size of the inlined images even lower than that if possible.
Thumbnail Regenerations
Regenerate Thumnails (Free)
https://wordpress.org/plugins/regenerate-thumbnails/
Regenerate Thumbnails allows you to regenerate all thumbnail sizes for one or more images that have been uploaded to your Media Library.
WebP and AVIF
CompressX (Free)
https://wordpress.org/plugins/compressx/
WebP and AVIF conversion plugin from the WPVivid team. Completely free, and the compression and conversion is done locally on your site.
QuickWebP (Free)
https://wordpress.org/plugins/quickwebp/
Completely free WebP converter plugin. Fully converts to WebP, no fallback.
PhastPress (Free)
https://wordpress.org/plugins/phastpress
Image optimization:
Phast optimizes images using PNG quantization (pngquant) and JPEG recoding (libjpeg-turbo).
Phast inlines small images (< 512 bytes) in the page.
Phast converts JPEG images into WebP for supporting browsers.
Phast enables native lazy loading to speed up page loading and save bandwidth.
Next-Gen Image Format Converters
WebP Express (Free)
https://wordpress.org/plugins/webp-express/
Serve auto-generated WebP images instead of jpeg/png to browsers that support WebP.
WebP Express Plus (Paid)
https://wordpress.org/plugins/webp-express-plus/
Addon for WebP Express which adds additional features. Requires the WebP Express plugin to be active.
AVIF Express (Free)
https://wordpress.org/plugins/avif-express/
On upload, images are converted to AVIF format. AVIF Images are a new format and not supported on all browsers. Fallback images are in WebP format.
Remote Image Thumbnails (Free)
https://wordpress.org/plugins/wp-remote-thumbnail/
WP Remote Thumbnail is a very lightweight WordPress plugin that comes with zero configuration and one-click setup. Using this plugin, you can easily set any external image as the featured image of any post/page or even custom post types.
Note: Make sure to use together with a resource hints plugin (pre-party) to add preload and preconnect attributes to the third party domain.
Dynamic Image Caching
Local Storage with Blobs
IndexedDB
Implementation Steps
Open a Database: Use JavaScript to open an IndexedDB database. Create an object store for your images if it doesn't already exist.
Fetch and Store Images: When you fetch an image from the remote gallery, write it to the IndexedDB store. You might want to key it based on a unique identifier, such as a URL or a custom ID.
Check Cache First: Before fetching an image, check if it exists in your IndexedDB cache. If it does, load it from there.
Update Strategy: Decide on a strategy for updating cached images. For real-time photos, you might need a periodic check to see if newer versions of the images are available.
Image Filters
Easy Image Filters (Free)
https://wordpress.org/plugins/easy-image-filters/
Free Lightweight Plugin to add image filters
Free High Quality Images
Instant Images (Free)
https://wordpress.org/plugins/instant-images/
Free high quality images
Image Watermarking
Image Watermark (Free)
https://wordpress.org/plugins/image-watermark/
Ultra Lightweight Image Watermarking Plugin.
Icon Optimization
Free SVG icons
You can download free SVGs from here:
FontAwesome (Free)
https://fontawesome.com/download
FlatIcon (Free)
IconFinder (Free)
Compress SVGs
Use both Vecta.io and SVGOMG together to reduce the size of your SVG icons as much as possible.
Vecta.io (Free)
SVG Compressor
SVGOMG (Free)
https://jakearchibald.github.io/svgomg/
Another SVG Optimizer. I recommend using it together with Vecta.io
Video Optimization
Lazy Load Iframes
Lazy Embed (Free)
https://wordpress.org/plugins/lazy-embed/
The Lazy Embed plugin defers the loading of any resource required for playing the video until the video is requested to be played. It does this by adding a srcdoc attribute to the iframe which shows in place of the normal iframe content.
Other plugins
Many plugins aside from Lazy Embed can lazy load video iframes. Perfmatters, Flyingpress, and a wide variety of other free plugins can do so as well.
Video Compression
Handbrake (Free)
An open source installable program which can compress your videos.
Convert videos to WebM to further compress video file size
WebM video files are ~30% smaller than MP4. Handbrake allows you to convert your videos to WebM format. WebM is the video equivalent of WebP images.
Free Convert Video Compressor (Free)
https://www.freeconvert.com/video-compressor
10web.io Video Optimization article
https://10web.io/blog/optimizing-videos-on-your-wordpress-site/
Great article with further optimization tips for sites with videos.
Video Player Plugins
Presto Player (Free)
https://wordpress.org/plugins/presto-player/
Lightweight Video Player. HTML5, Youtube and Vimeo video support.
Super Video Player (Free)
https://wordpress.org/plugins/super-video-player
Super Video Player is a lightweight, fully customizable self-hosted video player plugin that supports MP4/OGG as well as multiple caption tracks or subtitle files.
HTML5 Video Player (Free)
https://wordpress.org/plugins/videojs-html5-player/
Another Lightweight Video Player.
Video Pack (Free)
https://wordpress.org/plugins/video-embed-thumbnail-generator/
Lightweight Video Player, local hosting.
Lottie Animation Compressor
Lightweight Lottie Animation Plugin
AM Lottie Player (Free)
https://wordpress.org/plugins/am-lottieplayer/
The most complete free Lottie Player yet.
AM LottiePlayer is easy to use, lightweight, and gives you total control over how to implement crisp, vectorized animations to your website.
Lottie Optimization
Lottiemizer (Free)
Compresses your Lottie animations
Lottie JSON Optimizer (Free)
https://lottiefiles.com/tools/lottie-json-to-optimized-lottie-json
Optimize your Lottie JSON files.
dotLottie (Free)
dotLottie is an open-source file format that aggregates one or more Lottie files and their associated resources into a single file. They are ZIP archives compressed with the Deflate compression method and carry the file extension of ".lottie".
How To Make Interactive Lottie Animations
Youtube Tutorial (Free)
https://www.youtube.com/watch?v=-bGTLlnGbZo
Tutorial on how to make Lottie’s interactive
Gifs
Free Convert (Free)
https://www.freeconvert.com/gif-compressor
Ezgif (Free)
Another gif compressor
Gifcompressor (Free)
Gif Compressor
Xconvert (Free)
https://www.xconvert.com/compress-gif
ILoveIMG (Free)
https://www.iloveimg.com/compress-image/compress-gif
Veed.io (Free)
https://www.veed.io/tools/video-compressor/gif-compressor
Animately (Free)
https://animately.co/tools/compress-gif
Optimize Embeds
Embed Optimizer (Free)
https://wordpress.org/plugins/embed-optimizer/
This plugin’s purpose is to optimize the performance of embeds in WordPress, such as YouTube videos, TikToks, and so on. Initially this is achieved by lazy-loading them only when they come into view.
This improves performance because embeds are generally very resource-intensive and so lazy-loading them ensures that they don’t compete with resources when the page is loading. Other optimizations are planned for the future.
Themes
Pagebuilder users
Your theme is slowing you down
If you are using a Page Builder, themes are dead weight. They add absolutely nothing to the design since all of the css and js necessary for a page is generated by the page builder itself. Astra for example will insert hundreds of kb of useless unnecessary code into your html, css and js when you don’t need a single line of it. And gutting a heavy theme is problematic in itself. Even when all of the theme’s functionality is unused, disabling theme generated css and js files will still break your site’s design and functionality.
The theme system is a core part of Wordpress and cannot be disabled, so you cannot be truly “themeless”. You should select the most optimized theme that loads the least code from the outset, to minimize the impact of the theme system as much as possible. You will still need to remove unused css and delay js with a plugin, but your results will be much better.
If you’re using a builder, build the page from scratch or with imported templates directly into the builder. For Elementor for example those would be “template kits” or stuff from the template library.
Never use theme addons, or any feature provided by your theme, and disable settings that would impact performance from the settings panel if possible. All of that adds bloat that will load on the frontend. Plugin addons installed via theme (generally happens with paid themes) are fine if they are well optimized, but theme specific features should be avoided.
My recommendation is to use either Hello Elementor or Picostrap. These two load very little code in the frontend. My personal preference is Hello Elementor, the entire plugin zip is 3x smaller than Picostrap and loads very little code. Picostrap is definitely a fantastic option however, and both are incredibly fast. I recommend trying both of them to see which fits your use case best. I haven’t used Picostrap since v4 (it’s currently on v5), so I’m sure its performance has improved even further.
Performance optimized themes
Hello Elementor (Free)
https://wordpress.org/themes/hello-elementor/
Hello Elementor is a very, very light barebones theme.
Picostrap (Free)
Picostrap is a very lightweight theme. If you are just starting to build your site, I highly recommend Picostrap.
Themes to avoid
Astra (Free and Pro)
I can no longer recommend Astra. Avoid Astra for new builds if your site is not already built on it. Astra adds an insanely large amount of css and javascript which nukes pagespeed performance. It adds over 300 kb of js/css on a beaver builder site I’ve optimized. Delaying the js will also break functionality(header, menus etc). Do not use it whenever possible.
Optimizing Astra
If you must use Astra, here are some steps that can be taken to optimize Astra performance.
You do not need the pro version, it will make your site slower.
These are the optimal settings for Astra that you should enable with Asset Cleanup in my experience. YMMV, test thoroughly and re-enable files if necessary:
You should also download the astra child theme:
https://wpastra.com/child-theme-generator/
Copy paste this into your functions.php in theme editor:
Put these lines right under where it says “define constants”
function astra_remove_header() {
remove_action( 'astra_masthead', 'astra_masthead_primary_template' );
}
add_action( 'wp', 'astra_remove_header' );
add_filter( 'astra_schema_enabled', '__return_false' );
add_filter( 'astra_meta_box_options', 'default_disable_options' );
/**
* Default disable the Meta Options
*
* @param array $meta_option Page Meta.
* @return array
*/
function default_disable_options( $meta_option ) {
$meta_option['ast-main-header-display'] = array(
'default' => 'disabled',
'sanitize' => 'FILTER_DEFAULT',
);
$meta_option['footer-sml-layout'] = array(
'default' => 'disabled',
'sanitize' => 'FILTER_DEFAULT',
);
$meta_option['footer-adv-display'] = array(
'default' => 'disabled',
'sanitize' => 'FILTER_DEFAULT',
);
$meta_option['site-post-title'] = array(
'default' => 'disabled',
'sanitize' => 'FILTER_DEFAULT',
);
$meta_option['site-sidebar-layout'] = array(
'default' => 'disabled',
'sanitize' => 'FILTER_DEFAULT',
);
$meta_option['site-content-layout'] = array(
'default' => 'disabled',
'sanitize' => 'FILTER_DEFAULT',
);
$meta_option['ast-featured-img'] = array(
'default' => 'disabled',
'sanitize' => 'FILTER_DEFAULT',
);
$meta_option['ast-breadcrumbs-content'] = array(
'default' => 'disabled',
'sanitize' => 'FILTER_DEFAULT',
);
return $meta_option;
}
add_filter( 'astra_amp_support', '__return_false' );
Performance Optimized Page Builders
Oxygen Builder (Paid)
Oxygen Builder is a well optimized page builder that allows you a lot of flexibility, while also producing clean, optimized code that is pre-optimized for page speed. Far less unnecessary div tags, too many div tags leads to a bloated DOM. A bloated DOM will increase the amount of time to parse your HTML, which increases your TTFB.
Bricks Builder (Paid)
Bricks is another well optimized page builder that outputs clean code.
Live Canvas (Paid)
LiveCanvas: the only page builder that outputs super clean, Bootstrap 5 - flavored HTML5 code, which you can always edit and refine via a built-in live code editor.
Live Canvas is extremely lightweight and creates pre-optimized code. Highly recommend considering Live Canvas as an option.
Live Canvas is best paired with Picostrap, a performance optimized theme made by the same developers:
Picostrap (Free)
Performance optimized theme created by the Live Canvas dev team.
Elementor (Freemium)
Contrary to popular belief, Once Optimized, Elementor is very performant. Unoptimized Elementor on the other hand has very poor performance. While Elementor is very bloated pre-optimization, it is one of the lightest weight builders post optimization, and it is very easy to optimize.
Plugins to Remove Unused CSS and delay Javascript have built in exclusions for Elementor (except Flyingpress, no built in exclusions with a checkbox), which means optimizing Elementor core and Elementor Pro CSS and JS assets is a breeze. Debloat and Perfmatters do have a way to apply automatic exclusions when Delay All JS functionality is used.
Performance Experiments
Elementor has many built in performance enhancement features that are in the features tab (Settings>Features)
Many of these are not activated by default, especially if you have a pre-existing site when they were added in an update. That means many Elementor sites are leaving free performance on the table which can be improved by simply changing the experiment from inactive to active in the dropdown!
For example, Elementor just added the optimized control loading recently, which can have a big performance improvement for large sites. This feature is not enabled by default, and must be manually enabled.
Note: It is fine to activate Elementor Lazy Loading functionality on top of another optimization plugin. Personally, I haven’t found the native Elementor lazy loading to work all that well, so I still default to the lazy loading options from performance optimization plugins. However pairing it with Elementor’s native functionality will not hurt performance.
Other than that, I would recommend you run a pagespeed test to see your baseline scores before you enable each performance feature, and then another test after the feature is enabled to compare.
Limit use of Containers, Sections and Columns
Every additional Container/Section/Column adds additional DOM elements and HTML weight to your page. While containers/sections/columns are sometimes easier to use in design, they negatively affect pagespeed. Containers(the replacement for sections and columns) are very flexible and multiple elements can be positioned inside them. If desired, use the grid format containers to mimic columns.
CSS Print Method
Internal Embedding
Enabling the Internal Embedding CSS Print Method in Elementor settings will inline some of the CSS that a Remove Unused CSS feature will miss. It is recommended that this be enabled only once all CSS optimizations have been applied.
If you see post-xxxx.css files in your request tree, changing the CSS print method will eliminate those requests by inlining them into the HTML document. If too much CSS is inlined this can actually have the reverse of the intended effect and hurt performance, so make sure to run Pagespeed tests before enabling the feature and once it has been enabled to check to see whether its impact is beneficial. Remove Unused CSS features will generally not target these files, so inlining them is required to eliminate those requests.
Do not set background images on unconventional elements
Background images set on unconventional elements cannot be Lazy Loaded with optimization plugins as they will not be detected by their algorithms. If an image is set to a background image on an element such as a spacer, Elementor’s background image lazy load feature will catch some of them, but not all, which will negatively affect your pagespeed. Even Elementor’s own Lazy Load will miss them for some reason.
You should only set images on widgets that contain a section that has an image picker OR as a regular background image (not through the advanced section when editing an element).
If your images cannot be lazy loaded, it significantly negatively affects your pagespeed. Always check in the network tab of inspect to see what files are loading when optimizing a site to see what files are loading. That applies to any site, whether it’s built with Elementor or not.
Inline SVG Icons Into The Root HTML Document (Free)
https://github.com/jazir555/Inline-SVGs-uploaded-to-Elementor-Icon-Widget
This is my personally developed plugin to inline SVG icons into the root HTML document for the Elementor icon widget (currently the only supported widget). This plugin is still in development, and will be expanded to cover all widgets/elements with locally hosted SVG icon capabilities.
Current functionality works as intended, and adds a toggle to the Advanced settings tab for the Icon widget, which can be activated on a per widget basis (it is not global, which allows granular implementation).
Further subsequent updates to the plugin (after the functionality has been expanded to all Elementor icon based widgets) will include an options page in the Admin Dashboard which allows local hosting of any arbitrary SVG file, locally hosted or remote from any third party domain to eliminate any and all HTTP requests.
Note: This plugin will eventually be added to the Wordpress.org Plugin Repository once the Elementor functionality has been fully built out.
Elementor Panel Editor
Flexible Elementor Panel (Free)
https://wordpress.org/plugins/flexible-elementor-panel/
Very lightweight plugin which improves the Editor panel. Can safely be selectively deactivated in the frontend.
Draggable Elementor panel and save position
Move to right side and switch in RTL mode
Vertical collapsible Elementor panel
Resize Elementor panel and save size
Multiple dark skin for Elementor editor
Collapsible all widgets category
Sortable widgets category and save position
Add exit button in the footer of panel editor
Option to close the first tab in Accordion widget
Add more options for responsive mode
Editor Performance Optimization
Pro Elements (Free)
https://github.com/proelements/proelements
Enables all Elementor Pro functionality (header/footer builder, dynamic tags, custom css, etc).
If used, none of the plugins needed to enable individual Elementor Pro features listed are necessary.
Element Manager allows you to disable all native Elementor widgets.
Editor Cleanup for Elementor (Free)
https://wordpress.org/plugins/editor-cleanup-for-elementor/
Editor Cleanup For Elementor is an add-on of Freesoul Deactivate Plugins to clean up the editor of Elementor.
It will not only clean up the assets of other plugins, their PHP code will not run either.
The Elementor editor will be faster and without conflicts with other plugins.
Both Freesoul Deactivate Plugins and Elementor must be installed and active, in another case this plugin will not run.
Restricted Content
QuentnWP (Free)
https://wordpress.org/plugins/quentn-wp/
Free content restriction plugin with Elementor integration.
Dynamic Visibility for Elementor (Free)
https://wordpress.org/plugins/dynamic-visibility-for-elementor/
Dynamic Visibility extension allows you to hide widgets, columns, containers, sections, or pages.
It is particularly useful when you are building something that you don’t want to show everyone.
Choose an OR/AND condition.
Limit visibility for specific custom fields or pages.
Set a date (from–to), day of the week, or an hour and decide when each element will be visible.
Limit visibility for specific user roles, user meta, IP, referral, or users.
Limit visibility for WooCommerce products
Set a fallback text (e.g.: ‘Coming soon’) for hidden elements that will be displayed in place of the element.
You can choose to hide the element via CSS or remove it from the DOM.
Advanced Queries (Free)
https://wordpress.org/plugins/advanced-post-queries/
An Elementor PRO extension that allows you to easily dynamically query your posts and portfolio widget results without custom query IDs.
Note: Requires Elementor Pro
Extra CSS Classes For Widgets
Pro Elements (Free)
https://github.com/proelements/proelements
Enables all Elementor Pro functionality (header/footer builder, dynamic tags, custom css, etc).
If used, none of the plugins needed to enable individual Elementor Pro features listed are necessary.
Fundamento (Free)
https://wordpress.org/plugins/fundamento/
Allows you to inject extra CSS classes into Elementor’s widgets.
Clickable Columns and Sections
Make Sections & Columns Clickable (Free)
https://wordpress.org/plugins/make-section-column-clickable-elementor/
Ultra-lightweight plugin to make sections and columns clickable.
Elementor Free
Pro Elements (Free)
https://github.com/proelements/proelements
Enables all Elementor Pro functionality (header/footer builder, dynamic tags, custom css, etc).
If used, none of the plugins needed to enable individual Elementor Pro features listed are necessary.
Custom CSS
Pro Elements (Free)
https://github.com/proelements/proelements
Enables all Elementor Pro functionality (header/footer builder, dynamic tags, custom css, etc).
If used, none of the plugins needed to enable individual Elementor Pro features listed are necessary.
RRdevs (Free)
https://wordpress.org/plugins/rrdevs-for-elementor/
Plugin for Elementor free that adds custom css
Ultra Addons lite (Free)
https://wordpress.org/plugins/ultraaddons-elementor-lite/
Free addon pack with Custom CSS functionality.
Xpro Addons (Free)
https://wordpress.org/plugins/xpro-elementor-addons/
Another plugin for Elementor Free that enables custom CSS functionality.
Mini Cart for Woocommerce
Pro Elements (Free)
https://github.com/proelements/proelements
Enables all Elementor Pro functionality (header/footer builder, dynamic tags, custom css, etc).
If used, none of the plugins needed to enable individual Elementor Pro features listed are necessary.
Ultra Addons Lite (Free)
https://wordpress.org/plugins/ultraaddons-elementor-lite/
Includes a mini cart widget
Live Chat (Free)
Pro Elements (Free)
https://github.com/proelements/proelements
Enables all Elementor Pro functionality (header/footer builder, dynamic tags, custom css, Floating Buttons etc). Floating buttons in Elementor Pro have live chat functionality.
If used, none of the plugins needed to enable individual Elementor Pro features listed are necessary.
Simple Chat Plugin (Free)
https://wordpress.org/plugins/simple-chat-button/
Free ultra lightweight (no javascript!) Whatsapp live chat plugin
Indigital Live Chat (Free)
https://wordpress.org/plugins/indigitall-web-push-notifications/
Ultra-lightweight Free Whatsapp Chat plugin.
Theme Builder
Pro Elements (Free)
https://github.com/proelements/proelements
Enables all Elementor Pro functionality (header/footer builder, dynamic tags, custom css, etc).
If used, none of the plugins needed to enable individual Elementor Pro features listed are necessary.
Xpro Theme Builder (Free)
https://wordpress.org/plugins/xpro-theme-builder/
Create custom layouts for post types, blog archives, WooCommerce products & categories, search pages, 404 pages, and more with Elementor Free. You can personalize your WooCommerce store experience by changing the default layout to match any style.
Header
Footer
Singular Layouts
Single Post
Single Page
Archive(Blog) Page
404 Page
Search Page
WooCommerce Single Product Page
WooCommerce Cart Page
WooCommerce Checkout Page
WooCommerce Account Page
Custom Post Single (CPT)
Archive Layouts
Blog Post Archive
Category Archives
Tag Archives
Author Archive
Custom Post Archive (CPT)
Dynamic & Global Tags
ACF Dynamic Tags
ACF Group Tags
Post Dynamic Tags
Woo Dynamic Tags
Term & Taxonomy Tags
User & Site Tags
Custom PHP Tag
One-Click Template Importer
Dynamic Tags
Pro Elements (Free)
https://github.com/proelements/proelements
Enables all Elementor Pro functionality (header/footer builder, dynamic tags, custom css, etc).
If used, none of the plugins needed to enable individual Elementor Pro features listed are necessary.
Royal Addons (Free)
https://wordpress.org/plugins/royal-elementor-addons/
Adds dynamic tags functionality to Elementor free. It’s more than that, a full dynamic website builder for Elementor
Use Dynamic Tags to create Websites Driven by Dynamic Content. Create Custom Post Types and Custom Taxonomies. Style and customize Custom Fields, Custom Post Type & Custom Taxonomies Templates. Add Dynamic Product Data even for Woocommerce Archive Grid and Single Products Pages and much more.
Supported Advanced Custom Fields: Text, Textarea, Number, Range, Email, URL, Password, Select, Checkbox, Radio Button, True / False, Gallery, Image, Repeater, File, Flexible Content, Clone, WYSIWYG Editor, oEmbed, Date Picker, Relationship, Taxonomy, Time Picker, Color Picker, Post Object, Accordion, Tab, Google Maps.
Dynamic Visibility
Dynamic Visibility for Elementor (Free)
https://wordpress.org/plugins/dynamic-visibility-for-elementor/
Dynamic Visibility extension allows you to hide widgets, columns, containers, sections, or pages.
It is particularly useful when you are building something that you don’t want to show everyone.
Choose an OR/AND condition.
Limit visibility for specific custom fields or pages.
Set a date (from–to), day of the week, or an hour and decide when each element will be visible.
Limit visibility for specific user roles, user meta, IP, referral, or users.
Limit visibility for WooCommerce products
Set a fallback text (e.g.: ‘Coming soon’) for hidden elements that will be displayed in place of the element.
You can choose to hide the element via CSS or remove it from the DOM.
Sticky Header for Elementor
Pro Elements (Free)
https://github.com/proelements/proelements
Enables all Elementor Pro functionality (header/footer builder, dynamic tags, custom css, etc).
If used, none of the plugins needed to enable individual Elementor Pro features listed are necessary.
JetSticky For Elementor (Free)
https://wordpress.org/plugins/jetsticky-for-elementor/
Adds sticky functionality to the free version of Elementor.
Document Embedding
Document Embedder (Free)
https://wordpress.org/plugins/media-player-addons-for-elementor/
Animations
Pro Elements (Free)
https://github.com/proelements/proelements
Enables all Elementor Pro functionality (header/footer builder, dynamic tags, custom css, etc).
If used, none of the plugins needed to enable individual Elementor Pro features listed are necessary.
UiCore Animate (Free)
https://wordpress.org/plugins/uicore-animate/
Lightweight free additional animations for Elementor.
Embeds
All Embed (Free)
https://wordpress.org/plugins/all-embed-addons-for-elementor/
All Embed Addon For Elementor is a collection of audio, video, social media widgets for Elementor. It has 20 plus widgets, enables functionality to embed any content.
Elementor Addon Packs
Xpro Addons (Free)
https://wordpress.org/plugins/xpro-elementor-addons/
Another plugin for Elementor Free has a bunch of usually premium widgets and enables custom CSS functionality for Elementor free.
Superb Addons (Free)
https://wordpress.org/plugins/superb-blocks/
Neat little addon pack with editor enhancements, new widgets and free templates.
LA-Studio Element Kit (Free)
https://wordpress.org/plugins/lastudio-element-kit/
Free widget kit and templates.
Image Hover Effects (Free)
https://wordpress.org/plugins/image-hover-effects-addon-for-elementor/
Ultra-lightweight image hover effects plugin.
Custom Icons (Free)
https://wordpress.org/plugins/custom-elementor-icons/
Free custom icon manager with additional icons
Hash Elements (Free)
https://wordpress.org/plugins/hash-elements/
Free set of addon elements.
Header & Footer Builder (Free)
https://wordpress.org/plugins/header-footer-elementor/
Lets you build your header and footer with the free version of Elementor (no pro required). Lightweight.
Template Kits (Free)
SKT Templates (Free)
https://wordpress.org/plugins/skt-templates/
Free templates.
Rife Extensions (Free)
https://wordpress.org/plugins/rife-elementor-extensions/
Large set of free templates. Lightweight.
Templately (Free and Pro)
https://wordpress.org/plugins/templately/
Lightweight free template plugin
Envato Elements (Free and Pro)
https://wordpress.org/plugins/envato-elements/
Prebuilt Template kits from Envato. Both free and pro templates. Lightweight templates, but like anything else they still require optimization.
Optimized widgets for Elementor (Free)
https://wordpress.org/plugins/optimized-widgets-for-elementor/
Reduces the DOM size by removing one of the default nested containers in each widget.
Included widgets are: Headline, Text, Image.
Since it is removing the elementor-widget-container div it can potentially break your theme or other plugins/scripts that require the div to be there. Please use with caution and test your page to see if everything still works. Recommended to enable this on staging prior to activating this plugin on live.
Import Figma Designs
UIChemy (Free and Pro)
https://wordpress.org/plugins/uichemy/
Allows you to import 10 designs monthly on the free plan. To use the free plan to import unlimited templates, just make a new temp site on instawp.com and register another account.
Elementor Optimization Target Pagespeed Score
Elementor can easily be optimized for mobile pagespeed scores over 90.
This site is in the top 5% of website page speed rankings. This result was trivial to accomplish.
Plugins used:
1. Advanced Database Cleaner Pro (Substitute AAA Option Optimizer and Advanced Database Cleaner Free for the free equivalent)
2. Index WP MySQL For Speed (free)
3. Asset Cleanup Pro (Asset Cleanup Pro has alternatives, including free plugin options listed in the Selectively Disable Plugins Section). Use the free version if you don’t want to spring for pro to disable unnecessary WP Core files from loading, polyfill as an example.
If using Asset Cleanup Free, you will need a substitute plugin for selectively disabling plugins such as Freesoul Plugin Deactivator or WP Plugin Manager. Scroll down to the “Selectively Disable Plugins” section for more info. Asset Cleanup Free can still selectively disable css and js assets.
4. Perfmatters (Paid)
5. Disable Gutenberg (free)
6. Docket Cache (free)
7. Pre-Party (free)
8. Flyingpress (paid). There are other free plugins for caching that would satisfy the caching plugin requirement as well on the https://wordpress.org/plugins repository (I recommend WP Speed Of Light for a great free option as a substitute).
9. Flying Pages (free): Preloads inner pages HTML for faster load times (make sure to delay flying-pages.min.js in your javascript delay plugin to negate the performance impact).
10. Inspect HTTP Requests (free)
11. Disable Wordpress and Woocommerce Bloat (Free)
12. Yabe Webfont (Free)
13. Theme: Hello Elementor (Free).
Free alternatives needed to achieve the same functionality as Perfmatters are:
1. Asset Cleanup (Free version)
2. Debloat (Free)
3. Pre-Party (Free)
4. Remove Global Styles (Free)
5. Disable Wordpress and Woocommerce Bloat (Free)
6. CAOS for Local Analytics (Free)
7. Freesoul Plugin Deactivator (Free)
8. Fluent Snippets (Free)
9. A3 Lazyload or any plugin with Lazy Load functionality (Free)
10. Dynamic Heartbeat Control (Free)
11. CDN Enabler (if desired for CDN url rewrites) (Free)
12. Yabe Webfont (for local hosting fonts) (Free)
13. Disable Google Fonts (Completely disable Google Fonts if desired) (Free)
14. WPS Hide Login (Free)
15. Lazy Load Anything (Free)
Note: Because it takes 15 free plugins to fully replicate Perfmatters functionality I recommend springing for Perfmatters, but the hodgepodge of free plugins combined works just as well if money is an issue.
I also recommend using Yabe Webfont instead of Perfmatters or OMGF for locally hosting Google Fonts.
Hosting: VPSDime.
Javascript files delayed with perfmatters (feel free to use any plugin with Javascript Delay, including Debloat):
https://pastebin.com/m94cSYku
CSS Selectors excluded from Remove Unused CSS:
You can drop the selector exclusions into the exclusions box in Debloat as well, after checking the toggle to remove unused css from all files.
You will have to implement selective plugin disabling, as well as selective asset disabling (there are sections dedicated to that further down in the guide). Don’t forget to disable unnecessary WP Core files. You will need to activate the setting to allow you to disable WP Core files via a checkbox in the Asset Cleanup settings panel.
An Elementor site can be optimized to 90+ in 20 minutes if done right. Easy peezy.
This is replicable on any Elementor site! Once you have your configuration down on the first site, you can export your settings and import them on any Elementor site. Some features will load additional files (Elementor animations for instance), so depending on if you are using animations on site vs another you may have to add a few more files to the delay list or exclusions list.
Note
You will have to manually configure Asset Cleanup selective asset disabling, selective plugin disabling, delay javascript and remove unused css exclusions. Minor configuration is necessary for caching plugins.
For Object Caching, once Docket Cache is installed you need to go into Docket Cache’s settings and manually enable object caching, then go into the configuration settings tab and enable the additional optimization features you would like to use. Pre-Party must also be manually configured. The database autoload option settings need to be manually configured via one of the Database Optimization plugins.
The other 5 plugins have no settings to configure, just activate them and you’re good to go. If you disable Google Fonts, you will have to upload local fonts (assuming you want custom fonts), which you can download via the link in the fonts section. Don’t forget to subset them to reduce the font file weights!
If anything breaks from copy pasting my Delay JS and Remove Unused CSS lists, you can remove the files from the javascript delay list one by one (or a few at a time) until you identify the file that must be excluded from delay, then readd the files to the list that are safe to delay.
Why am I getting errors in the console after delaying the files in your list?
I am intentionally delaying the i18n.min.js javascript file which is required for translations. Wordpress pitches a fit in the console when this file is delayed, but there are no functionality impacts to the site unless you are using translations. You may remove this file from the delay list if you wish to suppress the console errors, or you can fully unload it with Asset Cleanup.
Files that may need to be removed from the delay list depending on your configuration:
wp-util.min.js
underscore.min.js
i18n.min.js
hooks.min.js
Builders to Avoid
WPBakery
Just…don’t. It’s hard to find a more problematic plugin than WPBakery. Avoid it.
Beaver Builder
Beaver Builder is poorly optimized. While its javascript can largely be safely delayed without issue, basic features such as Beaver Builder’s native shape dividers will massively bloat the HTML document. Additionally, themes generate a ton of unnecessary unused CSS for beaver builder which is both inlined into the HTML document as well as files, adding tons of dead code which just adds to your page weight, slowing your site down.
135 KB of CSS for a single section on the page to implement a shape divider which cannot be removed with the Remove Unused CSS feature (Debloat, Flyingpress, Perfmatters, etc). Although the HTML is compressed by GZIP and Brotli, and the final size of the HTML document is ~240 kb, the HTML document should at maximum be 80 kb, preferably 50 KB or less. Beaver Builder = Cruft. This HTML document is at least 3x the size it should be.
Divi
Another extremely bloated builder. You can mitigate some of Divi’s performance impact, but not all. This poorly optimized builder also has unremovable cruft, and thus should be avoided. To reiterate, even though Elementor has poor performance out of the box, once optimized it is the most performant drag and drop builder.
Third party files
Hosting files locally to reduce external requests and improve performance:
Third party files are any files that are not served by your domain.
You should always host every file you possibly can on your server locally. That includes images, even if you are using a CDN for image delivery. Never load files from other third party servers if you can avoid it, they will always load much slower.
You do not want to have your site download Google Fonts or the Google Analytics file for every user from an external domain. It introduces additional latency, there will always be an additional delay when connecting to any external site. Use Perfmatters, or Pre-Party to preload fonts, css and js files that you want loading first, as mentioned before. All your local fonts(which you can identify via Gtmetrix/Debug Bear waterfall chart, if you see any font extension(WOFF, WOFF2, TTF etc) you can preload them in Perfmatters. Screenshotted below is a snippet of GTMetrix’s waterfall chart for a speed test of CBDMDs domain.
Youtube, fonts.gstatic.com, and cdn.searchspring.net under the domain column in the waterfall chart are the third party domains listed in this screenshot.
You want to host as many of the files from your plugins locally on your site as possible. Photos, videos, anything that you can. CAOS for Google Analytics for example downloads the files needed for Google Analytics locally and served by your site instead of downloading the files from Google’s servers.
On that note, normal Youtube implementations specifically will absolutely murder your site speed (Use WP Youtube Lyte instead listed below). If your client is demanding you use Youtube and you can’t escape using it, your site speed is going to be impacted regardless of the player used, however some of that weight can be mitigated using optimized Youtube players.
There will be a short delay for the video player to appear if you lazyload the video(it will load/appear as the user scrolls down), and possibly some CLS since the player is so big(especially on mobile connections), since it takes a bit to download once it enters the viewport, but it’s better than slowing down the initial page load time. Many youtube plugins now have placeholder images which will prevent the entire video from downloading until the user interacts with the player’s iframe via click or tap.
The load times for mobile users (especially with video) will be exacerbated by slow internet speeds, so if your client’s sites operate in rural areas, they are going to experience an even more severe delay than populated areas such as big cities.
Delay the WP Youtube Lyte JS for the best results!
Locally Host Third-Party Scripts And Styles
Articles
Daan.dev Article
https://daan.dev/blog/how-to/host-js-locally-crontab/
WPFY Article
https://wpfy.org/host-any-external-file-locally-in-wordpress/
Locally Host Assets (Free)
https://github.com/jazir555/Locally-Host-Assets
This is a self-developed plugin to locally host all third party CSS, JS and Font Files and cache them. Still in development, and I need testers! There are no PHP errors in the Debug Log when activated, but I could very much so use some feedback on if the functionality is working as intended. Please open a Github issue if you encounter any bugs or have any feature requests.
Future updates to the plugin will expand the amount of supported file types. I intend to add support for SVG files next, with the ability to optionally inline them into the root HTML document.
Once this has been confirmed to be working, I will upload it to the Wordpress.org plugin repository.
GDPR Cache Scripts And Styles (Free)
https://wordpress.org/plugins/gdpr-cache-scripts-styles/
Locally cache external third-party CSS and JS scripts and styles.
Flyingpress (Paid)
No documentation yet, but this is a recently added feature to Flyingpress which will locally host all third party CSS and JS files.
Locally Host Google Fonts
Manually Locally Download Google Font Files
Google Fonts Web Helper (Free)
https://gwfh.mranftl.com/fonts
Fonts are heavy files that add a lot of page weight, and when you use Google Fonts from Google’s CDN, the user has to make requests to their external server, which has a big performance cost. If you are using a fast VPS or managed host you will definitely want to serve those fonts locally.
Every single external call to a third-party domain will introduce additional lag. Minimize third-party calls as much as possible. Fonts are a big opportunity to reduce lag, so this is a key filetype to self-host.
Check your GTMetrix waterfall to identify what fonts you are using. Many plugins load fonts that you aren’t even using, so you might want to disable the Google Fonts feature of the plugin entirely and replace them with your downloaded WOFF2 files (which have the most browser compatibility, and the smallest file sizes).
If you are using Elementor, it has a section in the settings to upload custom fonts. When you are using an element, use the setting to select your font, it should be listed at the top of the list once you upload them. Other builders should also have this option, you’ll have to check their documentation to have to find out how to use it on your builder if you aren’t using Elementor
Automatically Locally Host Font Files
Yabe Webfont (Free)
https://wordpress.org/plugins/yabe-webfont/
Best plugin for locally hosting Google Fonts.
OMGF (Free)
https://wordpress.org/plugins/host-webfonts-local/
OMGF will also locally host your Google Webfonts, which removes external calls for your fonts. I recommend using Yabe instead.
Locally Host Assets (Free)
https://github.com/jazir555/Locally-Host-Assets
This is a self-developed plugin to locally host all third party CSS, JS and Font Files and cache them. This pulls all font files, not just Google Fonts unlike OMGF and Yabe Webfont.
Still in development, and I need testers! There are no PHP errors in the Debug Log when activated, but I could very much so use some feedback on if the functionality is working as intended. Please open a Github issue if you encounter any bugs or have any feature requests.
Future updates to the plugin will expand the amount of supported file types. I intend to add support for SVG files next, with the ability to optionally inline them into the root HTML document.
Once this has been confirmed to be working, I will upload it to the Wordpress.org plugin repository.
Flyingpress (Paid)
https://docs.flyingpress.com/en/article/optimize-google-fonts-1lotnj4/
Flyingpress can also locally host Google Fonts. Cannot serve manually specified local fonts, use OMGF or Yabe Webfont if you want to manually upload local fonts.
Resource Hints
When you cannot host third party files locally, you should use resource hints to improve connection speed and performance when calling a file from a third party domain.
Pre-Party (Free)
https://wordpress.org/plugins/pre-party-browser-hints/
This plugin allows users to automatically and easily embed resource hints to improve page load time.
Resource hints included: DNS prefetch, prerender, preconnect, prefetch, and preload are all supported.
Combine with HTTP/2 Server Push (Free)
HTTP/2 Server Push is more powerful and has a performance edge over resource hints.
HTTP/2 and resource hints are complementary and should be used together. However, the HTTP/2 Rel=”preload” is more powerful than the Rel=”preload” resource hint because with HTTP/2 Server Push the server pushes the resource before the user’s browser requests it(before the HTML document is served).
Resource hints on the other hand are placed within your HTML document, which means the user’s browser has to make a request for the resource to initiate the transfer first. Resource hints have performance benefits and should be used when possible, but Server Push has additional performance benefits over resource hints and should be used instead when possible.
Extended Explanation and Compare/Contrast
https://docs.google.com/document/d/1ZHGvCrXyKxAFLwVqj-Y1nRtzIYmU_vur0G1Ro8TDEkk/edit?usp=sharing
Fonts
Best Practices
Use WOFF/WOFF2, not TTF/other font formats as WOFF2 has the best compression.
Consolidate font families, weights, icons.
Disable font icon libraries (woff2, ttf, etc) and use individual SVG files instead. Font Icon libraries load the entire icon set instead of only the icons you need, which is a lot of unnecessary page weight.
Host fonts locally (instead of Google fonts from fonts.gstatic.com).
Once hosted locally, preload important font files loading above the fold.
If your use case demands that you need to load fonts from an external domain (such Google Fonts from fonts.gstatic.com), make sure to set up preconnect(pre-party resource hints, perfmatters and other plugins have this feature) to the external domain.
Locally Host Google Fonts
Manually Locally Download Google Font Files
Google Fonts Web Helper (Free)
https://gwfh.mranftl.com/fonts
Fonts are heavy files that add a lot of page weight, and when you use Google Fonts from Google’s CDN, the user has to make requests to their external server, which has a big performance cost. If you are using a fast VPS or managed host you will definitely want to serve those fonts locally.
Every single external call to a third-party domain will introduce additional lag. Minimize third-party calls as much as possible. Fonts are a big opportunity to reduce lag, so this is a key filetype to self-host.
Check your GTMetrix waterfall to identify what fonts you are using. Many plugins load fonts that you aren’t even using, so you might want to disable the Google Fonts feature of the plugin entirely and replace them with your downloaded WOFF2 files (which have the most browser compatibility, and the smallest file sizes).
If you are using Elementor, it has a section in the settings to upload custom fonts. When you are using an element, use the setting to select your font, it should be listed at the top of the list once you upload them. Other builders should also have this option, you’ll have to check their documentation to have to find out how to use it on your builder if you aren’t using Elementor
Yabe Web Font (Free)
https://wordpress.org/plugins/yabe-webfont/
Yabe is a very flexible local font hosting plugin.
GDPR / DSGVO friendly: You can import/self-host Google Fonts files from your server through your WordPress admin page. Fewer reasons to worry about GDPR / DSGVO compliance.
Google Fonts and Adobe Fonts ready: Start using any available fonts on Google Fonts and Adobe Fonts.
Custom Fonts: A dedicated custom fonts manager for WordPress. The central place to manage all your fonts and typography.
Lightweight and blazingly fast: The font management system uses WordPress REST API and a modern JavaScript framework for an instant, responsive user experience. The front page cache ensures fast loading and reduces database queries.
Variable Fonts support: The format allows a single font file to contain multiple stylistic variations.
OMGF (Free)
https://wordpress.org/plugins/host-webfonts-local/
OMGF will locally host your Google Webfonts, which removes external calls for your fonts.
Flyingpress (Paid)
https://docs.flyingpress.com/en/article/optimize-google-fonts-1lotnj4/
Flyingpress can also locally host Google Fonts. Cannot serve manually specified local fonts, use OMGF or Yabe Webfont if you want to manually upload local fonts.
Font Subsetting
Use a font subsetter to strip unused characters out of your font files, to reduce their file size.
Everything Fonts Subsetter (Free)
https://everythingfonts.com/subsetter
Aspose Subsetter (Free)
https://products.aspose.app/font/generator
Typst Subsetter (Free)
https://github.com/typst/subsetter
Glyphhanger (Free)
https://www.stefanjudis.com/notes/glyphhanger-a-tool-subset-and-optimize-fonts/
https://github.com/zachleat/glyphhanger
Subfont (Free)
https://github.com/Munter/subfont
Font Squirrel (Free)
https://www.fontsquirrel.com/tools/webfont-generator
Granular Performance optimized Web Font Generator. This can significantly reduce the size of your locally hosted fonts. I highly recommended it.
Font Squirrel can be paired with any locally hosted font, it is complementary to the other plugins listed here. You may use them together.
Very similar to subsetting. I would recommend using both.
Font Display (Free)
How Font Display Properties Work
https://css-tricks.com/almanac/properties/f/font-display/
WP FOFT Loader (Free)
https://wordpress.org/plugins/wp-foft-loader/
This plugin implements and automates Zach Leatherman’s “Critical FOFT with preload, with a polyfill fallback emulating font-display: optional” to optimize and speed up web font loading and improve UX by minimizing Flash of Invisible Text, Flash of Unstyled Text, and DOM Reflow.
Article
Asset Cleanup (Free)
https://wordpress.org/plugins/wp-asset-clean-up/
Can apply Font Display properties to both Locally Hosted Fonts, or Google Fonts.
OMGF (Free and Pro)
https://wordpress.org/plugins/host-webfonts-local/
Font Style Matcher (Free)
https://meowni.ca/font-style-matcher/
If you're using a web font, you're bound to see a flash of unstyled text (or FOUC), between the initial render of your websafe font and the webfont that you've chosen. This usually results in a jarring shift in layout, due to sizing discrepancies between the two fonts. To minimize this discrepancy, you can try to match the fallback font and the intended webfont’s x-heights and widths. This tool helps you do exactly that.
Article
https://blog.hubspot.com/website/web-safe-html-css-fonts
FontForge (Free)
Remove unnecessary glyphs to decrease font weight (Free)
FontForge is free and open-source software that will allow you to dig into font files. By removing unnecessary glyphs, we can safely reduce our font sizes by 80-90%!
Optimize Font Glyphs (Free)
Simplifying the design of the glyphs in the font can also reduce file size. This involves removing unnecessary points on the glyph outlines without compromising the design.
Remove Font Features to reduce file size
Adjusting font settings like hinting, kerning pairs, and ligatures can be a way to optimize the file size of your fonts, but these adjustments often involve trade-offs in terms of text appearance and functionality.
Remove Font Hinting (Free)
Hinting is a technique used to improve the legibility of fonts at small sizes on digital displays. It adjusts the font's outline to align better with the pixel grid.
Impact of Removal: Removing hinting can reduce file size, but it may make the font look worse on low-resolution screens where the font rendering relies on hinting for clarity.
Kerning Pairs (Free)
Kerning involves adjusting the spacing between specific pairs of characters to make the spacing appear more uniform. This is particularly important for certain character combinations where the default spacing looks awkward.
Impact of Removal: Removing or reducing the number of kerning pairs can decrease the font file size but might lead to uneven character spacing that can affect readability and aesthetics.
Ligatures (Free)
Ligatures are single glyphs that represent a combination of two or more characters, commonly used for character pairs like 'fi', 'fl', etc.
Impact of Removal: Omitting ligatures can reduce the file size and simplify the font but can degrade the typographic quality of the text, especially in print or high-resolution displays.
Database Optimization
Always take backups before implementing any database optimizations
Disable Unnecessary Auto-loaded Database Options
Disabling unnecessary autoloaded database options is a great way to boost performance by removing overhead and dead weight. Many plugin options do not need to be autoloaded and can safely be set to autoload no.
HOWEVER, setting certain autoload options to no for many plugins can break your site. Always take a database backup before changing these settings. You should generally be able to just reset the option autoload yes if some functionality breaks, but as a best practice it is always recommended to take a database backup before changing anything, just in case. It is possible to be locked out of the WP-Admin backend entirely due to a critical error caused by disabling an autoload option in rare cases.
SweepPress (Free)
https://wordpress.org/plugins/sweeppress/
Autoload Option Manager and Database Sweeper with 43 separate items cleaned. Very useful.
AAA Option Optimizer (Free)
https://wordpress.org/plugins/aaa-option-optimizer/
This plugin tracks which of the autoloaded options are used on a page, and stores that data at the end of page render. It keeps an array of options that it has seen as being used. On the admin page, it compares all the autoloaded options to the array of stored options, and shows the autoloaded options that have not been used as you were browsing the site.
If you’ve been to every page on your site, or you’ve kept the plugin around for a week or so, this means that those options probably don’t need to be autoloaded.
Autoload Checker (Free)
https://wordpress.org/plugins/autoload-checker/
Autoload Checker helps you monitor the total size of the autoloaded data in the wp_options table of your database. Autoloaded data is data that is loaded on every page load, regardless of whether it is needed or not. This can affect the performance and speed of your site, especially if you have a lot of plugins installed.
Autoload Checker does not remove any autoloaded data from your database, it only checks the status and displays it in your WordPress dashboard. You can see the total size of the autoloaded data, as well as the top autoloaded data entries sorted by size. This can help you identify which plugins or themes are adding the most autoloaded data to your database, and decide if you need to optimize them or not.
Database Cleaner (Free)
https://wordpress.org/plugins/database-cleaner/
Another free option for managing database options autoload status.
Advanced Database Cleaner (Freemium)
https://wordpress.org/plugins/advanced-database-cleaner/
Neat database management plugin.
Database Cleaners
SweepPress (Free)
https://wordpress.org/plugins/sweeppress/
Database Sweeper with 43 separate items cleaned. Very useful.
WP-Sweep (Free)
https://wordpress.org/plugins/wp-sweep/
Advanced Database Cleaner (Freemium)
Free version:
https://wordpress.org/plugins/advanced-database-cleaner/
Paid Pro version
https://sigmaplugin.com/downloads/wordpress-advanced-database-cleaner/.
It’s important to go through and delete every unneeded option you can, unneeded database options build up over time as you remove plugins and if you change themes, and can slow your site without you realizing it. If you install a plugin, then uninstall it, always delete the leftover tables and options with advanced database cleaner pro or another database cleanup plugin.
Some plugins create a ton of database tables and options, you should avoid those (Sumo Plugins for example). You want as low a database hit as possible, so fewer queries is better. This is important for Object Caching Performance (Redis, Docket Cache, Memcached, etc).
Better optimized plugins will make fewer calls to the database. Also set anything that shouldn’t be autoloading set to “autoload no'' via advanced database cleaner or another plugin.
Many plugins will autoload unnecessary data on every page load, so disabling the autoload should boost your site speed. Just make sure to bug test your site to ensure the entries you’ve disabled do not cause issues with the plugin’s features.
Database Query Analysis and Diagnosis
Query Monitor (Free)
https://wordpress.org/plugins/query-monitor/
Use Query Monitor to debug and identify plugins that have slow database queries.
It’s one of the best tools you can use to diagnose performance issues. Once you have identified which plugins have slow queries, you can look for alternative plugins that have the same functionality, but that are leaner and faster.
Add-Ons (Free)
https://querymonitor.com/help/add-on-plugins/
Collection of Query Monitor Addons to extend Query Monitor’s functionality.
Fluent Query Logger (Free)
https://wordpress.org/plugins/fluent-query-logger/
Query Logger with Selective Logging Functionality.
Database indexing
You should not use Index MySQL for Speed and Scalability Pro together. Pick one or the other
Index WP MySQL For Speed (Free)
https://wordpress.org/plugins/index-wp-mysql-for-speed/
(Unnecessary if you use Scalability Pro)
Index WP Users For Speed (Free)
https://wordpress.org/plugins/index-wp-users-for-speed/
This plugin speeds up the handling of your WordPress registered users, especially when your site has many thousands of them.
This plugin puts in separate indexes that Index MySQL for Speed does not index. I would not recommend using this plugin alongside Scalability Pro. If you get Scalability Pro, don’t use either of the other Database Indexing plugins above.
Do not leave Index WP Users For Speed active after adding the indexes, it has a lot of unnecessary database calls on every page load when active which will likely have a negative impact on your site’s pagespeed. Once the indexes have been added it is safe to deactivate the plugin.
Scalability Pro (Paid)
https://www.wpintense.com/product/scalability-pro/
Helpful on pretty much any site, but especially so for woocommerce stores. If your site uses Woocommerce, I would highly suggest you pick Scalability Pro over Index Mysql For Speed if you can afford it, as it adds indexes to Woocommerce tables (sadly Index MySQL For Speed does not).
—------------------------------
Meta Optimizer (Free)
https://wordpress.org/plugins/meta-optimizer/
This plugin optimizes WordPress meta data storage by saving all meta data for each post, comment, user, or term in a single row with separate columns for each meta key. This reduces the number of rows and improves the query performance and data export. Convert myISAM tables to InnoDB.
Templ Optimizer (Free)
https://wordpress.org/plugins/templ-optimizer/
Automatically Convert myISAM tables to InnoDB tables which are more performant. The vast majority of Wordpress sites are already using InnoDB tables, but this plugin is useful for any legacy sites still on myISAM.
Transients Manager (Free)
https://wordpress.org/plugins/transients-manager/
Manage Wordpress Transients stored in the database.
Delete Expired Transients (Free)
https://wordpress.org/plugins/delete-expired-transients/
Delete old, expired transients from the WordPress options table (wp_options), to prevent them from bloating your database and slowing down your website.
Disable WP Rest API (Free)
https://wordpress.org/plugins/disable-wp-rest-api/
Disables The Rest API.
Analytics
Delaying Analytics Javascript Will Affect Your Metrics
I recommend delaying all analytics scripts to mitigate their performance impact. Analytics platforms work via javascript, which is incredibly performance heavy and causes a large hit to pagespeed. Deferring javascript execution only slightly mitigates it, to eliminate the performance impact entirely the javascript must be delayed from downloading until user interaction.
Delaying your analytics javascript will fuzz your data. A trade off for maintaining performance. Your collected data will not be 100% accurate if the javascript is delayed, and your traffic count may be higher than the data collected indicates. What’s important is conversions, not the statistics. Increased conversions for fuzzier data is a no brainer.
Self-hosted Local Analytics
Matomo Analytics (Freemium)
https://wordpress.org/plugins/matomo/
Matomo is a great analytics plugin which is open source and free. Out of the box without addons it has equivalent functionality to Google Analytics. You are able to locally host Matomo analytics and do not have to share them with a third party service, which is a critical necessity for GDPR. The analytics are also going to be more accurate than Google analytics.
I recommend choosing Matomo over Google Analytics, although you can use both simultaneously if desired.
Optimization
Delay Matomo.js in your javascript delay plugin to mitigate its performance impact
Koko Analytics (Free)
https://wordpress.org/plugins/koko-analytics/
Lightweight local hosted analytics. Very basic statistics. I’d recommend going with Matomo over Koko Analytics just to get more in depth data, but they’re both fine local hosted solutions.
Lazy Load Analytics
True Lazy Analytics (Free)
https://wordpress.org/plugins/true-lazy-analytics/
This plugin enables lazy loading for Google Analytics, Facebook Pixel, Hotjar, Yandex Metrica (Yandex Metrika) and Liveinternet counter.
Lazy Load Clarity (Free)
https://wordpress.org/plugins/lazy-load-clarity/
Lazy Load the Microsoft Clarity tracking script
Heatmaps and Clickmaps
Aurora Heatmap (Free)
https://wordpress.org/plugins/aurora-heatmap/
Neat little free plugin, heatmaps and clickmaps, all collected and stored locally on your webserver.
Microsoft Clarity (Free)
https://clarity.microsoft.com/
https://wordpress.org/plugins/microsoft-clarity/
Microsoft Clarity is a drop-in replacement for Hotjar for collecting click/scroll analytics(Heatmaps, scrollmaps, click maps, rage clicks etc) as well as Session recording and a few other neat features, completely free!
Microsoft Clarity is better and has more features than Aurora Heatmaps, but you need to create a (free) account. No strings attached, it really is totally free.
Lazy Load Microsoft Clarity (Free)
https://wordpress.org/plugins/lazy-load-clarity/
The Lazy Load Clarity plugin is a simple plugin that allows you to load your Microsoft Clarity script without affecting your website page speed.
The script will load only after an initial interaction by the user, thus reducing Clarity’s page speed impact to zero.
Session Recording
Microsoft Clarity (Free)
https://clarity.microsoft.com/
https://wordpress.org/plugins/microsoft-clarity/
https://wordpress.org/plugins/lazy-load-clarity/
A/B Testing
Mojito (Free)
https://github.com/mint-metrics/mojito
https://github.com/mint-metrics/mojito-js-delivery
Mojito is an incredibly powerful Open Source A/B testing toolkit with a JS file weight of just 5 KB. It’s the fastest, most performant way to run javascript based A/B testing. It can even be hooked into Google Optimize to see the data output in Google’s web interface.
NOTE
Mojito may appear to be dead at first glance due to the inactivity in the top level repo, but its dependency repos (and therefore the project) are still under active development!
Do not delay Mojito’s JS File
Note: Do not delay Mojito’s JS file. It needs to load without a delay to correctly determine which page variant to display.
Google Analytics
How to mitigate Google Analytics Performance impact
Delay Analytics Javascript
Javascript Files To Delay List (you can copy paste this list):
gtag.js
gtag.min.js
analytics.min.js
google-analytics.com
ga
/gtag/js
gtag(
/gtm.js
/gtm-
gtm.js
gtag
googletagmanager.com
Locally Host Google Analytics
In addition to delaying the analytics javascript files, you should also locally host them. Below are a couple plugins which allow you to locally host the analytics files, but many other plugins have that feature as well.
Rankmath Self-Hosted Analytics (Paid)
Rankmath has cookieless tracking and hosting Google Analytics locally as options in the pro version. You should always host the analytics file locally.
Its cookieless tracking option means you can completely remove or ignore any cookie related GDPR compliance plugins, since you are no longer tracking users with cookies!
CAOS (Free)
https://wordpress.org/plugins/host-analyticsjs-local/
If you use any tracking analytics or any tags(you should!), use CAOS analytics to host gtag.js locally to negate the performance impact they have on your site.
The cookie value will be unique to what the laws are for the areas your customers are in, so be aware of local privacy laws.
Google Tag Manager
https://tagmanager.google.com/#/home
Use Google Tag Manager to add third party tracking tags. Never use additional tracking plugins. Once you’ve set up all your tags with Tag Manager, use CAOS to download gtag.js. All your tracking tags should function via that one file, which should reduce requests and speed up your load times. Many sites are very laggy because of bad tracking tag implementations.
GTM Kit (Free)
https://wordpress.org/plugins/gtm-kit/
Free Google Tag Manager Local Hosting plugin, able to load Tag Manager scripts with a delay to eliminate Tag Manager’s performance impact.
Optimization
See the above section for optimizing google analytics. You can delay the same JS files. Just copy paste the list into your javascript delay plugin’s script list.
Klaviyo (Paid)
Delay Klaviyo Javascript
Klaviyo does not have a lazy load solution, however Klaviyo’s Javascript files can be delayed using any plugin with a JS Delay feature, including the ones listed below.
Other Analytics Platforms
Other analytics providers/platforms performance impact can be negated by simply delaying their javascript files with the Delay JS feature of any optimization plugin.
Delay Javascript
Same thing, all analytics plugins use javascript to calculate the analytics. Delay the analytics files/the analytics domains to prevent them from loading until user interaction to mitigate their performance impact.
HTTP Server Push
Smashing Magazine Article
https://www.smashingmagazine.com/2017/04/guide-http2-server-push/
HTTP Push Content (Free)
https://wordpress.org/plugins/http2-push-content/
Push / Pre-load all JS files in site with one simple option
Push / Pre-load all the CSS files in your website
Push / Pre-load other resources throughout the site or based on the page types
Load CSS Asynchronous or Remove any CSS file throughout the site, or there is a conditional selector that you can apply
Async / Defer / Remove any JS file throughout the site or based on the WordPress page type
You can create mobile device specific rule to push, pre-load, remove, async js or css, this works based on the device user agent detection
You can create desktop device specific rule to push, pre-load, remove, async js or css, this works based on the device user agent detection
Conditionally remove JS and CSS from various WooCommerce pages like checkout page, cart page, product page, product category page
You can push pre-load resource specific on some pages by there ID
Remove CSS, JS specific to page or post by their ID
Remove Inline CSS and JS Via HTTP Resource ID
Optimize More! (Free)
https://wordpress.org/plugins/optimize-more/
Has the ability to remove inline CSS styles and inline javascript files selectively on a per page basis.
Resource Hints
Pre-Party Browser Hints (Free)
https://wordpress.org/plugins/pre-party-browser-hints/
This plugin allows users to automatically and easily embed resource hints to improve page load time.
Resource hints included: DNS prefetch, prerender, preconnect, prefetch, and preload are all supported.
Cleanup Unused Custom Post Types
Custom Post Type Cleanup (Free)
https://wordpress.org/plugins/custom-post-type-cleanup/
Cleanup unused Custom Post Types to improve Database Performance.
Reduce HTTP Requests
Inspect HTTP Requests (Free)
https://wordpress.org/plugins/inspect-http-requests/
Monitor all the HTTP Requests being made via WP HTTP Methods i.e. wp_remote_get, wp_remote_post. Block any request by just a click of a button.
Also tracks how much time a request like updating core/plugin/theme takes.
HTTP Requests Manager (Free)
https://wordpress.org/plugins/http-requests-manager/
Prevent WP HTTP requests from slowing down your WordPress website and admin interface.
The HTTP Requests Manager plugin will log all WP HTTP requests with time taken to complete for each request. If there are multiple requests per page they will be color grouped.
Helps to prevent website slowdown by:
Sets the request timeout period to 2 seconds. Where default is 5.
Limits the number of requests per page by 3. Default is unlimited.
Limit WP HTTP request if page load time is longer than 3 seconds. Default is unlimited.
Option to block all external requests or allow only requests to wordpress.org for plugin, theme and core updates.
Passive Listeners
Helper Lite For Pagespeed (Free)
https://wordpress.org/plugins/helper-lite-for-pagespeed/
Remove the Passive Listeners warning on Pagespeed tests, improves scores. Has not been updated in over a year, test on staging before activating this plugin on a live site!
Optimize More! (Free)
https://wordpress.org/plugins/optimize-more/
Function to remove passive listeners warning
Reduce Admin Ajax Usage
Diagnosing high admin-ajax usage:
https://kinsta.com/blog/admin-ajax-php/
https://koerge.com/learn/wordpress-admin-ajax-php-error/
Ajax Usage Logging
Amuga Ajax Log (Free)
https://wordpress.org/plugins/amuga-ajax-log/
Amuga Ajax Log tracks and logs actions that hit admin-ajax
Requested action name
Possible function or method name
Suspected location
Page that triggered the hit
Note: Only leave active when diagnosing, deactivate after use to eliminate its performance impact.
Heartbeat Control
Dynamic Frontend Heartbeat Control (Free)
https://wordpress.org/plugins/dynamic-front-end-heartbeat-control/
The WordPress Heartbeat API provides real-time communication between the server and the browser when you are logged into your WordPress admin panel. It uses the file /wp-admin/admin-ajax.php to run AJAX calls from the browser. By default, AJAX requests are sent every 15 seconds on post edit pages, and every 60 seconds on the dashboard.
Almost every paid optimization plugin has a function to control the Wordpress heartbeat as well.
Cache Ajax Requests
Cookie Cache Busting to cache Dynamic Ajax Content
https://wpshout.com/crash-course-ajax-wordpress/
https://wpshout.com/using-cookies-in-wordpress-part-ii-cache-busting-with-ajax/
Swift Performance
https://swiftperformance.io/blog/how-to-cache-ajax-get-requests-with-swift-performance-pro/
https://docs.swiftperformance.io/knowledgebase/cache-ajax-requests/
Swift Performance Lite (Free)
https://wordpress.org/plugins/swift-performance-lite/
The Lite version is capable of caching Ajax requests. This is probably the easiest way to cache Ajax requests.
Cloudflare Super Page Cache (Free)
https://wordpress.org/plugins/wp-cloudflare-page-cache/
In addition to Varnish (or Swift Performance if you use it), Cloudflare Super Page Cache can cache Ajax get requests (not post requests sadly)
Uncheck the box in “do not cache dynamic content” titled “Ajax Requests”
Cloudflare Limitations
If the Ajax requests are coming from a plugin that uses Ajax Nonces, the page/ajax will not be able to be cached(when using Cloudflare Super Page Cache*).
See the developer’s explanation here:
https://wordpress.org/support/topic/how-to-correctly-cache-or-bypass-ajax-requests/
Control WP-Cron Jobs
Advanced Cron Scheduler (Free)
https://wordpress.org/plugins/migrate-wp-cron-to-action-scheduler/
Lightweight Advanced Cronjob Manager
WP Crontrol (Free)
https://wordpress.org/plugins/wp-crontrol/
WP Crontrol enables you to view and control what’s happening in the WP-Cron system.
Cron Logging (Free)
https://wordpress.org/plugins/cron-logger/
This plugin will help you identify which Cronjobs (if any) are problematic.
Create Server/System Cron Jobs And Disable WP Cron (Free)
https://wpspeedmatters.com/external-cron-jobs-in-wordpress/
Disable Pingbacks (Free)
https://wordpress.org/plugins/no-self-ping/
A pingback is an automated comment that gets created when another blog links to you. There can also be self-pingbacks which are created when you link to an article within your own blog.
Some people really like that WordPress sends pings from your own site to your own site when you write posts; it gives them a trail of related posts.
Some people do not like this behavior; it clutters up their comments.
This plugin disables intra-blog pinging.
Disable Bloat
Unbloater (Free)
https://wordpress.org/plugins/unbloater/
Some unique debloat features that other plugins don’t have, including:
Remove DNS prefetch to s.w.org
Load comment script only when needed
Remove recent comments inline style
Prevent auto-linking URLs in comments
Normalize favicon
Normalize login logo title
Normalize login logo URL
Disable login language selector
WP Control (Free)
https://wordpress.org/plugins/wpcontrol/
Free debloat toolkit. A few options for disabling features not found in the other plugins in this section.
Disable Bloat for WordPress & WooCommerce (Free)
https://wordpress.org/plugins/disable-dashboard-for-woocommerce/
Great plugin with a lot of Debloat features for both Woocommerce and Wordpress. Any paid “pro” options can be achieved with other free plugins. There is no reason to purchase the pro version of the plugin. The pro version is completely unnecessary.
Disable Comments
Turn Off Comments (Free)
https://wordpress.org/plugins/turn-off-comments/
Disable Comments Sitewide
Optimization Toolkits
These are optimization toolkits with many additional features to other plugins included in this guide. All of the listed plugins are adjuncts to everything else, they are not the end all be all of optimization.
Advanced Settings (Free)
https://wordpress.org/plugins/advanced-settings/
Toolkit with a lot of features. Adjunct for other optimization plugins.
Remove type=”text/javascript” attribute from <script> tag
Track and list enqueued scripts/styles
Merge and include removed scripts/styles
Load merged removed scripts in footer
Load merged removed styles
Post types
Manage/create/edit
Add supports: title, editor, author, thumbnail, excerpt, trackbacks, custom fields, comments, revisions, page attributes, etc.
Configure: hierarchical, has_archive, query_var, show_in_menu, show_ui, publicly_queryable, public, etc.
Taxonomies: category, post_tag
HTML Code
Fix incorrect Facebook thumbnails including OG metas
Hide top admin menu
Automatically add a FavIcon (whenever there is a favicon.ico or favicon.png file in the template folder)
Add a description meta tag using the blog description (SEO)
Add description and keywords meta tags in each posts (SEO)
Remove header WordPress generator meta tag
Remove header WLW Manifest meta tag (Windows Live Writer link)
Remove header RSD (Weblog Client Link) meta tag
Remove header shortlink meta tag
Configure site title to use just the wp_title() function (better for hardcode programming)
Limit the excerpt length
Add a read more link after excerpt
Remove wptexturize filter
Remove Trackbacks and Pingbacks from Comment Count
Insert author bio in each post
Allow HTML in user profile
Compress all HTML code
Remove HTML comments (it’s don’t remove conditional IE comments like: <!–[if IE]>)
Add Google Analytics code
Add FeedBurner code
System
Hide the WordPress update message in the Dashboard
Add dashboard logo
Unregister default WordPress widgets
Disable widget system
Disable comment system
Disable Posts Auto Saving
Automatically generate the Post Thumbnail (from the first image in post)
Set JPEG quality
Resize image at upload to max size
Display total number of executed SQL queries and page loading time
Fix post type pagination
Scripts
Remove unnecessary jQuery migrate script (jquery-migrate.min.js)
Include jQuery Google CDN instead local script (version 1.11.0)
Remove type=”text/javascript” attribute from tag
Track enqueued scripts
Merge and include removed scripts
Load merged removed scripts in footer
Styles
Track enqueued styles
Merge and include removed styles
Filters/Hooks
Disable wp filters/hooks
Falcon (Free)
https://wordpress.org/plugins/falcon/
Neat little toolkit, very basic features, but a few unique ones that other kits don’t have (like disabling the admin email nag notification)
WP Tools (Free)
https://wordpress.org/plugins/wptools/
The WP Tools plugin (wp-tools) features a comprehensive dashboard showcasing server statistics, including a chart of errors, page load time also by page and boasts over 47 tools designed to simplify your WordPress management tasks. It serves as a versatile Swiss army knife for your WordPress needs.
Disable Everything (Free and Pro)
https://wordpress.org/plugins/disable-everything/
Another toolkit with a few unique features, another adjunct.
MagicBox (Free)
https://wordpress.org/plugins/magicbox/
The Swiss Army Knife all-in-one optimization and functionality toolkit.
SMTP
Contact Buttons
Form Builder
Bulk Mail
Lazy Load
Database Repair
Cache Manager
Preloader
Popups
Live Search
Fancybox
Custom CSS
Cookie Policy Options
Login Logs
PHP Information
Error Logs
Post Authentication
Disqus Comment
Comment Manager
Backup Manager
Image Upload Optimiser
Bulk Image Resize
Keyword Suggestion
Url Replacement
Site Redirects
Sitemap
Seo Image
Error Redirects
Error Page Manager
Duplicate Manager
Custom Redirects
Visit Limitation
Login Url
Google Authenticator
Captcha
Tracking Codes
User.ini Editor
Htaccess Editor
Code Insert Manager
Gutenberg Editor modifications
White Label
User Switch
Maintenance Mode
Clone Manager
Custom Login
Custom Dashboard
Admin Menu Manager
User Permissions
Robot Txt Editor
WPMasterToolKit (Free)
https://wordpress.org/plugins/wpmastertoolkit/
Great toolkit with a bunch of functionality. A few unique features.
Global Styles
Disable Global Styles (Free)
https://wordpress.org/plugins/disable-global-style/
Disables the global styles inlined by WordPress since WP 5.9. It also removes the duotone SVGs added after the opening body tag. Perfmatters has this feature as well.
Perfmatters (Paid)
Features: Selective disabling of plugins, CSS and JS.
Delay Javascript
Remove Unused CSS
Preload and Preconnect
Code insertion into the Header and Footer
Remove Global Styles
Remove default Wordpress bloat (emojis, RSS, shortlinks, etc)
Defer Javascript
Image and Iframe/Video Lazyloading
Disable Google Fonts
CDN url rewrite
Custom Login URL
Woocommerce Disable Scripts on Non-Woocommerce Pages
JS and CSS Minification
Heartbeat Control
Free plugins to replicate Perfmatters functionality:
1) Asset Cleanup
2) Debloat (For JS Deferral, JS Delay, Minification and Remove Unused CSS)
3) Pre-Party
4) Remove Global Styles
5) Disable Wordpress and Woocommerce bloat
6) CAOS for local analytics
7) WP Headers and Footers for Code Insertion
8) Freesoul Plugin Deactivator
9) Image and Iframe Lazy Load plugin (A3 lazy load, Optimize More!, a million options)
10) Advanced Database Cleaner free or Database Cleaner
11) Disable Google Fonts (if desired)
12) CDN Enabler
13) WPS Hide Login
14) Dynamic Front-End Heartbeat Control
Preload Inner Pages
Flying Pages (Free)
https://wordpress.org/plugins/flying-pages/
In my opinion this is the best inner page preloading plugin. Flying Pages not only preloads links that are hovered over, but any link that enters the viewport. This is great because when any link is clicked, the pages will already be preloaded.
This plugin will preload inner pages. Inner Pages are the pages that are loaded after the initial page the user starts on. For example, they load the homepage first, and there are links to other pages in the header and footer menu.
Those page’s HTML is preloaded with Flying Pages so that when these links are clicked, their HTML has already been downloaded, resulting in faster loading time for the inner page that was clicked.
Note: Make sure to delay the js file “flying-pages.min.js” in Perfmatters(or whatever plugin you are using to delay javascript) settings panel. WP Meteor, while it does delay everything, does not seem to touch this file, so it will have to be delayed with an additional plugin.
Quick Links (Free)
https://wordpress.org/plugins/quicklink/
Quicklink for WordPress attempts to make navigation to subsequent pages load faster. Embedded with the plugin is a javascript library, which detects links in the viewport, waits until the browser is idle and prefetches the URLs for these links. The library also tries to detect if the user is on a slow connection or on a data plan.
I recommend delaying the Quick Links javascript file, the same as you would if you were using Flying Pages instead.
Speculative Loading (Free)
https://wordpress.org/plugins/speculation-rules/
By default, the plugin is configured to prerender WordPress frontend URLs when the user hovers over a relevant link. This can be customized via the “Speculative Loading” section under Settings > Reading.
Selectively deactivate plugins and CSS/JS
Use Asset Cleanup, Perfmatters, Freesoul Plugin deactivator, or any other plugin with this functionality. I recommend using Asset Cleanup Pro as it has the most configuration options, and it can also disable unnecessary WP Core files in addition to selective plugin deactivation.
When To Selectively Disable Plugins
If a plugin is only used on the frontend or backend, you should unload them where they are not needed. A file manager plugin for instance only needs to run in the backend, so it should be disabled on the frontend.
Asset Cleanup Pro (Paid)
https://www.gabelivan.com/items/wp-asset-cleanup-pro/
The paid version of asset cleanup has a very configurable plugin disabler.
Perfmatters (Paid)
FreeSoul Plugin Deactivator (Free)
https://wordpress.org/plugins/freesoul-deactivate-plugins/
Selectively deactivate plugins per page/post type on both the frontend and backend.
WP Asset Manager (Free)
https://wordpress.org/plugins/gonzales/
Neat free asset and plugin control manager. Full featured, can selectively deactivate css/js/plugins.
Plugin Organizer (Free)
https://wordpress.org/plugins/plugin-organizer/
Plugin Organizer will let you selectively deactivate plugins, as well as let you change the order in which they load.
Plugin Load Filter (Free)
https://wordpress.org/plugins/plugin-load-filter/
Another selective plugin disabling plugin
WP Plugin Manager (Free)
https://wordpress.org/plugins/wp-plugin-manager/
Selectively deactivate css and js files
Selectively disabling assets (css and js files) is more selective than disabling a plugin wholesale. Sometimes you need a plugin to load on a page, but you don’t need every file the plugin loads by default. Asset Cleanup, Perfmatters
Asset Cleanup (Free and Pro)
https://wordpress.org/plugins/wp-asset-clean-up/
https://www.gabelivan.com/items/wp-asset-cleanup-pro/
Asset Cleanup Disabling CSS and JS files in the Asset Cleanup Metabox on pages:
You should disable all unnecessary js and css files from plugins that are loading on a page if you do not want to completely disable them with the plugin manager that you can without breaking the page.
More on Asset Cleanup’s features later in the guide.
Optimize More! (Free)
https://wordpress.org/plugins/optimize-more/
Optimize More! can selectively deactivate js and css files.
Perfmatters (Paid)
Script Manager
Enable script manager in the perfmatters settings panel, then open script manager from the top bar in frontend to access the script manager UI.
WP Asset Manager (Free)
https://wordpress.org/plugins/gonzales/
Neat free asset and plugin control manager. Full featured, can selectively deactivate css/js/plugins.
Remove Unused CSS
Instructions
Note: Perfmatters interface used in the example below.
Enable the remove unused CSS function:
Clear the caches of the caching plugin you are using, and the server cache if your host has one or you’ve enabled it on your VPS if you have one configured.
Check the frontend to ensure nothing has broken. Check every page thoroughly throughout the entire site. Remove unused CSS will remove unused CSS on every page on your site.
Add exclusions if necessary. Clear your unused css using the button at the bottom, or the clear unused css function of whatever plugin you are using.
Clear your caches again and verify that nothing is broken. If something is still broken, repeat adding exclusions until the design no longer breaks.
Once everything that you need to exclude is excluded(if you need to add exclusions at all that is), move on to delaying javascript
How to identify classes that need to be excluded
Inspect element over the css element you are trying to exclude.
Double click the class so the text is highlighted and then copy it.
Paste it in the exclude classes box with a period before the text. For example, “.media-wrap medium-down--hide”
How to Identify which stylesheets need to be excluded
If excluding a class or a selector does not work, you may have to exclude an entire css stylesheet.
First, go https://gtmetrix.com or https://www.debugbear.com/test/website-speed and speed test the website you are trying to optimize. This requires you to copy paste your URL into the text box on the GTMetrix homepage:
Next go to the waterfall chart tab, and sort by CSS files:
Find the Stylesheets that need to be excluded and paste them into the exclusions box and hit save.
You will have to play around with it. I highly recommend you test the implementation of this feature on a staging site (not your live site), so the user experience is not affected on the live site due to design breakage.
Debloat (Free)
https://wordpress.org/plugins/debloat/
Great free option (and the only one that exists) for removing unused CSS.
Critical CSS for Wordpress (Free)
https://wordpress.org/plugins/critical-css-for-wp/
Removes Unused CSS and inlines critical CSS.
Flyingpress (Paid)
Flyingpress is one of the best caching plugins and has the remove unused CSS feature.
Perfmatters (Paid)
Perfmatters (covered below) is a great optimization plugin that has more configurability and can also remove unused css.
Manually Remove Unused CSS (Free)
Inline Small CSS/JS files
When to use inlining
This is useful for small files to reduce the amount of http requests, but inlining css/js files that are large will hurt performance. Use inlining sparingly, and always test to make sure nothing has broken after inlining a file. If a file depends on a specific loading order (say a specific js script), moving the load order to the root html may break functionality.
Optimize More! (Free)
https://wordpress.org/plugins/optimize-more/
Optimize More! has a function to inline both javascript and css files into the head of the html document.
Asset Cleanup (Free and Pro)
https://wordpress.org/plugins/wp-asset-clean-up/
Asset Cleanup can inline css files.
Automatic Inlining of CSS files based on file size
Asset Cleanup has functionality which will automatically inline CSS files below a certain file size (3 kb for example)
How To Optimize Your CSS Manually (Free)
Unnecessary if the other plugins listed above are used, but if a plugin is not desirable these resources explain how to remove it manually.
Micro-Optimize Your CSS
https://perishablepress.com/how-to-micro-optimize-your-css/
CSS Code Formatting
https://perishablepress.com/series-summary-obsessive-css-code-formatting/
Content Visibility Property (Free)
https://web.dev/articles/content-visibility
Conditional CSS loading via PHP functions
https://webdesign.tutsplus.com/loading-css-into-wordpress-the-right-way--cms-20402t
Critical CSS Generator
https://www.corewebvitals.io/tools/critical-css-generator
Manual CSS and JS Minification
https://www.toptal.com/developers/javascript-minifier
https://gist.github.com/Ruzgfpegk/4fd666180e40bb8a0e0608ad35fb5a88#minify-your-css
Lazy Load Custom Elements (Free)
https://css-tricks.com/an-approach-to-lazy-loading-custom-elements/
Minification
The top few paragraphs break down how minification works.
Minify HTML
WP Speed Of Light (Free)
https://wordpress.org/plugins/wp-speed-of-light/
Optimization kit and caching plugin, minifies html as well.
Minify HTML Markup (Free)
https://wordpress.org/plugins/minify-html-markup/
Purely minimizes HTML, no other functionality. Reduces the size of your HTML document, which speeds up TTFB. Use in conjunction with your caching plugin if it does not have an HTML minification feature (WP Rocket for instance, although WP Rocket should generally be avoided).
Minify JS and CSS files
Activate the css and js minification features using a cache plugin(most of them have a setting for css and js file minification), or Debloat. If using Debloat for unused css removal, activate minification within Debloat only. You should not be minifying your files with multiple plugins, only use one.
Debloat (Free)
https://wordpress.org/plugins/debloat/
Caching Plugins
The majority of page caching plugins have a feature to minify css/js files. Some come with html minification as well, although many do not. If a caching plugin lacks the ability to minify html, use the HTML minification plugin above.
Delay Javascript
Delaying javascript is absolutely necessary for big performance gains, as javascript is one of the worst offenders for reducing page speed performance. Delay JS is essentially lazyload for javascript, and it loads those javascript files only after user interaction to prevent them from downloading on initial page load.
Exclusions
However, delaying javascript has a very high likelihood of breaking functionality and/or the design of your site, so you will most likely have to add exclusions for specific javascript files to prevent this. Double and triple check your pages and site features after activating this feature to ensure nothing has broken, because I have seen some nasty side-effects(such as forms not submitting, broken pop-ups, broken video players, broken maps and more) if exclusions are not added.
How to Identify which files need to be delayed or excluded from being delayed.
NOTE: You will have to delay scripts on every page. Certain plugins(such as some form plugins) will only load on the page in which they are used(the contact page in the case of the form plugin for example). That means you will need to speed test every url and add the specific scripts to either the delay list or exclusions list. Speed test thoroughly!
First, go https://gtmetrix.com (or whatever speed testing site you are using that has a waterfall chart) and speed test the website you are trying to optimize. This requires you to copy paste your URL into the text box on the GTMetrix homepage:
Next go to the waterfall chart tab, and sort by JS files:
For this example, I will use perfmatters to demonstrate how to choose which files to delay. You will pick the specific scripts you want to delay out of the waterfall chart. For example, wp-polyfill.min.js. Other files in the list are bankful-script.js, w.js, hooks.min.js, etc. You do not need to copy the full URL, just the name of the javascript file you wish to delay.
Paste the name of the js files you want to delay(or exclude) into the box and hit save.
Next you should go to the frontend of your site and check that nothing has broken either with the design, functionality or both. If a javascript file is essential and you delay it, stuff will break on the frontend, so make sure you test your site thoroughly after delaying a javascript file
If instead of delaying specific scripts you wish to delay all of them wholesale and then add exclusions for the scripts that need to run without being delayed, perfmatters has that function.
This may be preferable if you have a lot of scripts loading on your site. Instead of specifying scripts you want to delay here, you will want to list the scripts you wish to exclude here.
These instructions are applicable to any of the plugins that can delay javascript listed in this guide or any other plugin that contains functionality for delaying javascript.
Perfmatters (Paid)
I highly recommend using Perfmatters delay specific JS feature in conjunction with WP-Meteors delay JS feature. Any javascript you want delayed to completely prevent it from loading on the initial page load has to be added manually. It is keyword based, so you can either specify a specific js file, or a string that is used in multiple js files.
If you want to delay all javascript files relating to a plugin, here is a random example of a hypothetical plugin which I’m just making up. if every file from “Sumo Wrestler forms” has the word wrestler in every javascript file, you can just use the word “wrestler” in the delay js box to delay all of those files.
Do not use Perfmatters Delay All JS feature(there is a dropdown where you can select either option) if you are using WP Meteor or WP-Rocket’s delay javascript feature.
As mentioned above, Flying Pages Javascript file will show up in the GTMetrix waterfall of the page speed report and it will download on every page on the site when a user visits a page.
Delaying it with Perfmatters Specific Delay JS feature will prevent the file from loading entirely until user interaction with the page, and is required to remove the page weight impact of using Flying Pages. Otherwise, Flying Pages will hurt your page speed performance.
If a file is not needed at all until user interaction, delay it with Perfmatters Specific JS file delay feature. This also applies to your analytics files(Google Analytics, Hotjar, or any other analytics tracking software you are using). This can also apply to video players(use this feature on the video player javascript files only if the video player is below the fold), otherwise you will get pop-in when the video player JS file downloads, which is quite jarring and hurts the user experience.
Flyingpress (Paid)
Flyingpress has an integrated Delay Javascript function.
Debloat (Free)
https://wordpress.org/plugins/debloat/
Debloat also has a Delay JS feature.
Flying Scripts (Free)
https://wordpress.org/plugins/flying-scripts/
Simple plugin to delay javascript.
WP-Meteor (Free)
https://wordpress.org/plugins/wp-meteor/
WP-Meteor will delay all javascript, and this can and likely will break some elements on your site’s pages. If this occurs, you need to manually add exclusions for the javascript files that are required for specific functionality of a plugin to work. Design elements may break as well by delaying javascript, so it is critical to go through your site after enabling this feature and check all of the pages(and/or post types) to ensure something did not break.
This feature will give you one of the largest page speed boosts you can get out of the methods listed in this guide, however, stuff will likely break before you add file exclusions. Double and triple check your site to ensure everything is functioning correctly. Test that your form submissions still works, add to cart process still works, popups, anything that is dependent on javascript. If it is a feature and not a design element, it is very likely to be implemented via javascript.
To identify the files you want to exclude, test your site in GTMetrix and filter it to only display javascript files with the javascript tab before you activate the delay javascript feature, so you know what you need to test excluding.
Optimize More! (Free)
https://wordpress.org/plugins/optimize-more/
Has tons of features, delaying javascript files among them.
Delay vs Defer Attribute
Delay vs Defer: Use cases
How delay works
Initial Page Load: When a page loads, Perfmatters prevents certain specified JavaScript files from loading immediately. The rest of the page (HTML, CSS, and non-delayed JavaScript) loads as usual.
User Interaction Trigger: The delayed scripts are loaded and executed after a specific user interaction, such as a mouse movement, scroll, or keyboard input.
Since the javascript does not load at all until user interaction, the page speed impact of the javascript file is completely negated. Absolutely zero code of the file will be downloaded or executed before user interaction.
When delay is preferable
Delay will have the largest benefit for page speed, better than the defer or async attributes, and is the best option when it is possible to delay scripts when no functionality breakage occurs when delaying javascript files. You should always use delay when possible.
Delay may need to be applied to a single file, or multiple files depending on the functionality. Sometimes every file for the feature needs to be delayed for no interruptions in the specific functionality that is breaking when delay is applied, in which case you should delay all files related to the feature.
To be clear, the pagespeed benefit of delaying javascript is multiple times greater than deferring javascript. You should use them both in conjunction.
How Defer works
In some cases, delay will simply break functionality. While some scripts may not be able to be delayed, many of them can instead be deferred.
Scripts that depend on the DOM: Defer ensures that scripts execute only after the HTML document has been fully parsed. This is crucial for scripts that interact with or modify the DOM.
If such a script were loaded with delay, it won’t execute until user interaction, leading to errors or broken functionality.
When Defer is preferable
Menu Dropdown Scenario
One scenario where defer may be preferable is for menu dropdowns. Menu dropdowns will generally not work until all necessary script dependencies have loaded in the DOM. If the scripts were to be delayed, if the menu is above the fold on mobile and a user taps the menu dropdown before any other interaction with the page, the dropdown may take two taps to open.
A user may believe the site to be broken/non-functional if the dropdown does not open immediately, potentially leading to an increased bounce rate. In this scenario, Defer is preferred, even though it will increase page weight compared to delay, while slightly increasing the load time.
User experience is king. So the slightly longer load time is preferable here. I recommend always defaulting to delay, then testing defer if the delay breaks functionality.
Defer may need to be applied to multiple files for certain functionality, or only a single file.
Before Interaction: When the user initially visits the page, the dropdown menu might not be fully functional if its behavior depends on JavaScript that is being delayed.
At First Interaction: Assuming the dropdown script is among those being delayed, the first user interaction on the page triggers the loading of the script. Depending on how quickly the script loads and executes, there might be a small delay before the dropdown becomes fully interactive.
Optimize More! (Free)
https://wordpress.org/plugins/optimize-more/
Optimize More! and many more plugins can apply the Defer attribute.
Async Attribute and Defer Attributes
One of the only scenarios where the async attribute is potentially preferable (and only if you need really accurate metrics) is for analytics scripts. This is going to sacrifice a lot of page speed due to how heavy and slow analytics scripts are.
However, the scripts will be loaded and active as soon as they download, and they will download quicker than either delay or defer. I would recommend async only for high traffic sites. Your metrics will still be very accurate when using delay (never use defer for analytics scripts), and for the fastest page speed, delay is highly recommended.
In my opinion, this is the least relevant loading attribute and should only be used in very specific scenarios such as analytics scripts where strictly accurate metrics are necessary. If you are willing to slightly sacrifice accuracy in your analytics metrics, always delay them.
If you are still interested in testing syncing your javascript files, you can use this plugin to do so:
Async Javascript (Free)
https://wordpress.org/plugins/async-javascript/
This plugin can apply the async or defer attribute to javascript files.
Remove Noscript Tags
Code Snippets
Fluent Snippets (Free)
https://wordpress.org/plugins/easy-code-manager/
Add this function to Fluent Snippets or functions.php in your theme’s settings:
function remove_noscript_tags($html) {
return preg_replace('/<noscript>(.*?)<\/noscript>/is', '', $html);
}
add_filter('the_content', 'remove_noscript_tags');
This will remove inlined noscript tags globally
Warning
This will break functionality for users who have javascript disabled!
Lazyrender HTML Elements
Explanation:
https://wpspeedmatters.com/reduce-dom-size-in-wordpress/
https://perfmatters.io/docs/lazy-load-elements/
You can tell the browser to lazy render the contents (or elements) if it’s not required for the above fold. It’s just like lazy loading images, but for HTML elements. This is useful for delaying html elements such as the footer(and other objects below the fold) from loading on the initial page load.
Delay/Lazy Load anything (Free)
https://wordpress.org/plugins/delay-load-any-content/
Ability to Lazy Load any type of content by attaching a small CSS class to the element.
Perfmatters (Paid)
https://perfmatters.io/docs/lazy-load-elements/
Perfmatters has HTML element lazy rendering functionality.
Flyingpress (Paid)
Best option, especially when using Elementor or Gutenberg. Has a simple toggle to lazy render the selected sections in the pagebuilder editors, as well as a box in the advanced section to manually add CSS selectors to lazy render.
Do Not Combine/Concentate Your CSS Or JS Files
Concentation (combining all javascript loaded on your site into a single file) will prevent certain optimization features listed in this guide from working. Many caching and optimization plugins provide a combination/concentation feature for your js and css files which combine them into one file. Don’t turn it on!
Css and js concentation is an outdated feature which many optimization plugins still include. Concentation is a legacy optimization feature, avoid it.
Wordpress Caching
All Caches Must Be Purged Together To Prevent Stale Caches
Note: To ensure that any changes to content or optimizations are reflected on the frontend, each of these three layers of cache must be purged: Server Cache, Object Cache, and CDN Cache. Purging all three layers ensures that the browser pulls the current version of the page.
The Cache Purger (Free)
https://wordpress.org/plugins/the-cache-purger/
Great plugin for purging multiple caches simultaneously, but it does not purge every caching layer. If you are using service worker caching, that must be purged separately.
Caching Layers
Browser Cache: This is client-side caching where the user's browser stores static files (like CSS, JavaScript, and images). It helps in reducing load times for repeat visits to the same site.
Server Cache: This usually refers to caching mechanisms on the server side. It can include various types of caching strategies implemented on the server.
Varnish/NGINX FastCGI cache sit on this layer.
Page/Application Cache: This is the caching layer where Wordpress sits. This is where Wordpress Caching plugins such as Flyingpress etc (HTML page caching plugins) come into play. When a user requests the page, the server can serve this cached version instead of dynamically generating the page every time.
CDN Cache: Content Delivery Networks (CDNs) cache your site’s static assets in multiple geographic locations. This reduces the distance between the user and the server holding your site’s data, leading to faster load times. Cloudflare, BunnyCDN, Stackpath etc.
Object Cache (Database Caching): This involves caching the results of database queries. When a query is repeated (which happens often in dynamic applications), the server can serve the cached result instead of querying the database again. This is where Memcached, Redis, SQL Lite, Docket Cache etc. come into play.
PHP Cache (OPcache): This is specific to PHP and involves caching precompiled script bytecode. This means PHP doesn't have to parse and compile scripts on each request, which speeds up PHP execution.
Service Worker Caching: This is a form of client-side caching controlled by service workers, which are scripts that run in the background in the browser. They can manage caching of resources in a more sophisticated way, allowing for offline support and faster loading by intercepting network requests and serving cached responses.
DNS Caching
Why you need every layer of cache
Each layer of caching is complementary. If implemented correctly, all 8 layers of caching can be implemented simultaneously, with no conflicts, which leads to the greatest possible performance benefit.
Many articles claim that a CDN with full page HTML caching will magically resolve all page speed issues. This is a very common misconception. If you rely solely on a CDN for caching, you are leaving a lot of performance optimization opportunities on the table.
A CDN is incapable of having a 100% cache hit ratio at all times. It simply isn’t going to happen. Even when a CDN is caching the majority of the content on the site(let’s be generous and say an 85-90% cache hit ratio for the CDN cache), there are still hits(and likely many of them) to the origin server (the physical hardware that your site is hosted on).
When a connection does not hit the CDN cache, it is routed directly to the origin server. Without a correctly configured caching setup on the origin server, those users will encounter much slower load times.
Service worker caching is the lowest priority, but can have significant performance benefits if used correctly.
CDN Caching Layer
Using a CDN speeds up your website because it combines caching and multiple-server hosting to minimize network latency.
Multiple Servers: The CDN hosts several web server applications on each computer across the globe.
Caching: The CDN serves each page from a web server's cache.
Latency: The website user is routed to the nearest web server when the CDN has cached the webpage.
Thorough section on CDNs covered further down in the guide
Application Caching Layer
Page Caching Plugins
Only use one page caching plugin
Using multiple page caching plugins will trigger errors and conflicts with unsynchronized caches.
Flyingpress (Paid)
Best caching plugin, most fully featured, good developer support. Gijo (the developer) adds new features relatively frequently, is an extremely nice guy, and will help troubleshoot any issues you have and issue patches pretty quickly. Recommended.
WP Speed of Light (Free)
https://wordpress.org/plugins/wp-speed-of-light/
Great free caching plugin. Combining the free version of WP Speed of Light with other free plugins in the guide will nab you all the same features the premium version has.
Speed Booster Pack (Free)
https://wordpress.org/plugins/speed-booster-pack/
Pretty solid caching plugin.
Rapid Cache (Free)
https://wordpress.org/plugins/rapid-cache/
Rapid Cache is a fork of Comet Cache that focuses on new features, stability and simplicity.
Swift Performance (Free and Pro)
https://swiftperformance.io/ (Pro)
https://wordpress.org/plugins/swift-performance-lite/ (Free)
Swift Performance has a really nice featureset on paper, including features other caching and optimization plugins don’t have. However, I personally have had poor results using it on my sites. However I’m leaving it in the guide due to how many unique features it has. It may perform better on other site setups, so hopefully someone finds the mention useful.
Cache Ajax Requests
Swift Performance can cache Ajax Requests
Caching Plugins To Avoid
WP-Rocket (Paid)
Do not use WP Rocket. WP Rocket was a solid page caching plugin. Now, it’s buggy and the devs have been in maintenance/removal of features mode for ~3 years with barely any new features pushed out and more features entirely removed or had existing functionality flexibility eliminated rather than added.
Their code is filled with legacy bugs, and their update cadence is extremely slow. There are over 700 open issues on their github. It’s an ultra buggy caching plugin.
WP Rocket constantly removes features, not adds them. They have continually taken away useful features, even ones that are necessary such as HTML minification. They used to be second best in my book when WP Rocket had more features, now it applies some optimizations automatically and they cannot be disabled without additional unnecessary “““helper””” plugins.
The continuous removal of functionality means the plugin is consistently getting worse. The best paid plugin is Flyingpress, hands down.
WP Rocket Helper Plugins (Free)
https://github.com/wp-media/wp-rocket-helpers
These should just be straight up unnecessary, the functionality should just be built into WP Rocket, ridiculous that these are even required. Perfect example of how they constantly remove functionality. Some of the removed functionality has been moved to the unnecessary helper plugins which are now required to regain it.
Pure HTML Page Caching Plugins
These page caching plugins have no other optimization functions besides html page caching (all other page caching plugins in the above items have more features in addition to HTML page caching.
Cache Master (Free)
https://wordpress.org/plugins/cache-master/
Supports up to 10 cache drivers such as File, Redis, Memcache, Memcached, APC, APCu, WinCache, MySQL, SQLite, and MongoDB
The Swiss army knife of caching. Try them all and find which type of caching works best for you!
Cache Enabler (Free)
https://wordpress.org/plugins/cache-enabler/
Simple page caching plugin, the only function is pure HTML page caching.
Surge (Free)
https://wordpress.org/plugins/surge/
Hyper Cache (Free)
https://wordpress.org/plugins/hyper-cache/
Hyper Cache is purely a caching plugin, and has no other additional functions. You can combine it with the other plugins listed in this guide to achieve all of the same optimization features you would get all in one with Flyingpress for free.
Which Caching plugin should I choose?
My personal preference is Flyingpress. Both are good options, and perform pretty similarly.
Remove Query Strings To Raise Cache Hit Ratio
https://wpspeedmatters.com/ignore-query-strings/
WP Stash (Free)
https://github.com/inpsyde/WP-Stash
https://inpsyde.com/en/wordpress-caching-system-wpstash/
Cache Warmer (Free)
https://wordpress.org/plugins/cache-warmer/
Visits website pages to warm (preload) the cache.
Proxy Cache Purge (Free)
https://wordpress.org/plugins/varnish-http-purge/
The Proxy Cache Purge plugin sends a request to bust NGINX or Varnish caches when a page or post is modified.
WPGraphQL Smart Cache (Free)
https://wordpress.org/plugins/wpgraphql-smart-cache/
WPGraphQL Smart Cache provides support for caching and cache invalidation of WPGraphQL Queries.
Rest Cache
WP Rest Cache (Free)
https://wordpress.org/plugins/wp-rest-cache/
This plugin will allow WordPress to cache the responses of the REST API, making it much faster.
Caching of all default WordPress REST API GET-endpoints.
Caching of (custom) post type endpoints.
Caching of (custom) taxonomy endpoints.
Automated flushing of caches if (some of) its contents are edited.
Manual flushing of all caches.
Manual flushing of specific caches.
A counter how many times a cache has been retrieved.
Specifying after what time the cache should be timed out.
Registering custom endpoints for caching.
Automatic cache regeneration.
Translations
Translation Cache (Free)
https://wordpress.org/plugins/speed-up-translation/
Cache Translation Language Files (Free)
https://gist.github.com/Ruzgfpegk/4fd666180e40bb8a0e0608ad35fb5a88#cache-language-files
Gravatar Cache
Optimum Gravatar Cache (Free)
https://wordpress.org/plugins/optimum-gravatar-cache/
If you need Gravatars, this is a solid Gravatar caching plugin. If they aren’t needed, highly recommended to remove them.
FV Gravatar Cache (Free)
https://wordpress.org/plugins/fv-gravatar-cache/
Lightweight gravatar caching plugin
Image Caching
Cache Images (Free)
https://wordpress.org/plugins/cache-images/
Cache Images is a plugin that gives users the option to sideload images that are hosted on other domains to their own site. Sideloaded images are added to WordPress media library so you can use all tools related to images that you can use with images uploaded through WordPress. Image will be added as an attachment of the first post where it is found, and every post where the original URL is occurring will be updated with a new URL. Users can select from which domains to sideload images, including Blogger’s domains.
It uses AJAX so it means you can sideload a large number of images even on slow servers.
Widget Output Cache (Free)
https://wordpress.org/plugins/widget-output-cache/
Use PHP output buffering to extract widget output and store it into WordPress transients for faster retrieval. It also adds a checkbox to widget controls to exclude it from being cached.
Translation Caching (Free)
https://github.com/inpsyde/translation-cache
Needs to be combined with Object caching. Allows you to cache Wordpress Translations.
Menu Cache
Docket Cache (Free)
https://wordpress.org/plugins/docket-cache/
Docket Cache has functionality to cache menus inside the configuration panel.
Menu Caching (Free)
https://wordpress.org/plugins/menu-caching/
This plugin will cache the menu HTML and show the cached version to your visitors, saving your database from far too many unnecessary calls. Compatible with Page Caching plugins (Flyingpress, WP Speed of Light, etc).
WP Nav Menu Cache (Free)
https://wordpress.org/plugins/wp-nav-menu-cache/
Cache Wordpress Nav Menus
WP-Admin Caching
WP-Admin Cache (Free)
https://wordpress.org/plugins/wp-admin-cache/
You will have to enable it after installing/activating, go to the settings for admin cache under settings>wp admin cache and press check all to enable it for your whole admin dashboard, then save the settings. You may have to clear the cache after installing a new plugin, if you extract it from a zip file via a file manager plugin, or it won’t appear in the list due to a stale cache that did not have an update that triggered the cache.
Cache Ajax Requests
With Varnish
https://guides.wp-bullet.com/how-to-cache-ajax-get-requests-with-varnish-4/
With Swift Performance
https://swiftperformance.io/blog/how-to-cache-ajax-get-requests-with-swift-performance-pro/
Fragment Caching For Highly Dynamic Sites
Explanation
https://seravo.com/en/speed-up-your-site-with-fragment-caching/
When you can’t cache the entire page, fragment caching comes into play. This will cache specific portions of a page as opposed to the entire thing.
W3 Total Cache (Paid)
https://wordpress.org/plugins/w3-total-cache/
W3 Total Cache has a fragment caching feature.
Borlabs Cache (Free)
https://borlabs.io/borlabs-cache/
The free version has a cache preload limitation. Use Cache Warmer so you don’t have to buy a license(the page does have the free version, just need to scroll down).
Cache Warmer (Free)
https://wordpress.org/plugins/cache-warmer/
A nice workaround for cache preloading(cache warming) for the Borlabs plugin. Instead of buying a license, just pair it with Cache Warmer.
Fragment Cache Github (Free)
https://github.com/Rarst/fragment-cache
Fragment Caching Alternatives
No Cache Ajax Widgets (Free)
https://wordpress.org/plugins/no-cache-ajax-widgets/
With No Cache AJAX Widgets, you simply drag and drop the new AJAX powered widgets to any widget area/s, add your content and you are done. No more messing with your theme files, functions.php, fragmented caching, mfunc and others or excluding an entire page from caching.
Content No Cache (Free)
https://wordpress.org/plugins/content-no-cache/
This plugin is to exclude a part of the page from the cache. This allows you to keep caching enabled on highly dynamic sites.
Cache Blocks (Free)
https://github.com/WordPressUtilities/wpucacheblocks
More options coming soon
DIY Caching Methods
https://www.smashingmagazine.com/2012/06/diy-caching-methods-wordpress/
WP Stash (Free)
https://github.com/inpsyde/WP-Stash
https://inpsyde.com/en/wordpress-caching-system-wpstash/
WP Cache Remember (Free)
https://github.com/stevegrunwell/wp-cache-remember
WP Cache Remember is a simple WordPress caching plugin to introduce convenient new caching functions.
Browser Caching
Online Media Masters Article
https://onlinemediamasters.com/serve-static-assets-with-an-efficient-cache-policy-wordpress/
PHP APCu Caching
Atec Cache APCu (Free)
https://wordpress.org/plugins/atec-cache-apcu/
PHP APCu object and page caching
Object Caching
As this was expanded on at the top of the guide, I will simply be aggregating the links to the object caching resources here with no further explanation.
Redis Cache (Free)
https://wordpress.org/plugins/redis-cache/
Docket Cache (Free)
https://wordpress.org/plugins/docket-cache/
SQL Lite Object Cache (Free)
https://wordpress.org/plugins/sqlite-object-cache/
Memcache (Free)
https://wordpress.org/plugins/object-cache-4-everyone/
Varnish And Nginx Server Caching Purging
Proxy Cache Purge (Free)
https://wordpress.org/plugins/varnish-http-purge/
Automatically purges varnish/nginx caches when the content on the site is updated by WordPress. The plugin reaches out to the proxy cache service with the URL of the page, requesting the cache be deleted.
The Cache Purger (Free)
https://wordpress.org/plugins/the-cache-purger/
Great plugin for purging multiple caches simultaneously, but it does not purge every caching layer. If you are using service worker caching, that must be purged separately.
PHP OpCache (Free)
https://tideways.com/profiler/blog/fine-tune-your-opcache-configuration-to-avoid-caching-suprises
https://gist.github.com/rohankhudedev/1a9c0a3c7fb375f295f9fc11aeb116fe
Service Worker Caching
https://philipwalton.com/articles/smaller-html-payloads-with-service-workers/
To be expanded on soon
DNS Caching
Cloudflare (Free and Pro)
If you set Cloudflare to be your DNS provider, they provide DNS caching.
Cache Statistics
Atec Cache Info (Free)
https://wordpress.org/plugins/atec-cache-info/
This plugin provides detailed status information and statistics for PHP cache features, namely OPcache, WP-object-cache, JIT, APCu, Memcached, Redis and SQLite-object-cache.
Object caching
What is Object Caching?
Object caching stores frequently accessed data from the database in memory. When this data is needed again, it can be retrieved from the cache instead of querying the database. This reduces the number of database queries, lowering the load on the database server and improving response times.
Unlike the caching methods above which are Wordpress level caches, Object Caching is MySQL/MariaDB server level database caching. These plugins hook into a PHP service if using Redis or Memcached. Docket Cache on the other hand uses a slightly less performant method for object caching by creating PHP cache on the Wordpress level to achieve database caching functionality.
Redis or Memcached are the most performant object caching methods as they run in RAM, so they are preferable if possible. Most sites should be able to take advantage of Redis with just the free Redis Object Cache plugin as long as the Redis extension is enabled in PHP.
Docket Cache (Free)
https://wordpress.org/plugins/docket-cache/
Docket cache can be used when you cannot install Redis(some shared hosting plans don’t have it for instance). Docket cache is an object cache, just like Redis is, except it functions at the Wordpress level as opposed to the server level. It can have better performance than Redis in many cases.
Redis (Free)
Dragonfly Redis Performance Optimization Guide
https://www.dragonflydb.io/guides/redis-memory-and-performance-optimization
Extensive article on optimizing Redis performance.
General Redis information for Wordpress
Redis is also a server level service, which you will need a Wordpress plugin to use as a connector to the server level redis service. REdis must be installed on your VPS/by your hosting provider for the plugin to work.
Redis Object Cache (Free)
https://wordpress.org/plugins/redis-cache/
Redis Object Cache developed by Till Krüss.
Note
If the Redis service is not active at the server level, this plugin will do absolutely nothing. The plugin will show that it cannot connect to the service in the settings page of the plugin, so make sure it can connect when you press the button in the settings page to activate the connection.
Make sure the Redis port(port #: 6379) that Redis is set to at the server level is set to the default that the plugin uses(in most cases it defaults to the port used by the plugin), otherwise the plugin will be unable to connect with the Redis service.
You also need to enable the Redis addon for PHP, which is a required dependency to activate Redis caching.
Once you enable the connection in the Redis plugin settings, Redis database caching is already configured and caching your database calls. No further configuration is required, and you are done. Easy peezy.
Once correctly configured, you will see a flush cache option when visiting the redis plugins settings. You will see your number of database queries in Query Monitor (if you have it active for diagnosis purposes) drop significantly after installing and configuring Redis, and should immediately notice a speed improvement on your site.
I noticed absolutely no difference in performance between the free version of the plugin vs the pro version. I tested the pro version with the zlib compression feature enabled(which is a pro only feature, and to enable zlib compression requires additional configuration at the server level), but if your site is heavily database dependent(an example would be a large e-commerce site), you may find the pro version improves performance further. YMMV. I recommend trying the pro version out anyways, it may suit your use case.
If you want to test the pro version, get a Pro license and request a refund if it doesn’t add any additional performance.
Even with Redis, you want to keep database calls to a minimum. Reduce them to the absolute minimum by removing unnecessary cruft from old plugins and themes, as well as disabling database options from autoloading(which do not need to be auto-loaded of course) via Advanced Database Cleaner, and have as few plugins active as possible to accomplish whatever features you want to implement. Make sure to check to that nothing has broken by preventing certain options from auto-loading
If you need some plugins that only have functionality on the backend, make sure to disable them on the frontend with Asset Cleanup’s plugin manager. The lighter weight the plugins are, the better. Doing so will reduce the number of datbase queries on the frontend.
Atec Cache APCu (Free)
https://wordpress.org/plugins/atec-cache-apcu/
PHP APCu object and page caching
Memcached (Free)
Object Cache 4 Everyone
https://wordpress.org/plugins/object-cache-4-everyone/
Memcached based object cache connector. Only for sites with Memcached enabled at the server level.
SQLite Object Cache (Free)
https://wordpress.org/plugins/sqlite-object-cache/
Persistent object cache This one uses the widely available SQLite3 extension to php (Make sure it is enabled on your server, or this plugin will not work). Many hosting services offer it.
If your hosting service does not provide memcached or redis, you may be able to use this plugin instead and get the benefit of object caching.
SQLite Object Caching: SQLite is a lightweight, disk-based database. Using it for object caching can be beneficial if you don't have access to more advanced caching solutions or if your site is relatively small and doesn't demand high scalability. However, it might not offer the same performance benefits as in-memory solutions like Redis or Memcached.
Which kind of object cache is best for my site?
PHP Object Caching (e.g., Docket Cache): PHP object caching in WordPress, like Docket Cache, can improve performance by caching the compiled opcode of PHP scripts. This can reduce the time it takes to load and execute PHP scripts. This type of caching is particularly useful if your server doesn't have opcode caching enabled at the PHP level (e.g., using OPcache).
Redis: Redis is an advanced key-value store known for its performance and flexibility. It can handle complex data types and offers features like replication and persistence. If your WordPress site has high traffic and needs to handle complex queries or large datasets, Redis might be a good choice.
Memcached: Memcached is a high-performance, distributed memory object caching system, often used to speed up dynamic web applications by alleviating database load. It's simpler than Redis and is designed for speed. It's a great choice for caching simple data and speeding up read-heavy workloads.
How to figure out which object cache is best for you
After testing, SQLite Object Cache has the worst caching performance, but YMMV. Docket Cache has better performance than Redis in many cases, however Redis may be desirable for high traffic sites since the cache is held in RAM instead of on Disk. However, since Docket Cache is implemented in a different way than Redis, even though it is caching the data on Disk, in many cases it can outperform Redis. Test both and choose whichever performs best.
Server Caching
NGINX PHP-FPM Cache (Free)
NGINX comes with a native server caching method called PHP-FPM/FastCGI cache. This is the primary server caching method used by sites configured to run on the NGINX webserver.
Apache Server Cache (Free)
https://httpd.apache.org/docs/2.4/caching.html
Official Apache Server Caching Documentation
LoadForge Article
https://loadforge.com/guides/leveraging-caching-to-accelerate-apache-server-response-times
Solid article on Apache server caching.
PHP OpCache
OpCache Configuration (Free)
https://loadforge.com/guides/maximizing-your-php-applications-speed-with-opcache-optimization
Solid article explaining how OpCache works on a surface level, and explainers on what the configurable OpCache settings work, and how to modify them in the PHP.ini configuration file.
How OpCache Works
Npopov Article
https://www.npopov.com/2021/10/13/How-opcache-works.html
Extremely in-depth technical article on the inner workings of PHP OpCache. This does not cover OpCache configuration whatsoever, and is not necessary information to correctly configure OpCache for improving PHP performance. Not critical information, but a really good thorough explainer for the curious.
MySQL Caching
SQL Query Caching
How SQL Query Caching Pairs With Object Caching
Different Caching Layers
ProxySQL (Query Caching)
Role
Caches the results of SQL queries at the database proxy level. This reduces the load on your MySQL/MariaDB server by serving cached query results directly from ProxySQL without querying the database.
Use Case
Particularly useful for read-heavy workloads where certain queries are executed frequently with the same parameters, such as fetching posts, comments, or user data in WordPress.
Object Caching
Role
Caches objects and data structures in memory, such as the results of expensive database queries, transients, and other non-SQL data. In WordPress, this is often used to cache the results of complex queries, session data, and other elements that don’t change frequently.
Use Case
Ideal for caching the output of expensive operations like WP_Query, transients, and API calls. Redis is typically used for object caching, while Docket Cache is a specialized object caching plugin for WordPress that can work with Redis or alone.
Complementary Caching Benefits
Reduced Database Load
With ProxySQL caching SQL query results and Redis/Docket Cache storing the results of complex operations and objects in memory, the combined caching layers reduce the number of requests hitting your database. This helps to decrease database load and improve response times.
Improved Scalability
As traffic increases, having both SQL query results cached by ProxySQL and object data cached by Redis or Docket Cache allows the system to scale more efficiently. Each caching layer handles a different aspect of data retrieval, ensuring that the database and application layers are not overwhelmed
Faster Response Times
The combination of ProxySQL and Redis/Docket Cache ensures that frequently accessed data is served from memory or the proxy cache, leading to faster response times for end users.
ProxySQL Query Caching (Free)
MySQL Query caching has been deprecated, it is now recommended to use ProxySQL Cache for Query caching.
Shurutech Comprehensive Configuration Article
https://shurutech.com/comprehensive-step-by-step-proxysql-guide/
Comprehensive step by step guide for installing and configuring ProxySQL.
Materialized views
What Are Materialized Views
in MySQL are essentially precomputed and stored results of a query. Unlike standard views, which are virtual tables and do not store data physically, materialized views store the result of the query physically in the database. This allows the database to retrieve the data quickly without recalculating the result each time the view is queried.
Benefits of Using Materialized Views
Database Star Article
https://www.databasestar.com/sql-views/
Cooling Dude Article
https://www.coding-dude.com/wp/databases/creating-mysql-materialized-views/
From Dual Article
https://fromdual.com/mysql-materialized-views
Precomputed Results
Faster Query Execution
Since the results of complex queries are precomputed and stored, querying a materialized view can be much faster than running the original query, especially for complex joins, aggregations, or subqueries.
Offloading Computation
By precomputing and storing results, materialized views reduce the computational load on the database during runtime, which can be particularly beneficial for large datasets or complex queries.
Reduced Database Load
Combination with ProxySQL
Materialized views can reduce the frequency and complexity of the queries that ProxySQL needs to cache or route. ProxySQL can cache the results of queries against materialized views, leading to even faster response times and reduced database load.
Complementing Object Caching
While object caching (like Redis or Docket Cache) stores specific objects or query results, materialized views store more complex, precomputed data that can be quickly accessed. This can reduce the need for certain types of object caching or make cached objects smaller and more efficient.
Data Consistency and Freshness
Periodic Refresh
Materialized views can be refreshed periodically (e.g., daily, hourly) or manually, depending on the requirements of your application. This allows you to balance performance improvements with the need for up-to-date data.
Trigger-Based Refresh
You can set up triggers or procedures to refresh materialized views automatically when underlying data changes, ensuring the data is relatively fresh without manually refreshing the views.
How To Create An Auto-Refreshed Materialized View
Hitesh Gondalia Article
https://hiteshgondalia.wordpress.com/manage-a-fast-refreshable-materialized-view/
Fantastic long and thorough article on how to create a fast auto-refreshed Materialized View.
How to Combine Materialized Views with Other Caching Strategies
Materialized Views and ProxySQL
Query Caching
ProxySQL can cache queries that access materialized views. Since materialized views provide precomputed results, the combination of ProxySQL caching and materialized views can significantly reduce query execution times and the load on the database.
Query Routing
If you have different materialized views for different types of queries, ProxySQL can route queries to the appropriate view based on predefined rules, optimizing query performance.
Materialized Views and Redis/Docket Cache
Object Caching
For parts of your application where you need to cache specific pieces of data (like results of a query or an expensive calculation), Redis or Docket Cache can complement materialized views. For example, you could cache the result of querying a materialized view in Redis, ensuring even faster access times.
Hybrid Approach
Use materialized views for complex, frequently accessed datasets and Redis/Docket Cache for other transient, non-relational data. This approach can optimize performance by using the right tool for each type of data.
Materialized Views with Page Caching
Reducing Dynamic Content Generation
By using materialized views, you can reduce the computational effort required to generate dynamic content. This can, in turn, reduce the dependency on page caching plugins, as the pages can be generated more quickly from the materialized views.
Consideration for Maintenance and Refresh
Automatic Refresh
Set up materialized views to refresh automatically based on your application’s needs. Ensure that the refresh frequency aligns with how frequently the underlying data changes.
Manual Refresh for Critical Views
For views that power critical parts of your application, consider manual refreshes during off-peak hours or when certain data updates are pushed to the database.
Potential Challenges
Disk Space
Materialized views consume additional disk space, as they store the result of the query physically in the database. Ensure that you have sufficient storage, especially if the views involve large datasets.
Trade-offs
Depending on how often you refresh the materialized views, there may be a trade-off between performance and data freshness. It's essential to determine the right balance for your application.
Complexity
Combining materialized views with multiple caching layers adds complexity to your architecture. Proper management, monitoring, and maintenance are crucial to ensure all layers work together harmoniously.
Varnish Caching (Free)
Cloudways Article
https://www.cloudways.com/blog/configure-varnish-cache/
Solid article on how to install and basic configuration for Varnish Caching.
Advanced Varnish Configuration
There is a thorough section on advanced Varnish configuration further down in the guide in the server optimization and configuration section
https://docs.google.com/document/d/1ncQcxnD-CxDk4h01QYyrlOh1lEYDS-DV/#heading=h.c5fvp0ce1bdq
HAProxy Caching
HAProxy Caching is covered further in the guide in the load balancing section with advanced configuration examples.
https://docs.google.com/document/d/1ncQcxnD-CxDk4h01QYyrlOh1lEYDS-DV/#heading=h.5yfvglokkwc0
Squid Proxy Cache
Why Use Two Separate Proxy Caches?
Different Roles in a Complex Architecture
Squid for Forward Proxy (External Content)
If your architecture requires caching of external web content (e.g., users frequently accessing the internet), Squid can be used as a forward proxy to reduce bandwidth and improve access speed for these requests.
Varnish for Reverse Proxy (Internal Content)
At the same time, Varnish can be used as a reverse proxy to cache and accelerate content served by your internal web servers, ensuring fast delivery of your web applications or sites to users.
Use Cases For Squid Cache
Squid is usually employed as a forward proxy cache for web content or as a reverse proxy for content from other servers. If used in conjunction with Varnish, Squid could handle content that Varnish does not cache effectively (e.g., very large files, specific web applications).
Squid Cache can be used alongside NGINX PHP-FPM caching, HAProxy caching, Apache caching, general load balancer caching, PHP OpCache caching, and Varnish caching, but there are some important considerations to ensure that this complex setup improves performance rather than introducing redundancy or conflicts.
Key Considerations
Cache Layer Redundancy
With multiple caching layers, such as Squid, Varnish, and HAProxy, there might be overlapping functionality. Each caching layer should be carefully configured to avoid redundant caching, which can lead to unnecessary complexity and potential performance degradation.
Server Cache Hierarchy
Define a clear hierarchy of caching layers. Typically, a web application would have caching at the server (e.g., PHP OpCache, PHP-FPM), reverse proxy (e.g., Varnish, Nginx), and content delivery (e.g., Squid, HAProxy) levels. Ensure each layer serves a distinct purpose:
PHP OpCache
Optimizes PHP code execution by storing precompiled script bytecode.
Nginx/Apache Caching
Performs basic web server-level caching.
NGINX PHP-FPM Caching
Handles caching at the FastCGI level.
Varnish Caching
High-performance HTTP accelerator.
Squid Cache
Typically used for caching external content (e.g., proxy cache) but can also cache dynamic content with careful configuration.
HAProxy Caching
Load balancer with optional caching functionality
General Load Balancer Caching
Balances traffic with caching capabilities.
Content Consistency
With multiple caches, managing cache invalidation and ensuring content consistency can become challenging. You must coordinate the cache purging across all layers to avoid serving stale content.
Network Overhead
Introducing Squid as an additional layer adds another point of network communication. The performance gains must outweigh the added latency and complexity.
Traffic Type
Consider the type of traffic and content served. For example, if most content is static and already well-cached by Varnish and HAProxy, adding Squid may not provide significant additional benefits.
Potential Configuration
Squid can be placed at the edge, serving as a first-level cache for requests before they hit your load balancer or reverse proxy (e.g., Varnish). This could be useful for caching static assets or external content from third-party sources.
Varnish and HAProxy can handle caching dynamic content and distributing traffic to your web servers.
Nginx/Apache would handle server-level caching and pass requests to the application layer (PHP-FPM) after checking the cache.
PHP OpCache optimizes the PHP code execution without affecting the rest of the caching layers.
Cache Purging
Wordpress Layer Caching
The Cache Purger (Free)
https://wordpress.org/plugins/the-cache-purger/
This plugin attempts to purge all server-side caching methods.
This includes the most common caching plugins, some hosting based caches, most server based caches, built-in WordPress object caches, and even simple file based caches.
Built in automatic cache purging for the following caches:
Plugins
SiteGround Optimizer, Nginx Helper, LiteSpeed Cache, Cachify, Autoptimize, Fast Velocity Minify, WP Rocket, Swift Performance,
Comet Cache, Hummingbird, WP Fastest Cache, WP Super Cache, W3 Total Cache, Hyper Cache, WP Optimize, Cache Enabler, NitroPackHosting / CDN
WPEngine, Kinsta, GoDaddy Managed WordPress, Pantheon, Bluehost, Cloudways, Siteground, RunCloud
Server Based
PHP FPM, Zend Opcache, APC and APCU, WinCache, Pagespeed Module, nginx, Static File Caches, Redis, Memcache, Memcached, Varnish
WordPress Built-In object caching, and persistent object caching
Super Light Cache Buster (Free)
https://wordpress.org/plugins/super-light-cache-buster/
This simple plugin adds random version numbers to CSS & JS assets to prevent browser caching getting in the way of your happiness.
Server Caching
Proxy Cache Purge (Free)
https://wordpress.org/plugins/varnish-http-purge/
Clears the Varnish and NGINX Caches
Cache Warming
Warm Cache (Free)
https://wordpress.org/plugins/warm-cache/
Crawls your website-pages based on any XML sitemap. If you have a caching plugin this will keep your cache warm.
Cache Warmer (Free)
https://wordpress.org/plugins/cache-warmer/
Visits website pages to warm (create) the cache if you have any caching solutions configured.
Perfmatters (Paid)
My Settings:
You should always preconnect and prefetch any external domains that your site links to. This includes sites like google tag manager, or google analytics, facebook, or any external sites your website is linking out to.
You can easily identify these external domains by looking at the waterfall chart in gtmetrix and looking at the domains listed, you can easily pick out which sites your site is connecting to.
Asset Cleanup (Free and Pro)
Asset Cleanup is an essential optimization plugin.
https://wordpress.org/plugins/wp-asset-clean-up/ (free)
https://www.gabelivan.com/items/wp-asset-cleanup-pro/ (Pro)
Test Mode
Enable test mode if you’re optimizing a live site so that only the administrator user account can see the changes. Or install, migrate your website to a staging site or local wordpress development, then optimize away without having test mode enabled. Otherwise you have to worry about breaking the frontend for a site which already has existing users and traffic.
Asset Cleanup Disabling CSS and JS files in the Asset Cleanup Metabox on pages:
You should disable all unnecessary js and css files from plugins that are loading on a page if you do not want to completely disable them with the plugin manager that you can without breaking the page.
Asset Cleanup File Preloading in the Asset Cleanup Metabox on pages:
You should only preload css files you want to load first that are critical to the page rendering.
Some files need basic preload, some can be asynced preloaded, other files cannot be preloaded at all due to breaking your page. You will have to clear caches and retest all related functionality to the file on the frontend to ensure you did not just introduce a new bug. For instance, I moved the simple lines icon file from a plugin called Woolentor. This damaged the ajax add to cart functionality of it’s widgets gear icon for a split second after pressing the add to cart button. I would never have known that was an issue if I didn’t test my changes.
You should preload css files above the fold(the content that loads in the viewport without scrolling) so that they load with priority and render your content faster. Ideally, your above the fold content should not need any javascript at all, which will improve perceived and actual load times. Set the preload to async if you can.
I generally would not preload a js file, as this will make it load in the head and give it priority, making your render-blocking score worse.
Move css/js files load location from head to the body to reduce render blocking
If you cannot completely disable a css/js file on a page because it is necessary, you should move every js/css file that isn’t immediately needed and doesn’t break the page when doing so to the body of instead of the head to reduce render-blocking and improve load times.
Most js files do not need to be loaded in the head, and most plugins are poorly coded and load them in the head. You should move all or as many js files as you can from the head to the body.
You should also do this with any css file that isn’t immediately needed, as this also reduces the render blocking score.
Keep in mind, you cannot change the location per page, moving the file from head to body will do so globally on every page on the site, so be aware that this could break something on one specific page vs another if the code needs to load in the head vs loading in the body.
Asset Cleanup Async, Defer for JS files:
I also set all css and js to async that I could.
You have to test the frontend functionality to make sure nothing broke if you set any file css or js to preload, async, or defer. You should only do it to CSS files that are above the fold, as these are critical and need to load first to avoid flashes of unstyled content. You will need Asset Cleanup Pro for async and defer settings, I don’t think the free version has them.
You should be asyncing and deferring any javascript file you can. These properties can also break your page, so you will need to test it after you implement it for every file. I suggest doing them in small groups and then backtracking if any issues arise, for sake of time. 2-3 files per run, that way you don’t make too many changes and can more easily narrow down the issue. 1 by one is horribly slow and inefficient to do.
CSS Inlining with Asset Cleanup
https://blog.logrocket.com/improve-site-performance-inlining-css/
Be careful not to inline too many files, this can hurt performance. Inlining CSS will integrate this CSS into your HTML head, which will likely download on every page. Only inline critical CSS stylesheets that will download on every page, such as small CSS files from your theme, or a plugin that is used site-wide.
Disable unnecessary hardcoded and external css/js on pages that they are not needed:
Some plugins do not load their code as a file that’s identified under the plugin in the Asset Cleanup metabox that appears on pages. They appear at the bottom in the hardcoded section. One file that appeared there for me was from a form plugin that was loading a captcha. I couldn’t figure out where the file was coming from until I disabled the hardcoded text that referenced the captcha.
It was loading the captcha file, even though I didn’t even have the captcha feature activated. Some plugins will load useless files that you don’t need, unnecessarily bogging your site’s speed down.
Hardcoded code will not specify what plugin it’s related to, but if you read the section labeled “source” that is hardcoded, it’s relatively easy to identify what plugin it is related to. If you aren’t sure what the hardcoded code does, either disable it and test the frontend to ensure nothing broke, or just leave it alone. These files generally do not have a huge performance impact, but this varies by plugin, so it may be worth disabling them.
Disable Theme JS and CSS using Asset Cleanup
If you’re using Elementor and using the theme builder, it replaces a lot of needed functionality from your theme. You should check through the css/js files your theme loads and see if any file of a theme can safely be disabled without breaking any functionality or the design.
Only disable Woocommerce general and Woocommerce layout on non-Woocommerce pages if you are using Astra. Otherwise it will break Woocommerce page layouts.
Asset Cleanup and Query Monitor
If you disable multiple js/css files with asset cleanup before saving the page and something breaks, Query Monitor is very useful for diagnosing which plugin is responsible, and you should know which scripts or css you need to re-enable. It will give you useful php error messages which are usually specific to the plugin having issues, so you’ll more easily be able to tell which file you manipulated that’s causing the issue.
Asset Cleanup’s Plugin Manager
You should use the plugin manager(found under asset cleanup in the backend) and disable any plugins that don’t need to run on specific pages on the frontend. Any plugin that runs entirely in the backend and does not have any frontend component can be disabled sitewide, you don’t need to add an exception.
If you need to add exceptions, they need to be added as regex rules. Please check the asset cleanup documentation for further information on this: https://www.assetcleanup.com/docs/what-are-load-exceptions/
It’s more powerful than just disabling js/css. You should also disable plugins on the admin dashboard that are unnecessary on certain backend pages. For instance, you don’t need elementor to load on the settings pages of other plugins. This will significantly speed up your wordpress admin dashboard.
Be cautious with this feature, as it will completely unload ALL the plugins code on that page, not just the CSS or JS. It’s like the plugin was completely disabled on that page if you disable a plugin via the plugin manager function.
Functionality can break when disabling plugins via plugin manager if you disable them on the wrong pages in the admin dashboard. If you have disabled a plugin on a certain settings page and functionality is missing, the plugin most likely should not be disabled for that url/regex rule.
Disable Google Fonts via Asset Cleanup and preload all local fonts
Another thing you can use asset cleanup for to have a huge impact on your site is to disable all of your Google Fonts and host all your fonts locally. Asset Cleanup lets you preload local fonts and apply font display properties as well, i recommend setting the value for that to swap.
Sitewide and html source settings rules in Asset Cleanup’s settings
In Asset Cleanup’s settings, enable all the options you can in the site-wide common unloads tab, unless you need the functionality, such as emojis or oEmbeds. If your builder supports Emojis, they most likely have their own library for implementing them, and there is no reason to leave this feature enabled as it is the Wordpress default one for Gutenberg or the Classic editor.
Disable XML-RPC as well as almost no site relies on its functionality, and it’s a security vulnerability. Also enable all options in the HTML CleanUp tab.
Speed Up WP-Admin
WP Admin Cache (Free)
https://wordpress.org/plugins/wp-admin-cache/
Admin Speedo (Free)
https://wordpress.org/plugins/admin-speedo/
Speed Up The Media Library (Free)
Snippets to improve the Media Library Performance.
Inspect HTTP Requests (Free)
https://wordpress.org/plugins/inspect-http-requests/
Monitor all the HTTP Request being made via WP HTTP Methods i.e. wp_remote_get, wp_remote_post. Block any request by just a click of a button.
Track how much time a request like updating core/plugin/theme taking (may be useful for bandwidth consumption analysis).
HTTP Requests Manager (Free)
https://wordpress.org/plugins/http-requests-manager/
Prevent WP HTTP requests from slowing down your WordPress website and admin interface.
The HTTP Requests Manager plugin will log all WP HTTP requests with time taken to complete for each request. If there are multiple requests per page they will be color grouped.
Helps to prevent website slowdown by:
Sets the request timeout period to 2 seconds. Where default is 5.
Limits the number of requests per page by 3. Default is unlimited.
Limit WP HTTP request if page load time is longer than 3 seconds. Default is unlimited.
Option to block all external requests or allow only requests to wordpress.org for plugin, theme and core updates.
Docket Cache (Free)
https://wordpress.org/plugins/docket-cache/
In addition to being an object caching plugin, it has many options to speed up both the admin backend and the frontend as well in its configuration settings.
Translations
Performant Translations (Free)
https://wordpress.org/plugins/performant-translations/
This project uses a new approach to handle translation files in WordPress, making localization blazing fast.
An in-depth i18n performance analysis showed that localized WordPress sites load significantly slower than a site without translations.
Note: WordPress 6.5 and newer required
Important: this new functionality has been merged into WordPress 6.5! However, this plugin is still useful!
On WordPress 6.5+, this plugin automatically converts existing .mo files to .php and afterwards only loads the translations from the .php file.
This is useful for cases where language packs are not downloaded from WordPress.org but somewhere else.
Translation Cache (Free)
https://wordpress.org/plugins/speed-up-translation/
Has not been updated in over a year, test this on staging first!
Translatio (Free)
https://wordpress.org/plugins/tmy-globalization/
Translatio is an open source tool for internationalization and localization of WordPress based websites.
Sublanguage (Free)
https://wordpress.org/plugins/sublanguage/
Ultra lightweight translation plugin.
Performant Code Snippets Plugin
Fluent Snippets (Free)
https://wordpress.org/plugins/easy-code-manager/
FluentSnippets store your snippets in flat files, so it does not run SQL queries for your snippets. It is the Fastest Code Snippet Plugin for WordPress.
Performance Code Snippets (Free)
Luke Cavs Repo
https://github.com/lukecav/code-snippets-wp-speed-up
Web Squadron Snippets
https://websquadron.co.uk/page-speed-performance-wordpress-code-snippets/
Geekflare
https://geekflare.com/wordpress-performance-optimization-without-plugin/
WPMunk
https://wpmunk.com/wordpress-performance-optimization-without-plugin/
Code Validation (Free)
Code Validation errors can cause performance issues.
CSS Validators
Jigsaw W3 Validator (Free)
https://jigsaw.w3.org/css-validator/
CSS Portal (Free)
https://www.cssportal.com/css-validator/
Css Validator (Free)
Lambda Test (Free)
https://www.lambdatest.com/free-online-tools/css-validator
JS Validators
Code Beautify (Free)
https://codebeautify.org/jsvalidate
Validate Javascript (Free)
https://validatejavascript.com/
Site 24x7 Validator (Free)
https://www.site24x7.com/tools/javascript-validator.html
Esprima JS Validator (Free)
https://esprima.org/demo/validate.html
Fix HTML Validation Errors
W3 HTML Validator (Free)
HTML Validation errors can cause performance issues. Use this tool to audit your site for html validation errors that need to be fixed.
HTML Validation (Free)
https://wordpress.org/plugins/html-validation/
HTML Validation Pro (Paid)
https://www.alumnionlineservices.com/our-plugins/html-validation/#proext
Automatically fixes a variety of HTML errors.
HTML Tidy (Free)
Tidy is a console application for macOS, Linux, Windows, UNIX, and more. It corrects and cleans up HTML and XML documents by fixing markup errors and upgrading legacy code to modern standards.
HTMLtidy.net (Free)
Static Sites
Site Generation
Pre-Generated HTML
A static site consists of pre-generated HTML files that are created during the development process. These files are directly uploaded to the web server and served to users as-is.
No Server-Side Processing
Since the content is static, there is no need for server-side processing such as PHP execution or database queries.
Server Resources and Performance
Low Server Load
Serving static HTML files is resource-efficient and requires minimal server processing power, resulting in faster load times and the ability to handle high traffic with ease.
No Database
Static sites do not require a database, which further reduces server complexity and potential points of failure.
Flexibility and Functionality
Limited Dynamic Content
Static sites are excellent for purely static content but require additional tools or frameworks (e.g., JavaScript, APIs) to handle dynamic functionality such as forms, user logins, or real-time updates.
Simpler Deployment
Deployment is straightforward since there are no server-side scripts to configure. Static files can be hosted on any web server or CDN.
Security
Low Attack Surface
With no server-side processing or database, static sites have a much lower attack surface, making them inherently more secure against common web vulnerabilities (e.g., SQL injection, PHP exploits).
Static Site Generators
Plugins
Simply Static (Freemium)
https://wordpress.org/plugins/simply-static/
Turn your website into a static site! Could significantly reduce hosting costs (potentially even to zero!), could increase site security and has many potential speed benefits. Your site will be converted to a purely html based site! This comes with many limitations, and if you have any dynamic resources this is most likely not going to be an option for you.
Staatic (Freemium)
https://wordpress.org/plugins/staatic/
Export Site To Static HTML (Freemium)
https://wordpress.org/plugins/export-wp-page-to-static-html/
Export WP page to static HTML/CSS plugin is a static html site or page generator thats help you to convert your wordpress site or pages to static html website and you can host it on your server, from a static html hosting provider or from a cdn.
WP2Static (Free)
https://github.com/elementor/wp2static
Hugo (Free)
Open source static site generator written in Go
Strattic (Paid)
Strattic is an all-in-one static site generation and hosting platform that instantly optimizes WordPress by converting it to a static architecture. With Strattic, content managers and marketers can continue to manage content in WordPress as usual, while developers get to bask in the glory (and enjoy the peace of mind) of a fully headless website.
Pelican (Free)
Free Static Site Generator written in Python.
Limitations of Static Sites
No search (without a custom implementation such as Algolia, Elastic Search, Typesense etc)
No locally stored comments
These are just some of the potential pitfalls (some additional pitfalls not listed here), please read the links below.
Further reading
https://uk.indeed.com/career-advice/career-development/static-vs-dynamic-website
https://drewl.com/blog/advantages-and-disadvantages-static-website/
As always, test thoroughly!
Quality of Life
Hide Admin Backend Notices
Admin Notification Center (Free)
https://wordpress.org/plugins/wp-admin-notification-center/
Lightweight Plugin To Hide Notices on the Admin Dashboard.
Show Page IDs
Echo Show IDs (Free)
https://wordpress.org/plugins/echo-show-ids/
Lightweight plugin which displays Page IDs on the admin dashboard.
Duplicate Pages
WP Duplicate Page (Free)
https://wordpress.org/plugins/wp-duplicate-page/
Lightweight Page Duplication plugin.
Tree Format Page Overview
CMS Tree Page Overview (free)
https://wordpress.org/plugins/cms-tree-page-view/
Adds a CMS-like tree overview of all your pages and custom posts to WordPress – much like the view often found in a page-focused CMS.
Within this tree you can edit pages, view pages, add pages, search pages, and drag and drop pages to rearrange the order.
Re-Enable The Classic Editor
Disable Gutenberg (Free)
https://wordpress.org/plugins/disable-gutenberg/
Restores the classic editor and disables the Gutenberg interface when editing a page.
HTAccess Editor
WP HTAccess Editor (Free)
https://wordpress.org/plugins/wp-htaccess-editor/
Htaccess editing from within the admin dashboard.
Nested Pages
WP Nested Pages (Free)
https://wordpress.org/plugins/wp-nested-pages/
Provides a simple & intuitive drag and drop interface for managing your page structure and post ordering
Enhanced quick edit functionality
Adds an editable, sortable tree view of your site’s page structure
Automatically generates a native WordPress menu that matches your page structure
A way to quickly add multiple pages & posts (ideal for development)
Works with any post type
Works on touch-enabled devices
Editor Tools
Advanced Editor Tools (Free)
https://wordpress.org/plugins/tinymce-advanced/
Advanced Editor Tools (previously TinyMCE Advanced) introduces a “Classic Paragraph” block for the block editor (Gutenberg).
If you are not quite ready to switch to the block editor, or have plugins that cannot be used there (yet), using the Classic Paragraph block is your best option. It lets you continue to use the familiar TinyMCE editor for most tasks, and at the same time gives you full access to all blocks and new features in the block editor.
Custom Statuses
WP Custom Status Manager (Free)
https://wordpress.org/plugins/hw-wp-status-manager/
Lightweight Custom Status Manager
Rollback Theme and Plugin Updates
WP Rollback (Free)
https://wordpress.org/plugins/wp-rollback/
Quickly and easily rollback any theme or plugin from WordPress.org to any previous (or newer) version without any of the manual fuss. Works just like the plugin updater, except you’re rolling back (or forward) to a specific version. No need for manually downloading and FTPing the files or learning Subversion. This plugin takes care of the trouble for you.
Dark Mode
WP Markdown Editor (Free)
https://wordpress.org/plugins/dark-mode/
Formerly titled “Dark Mode”, this is a ultra-lightweight plugin with editor enhancement features, as well as both a frontend and backend Dark Mode.
Typography Settings – You can change the typography of your editor screen, using four different fonts, and controls for font size, line height, line width, and paragraph spacing.
Ready-made Color Schema – Quickly choose your favorite color from the ready-made color schema available in WP Markdown. Highlight and edit your content the way you want.
Syntax Shortcuts – A Markdown cheat sheet is available for you which shows other keyboard shortcuts for heading, formatting and the interface.
Emoji Supported – You can make your content more interactive and attractive with emojis. WP Markdown supports all types of emojis in your write up.
Custom Colors – You can customize the background text and color as you want with the custom color feature of our WP Markdown. Pick the color schema of your preference and make it yours!
Makes it easy and fast – formatting in WordPress without thinking about the blocks.
Dark Mode Switch – You can toggle between the dark and light mode using the admin bar dark mode switch menu anytime.
Auto Match OS Theme – Automatically shows Darkmode if the OS preferred theme is dark.
Remember Dark Mode – The dark mode remains saved once you activate the dark mode.
DarkMySite (Free and Pro)
https://wordpress.org/plugins/darkmysite/
Ultra-lightweight Dark Mode. Small codebase, unlikely to conflict with other plugins. As with everything else, test on staging first before installing it on live!
Note: Make sure you have external file manager access (SSH, Cpanel, etc) in case you get locked out of the dashboard somehow so you can remove the plugin from the plugins folder, just to be safe.
WP Admin Search
Admin Search (Free)
https://wordpress.org/plugins/admin-search/
Admin Search makes searching your WordPress website easy by bringing results from all your post types, media, taxonomies, comments, users and admin pages together in a single, simple-to-use interface, seamlessly integrated into the WordPress admin backend interface.
Choose which post types and taxonomies are searched and the number of results displayed for each. Admin Search also supports custom post types and taxonomies.
SSH Update Support
SSH SFTP Updater Support (Free)
https://wordpress.org/plugins/ssh-sftp-updater-support/
Update plugins and Wordpress over SFTP
Admin and Site Enhancements (Free and Pro)
https://wordpress.org/plugins/admin-site-enhancements/
Lightweight Site Enhancements Toolkit
File Manager
FileOrganizer (Free)
https://wordpress.org/plugins/fileorganizer/
Lightweight free file manager.
Filester (Free)
https://wordpress.org/plugins/filester/
Completely free performant file manager
File Manager, Code Editor, and Backup (Free)
https://wordpress.org/plugins/softdiscover-db-file-manager/
Completely free combo File Manager, Code Editor and Backup plugin. Medium-heavy weight, like every other backend only plugin, disable it on the frontend.
Maintenance Mode
Maintenance (Free)
https://wordpress.org/plugins/maintenance/
Free Lightweight Maintenance mode plugin.
Slim Maintenance Mode (Free)
https://wordpress.org/plugins/slim-maintenance-mode/
Another free lightweight maintenance mode plugin
Code Editor
File Manager, Code Editor, and Backup (Free)
https://wordpress.org/plugins/softdiscover-db-file-manager/
Completely free combo File Manager, Code Editor and Backup plugin. Medium-heavy weight, like every other backend only plugin, disable it on the frontend.
Backups
Make sure you disable your backup plugin from running in the frontend with Asset Cleanup or another plugin which can selectively disable plugins.
Backup Vault (Free)
https://wordpress.org/plugins/backup-bolt/
Lightweight backup plugin, completely free.
WP Vivid (Free)
https://wordpress.org/plugins/wpvivid-backuprestore/
Free backup and restore plugin, has staging functionality included in the free version. Make sure to disable the plugin on the frontend with one of the plugins in the “selectively deactivate plugins” section as it doesn’t need to run in the frontend!
File Manager, Code Editor, and Backup (Free)
https://wordpress.org/plugins/softdiscover-db-file-manager/
Completely free combo File Manager, Code Editor and Backup plugin. Medium-heavy weight, like every other backend only plugin, disable it on the frontend.
FastDup (Free)
https://wordpress.org/plugins/fastdup/
Lightweight backup plugin. Full featured other than missing cloud storage functionality.
Total Upkeep (Free)
https://wordpress.org/plugins/boldgrid-backup/
Automated and manual backups
Full file and database backup or customize settings based on your needs
Remote backups via FTP / SFTP, Amazon S3 and Google Drive (Premium)
Total Upkeep checks to ensure that your web server has the necessary features to properly create backup archives, which protects the integrity of your backups
Clone, duplicate and/or migrate your site with just a few clicks
Site Check monitors your site for issues that could lead to site crashes, provides a tool set to restore your site even if your WordPress installation is inaccessible
Auto rollback feature creates a backup before updates, restores your site to the last backup if an update fails
Create staging sites to test new plugins or themes with Total Upkeep + Cloud WordPress
Clone (Free)
https://wordpress.org/plugins/wp-clone-by-wp-academy/
Free backup plugin, medium weight.
Greenbackup (Freemium)
https://wordpress.org/plugins/green-backup-by-greenwpx/
(Free Plan): Unlimited sites, backups, and migrations. Backups locally.
Pro Version: Backups locally or on various cloud services like: Dropbox, Google Drive, FTP/SFTP, Amazon S3, Wasabi, OneDrive, Google Cloud, Storage, Backblaze B2, Microsoft Azure Blob, DigitalOcean Space.
Xcloner (Free)
This plugin is heavy. But it has a ton of pro features in a free plugin (like cloud backups). Make sure to selectively disable it on the frontend to mitigate its performance impact for users.
Duplicator (Paid)
Great backup plugin.
Search and Replace
Search & Replace Everything (Free)
https://wordpress.org/plugins/search-replace-wpcode/
An ultra lightweight search and replace plugin. Search & Replace Everything enables you to efficiently manage your website’s content directly from the WordPress admin. This tool is essential for site migrations, content updates, or any situation where batch text and image replacements are needed.
You can perform detailed search and replace operations across your entire database. Select specific tables, toggle case sensitivity, and preview changes before committing. Designed to handle large websites.
Search Regex (Free)
https://wordpress.org/plugins/search-regex/
Search Regex adds a powerful set of search and replace functions to WordPress posts, pages, custom post types, and other data sources. These go beyond the standard searching capabilities, and allow you to search and replace almost any data stored on your site. In addition to simple searches you have the full power of PHP’s regular expressions at your disposal.
Bulk Update URLs
Update URLs (Free)
https://wordpress.org/plugins/update-urls/
Bulk update URLs sitewide.
Media
Media Library Folders
Categorify (Free)
https://wordpress.org/plugins/categorify/
Lightweight Free Media Folders plugin.
Media Library Folders (Free)
https://wordpress.org/plugins/media-library-plus/
Actual folders make it easier to organize your WordPress media library while reducing server burden.
Add and build new Media library folders to label and organize as you wish instead of just month/date.
Move, copy, rename and delete files and folders with a nice drag and drop interface
Regenerate thumbnails.
SEO Images to specify ALT and TITLE attributes when uploading.
Sync folders/files when moving or uploading a folder via FTP.
Create a MaxGalleria gallery.
Block direct access for selected media library files
Replace Media
Enable Media Replace (Free)
https://wordpress.org/plugins/enable-media-replace/
A free, lightweight and easy to use plugin that allows you to seamlessly replace an image or file in your Media Library by uploading a new file in its place. No more deleting, renaming and re-uploading files! Only needs to run in the backend.
Media Cleaner (Free)
https://wordpress.org/plugins/media-cleaner/
Media Cleaner – removes all unnecessary media and broken entries.
Make sure to take backups before running this just in case
Protect Media Files
AAM Protected Media Files (Free)
https://wordpress.org/plugins/aam-protected-media-files/
Ultimate WP Mail (Free)
https://wordpress.org/plugins/ultimate-wp-mail/
Send automatic email messages or manual email messages to specific users or all users
Send WooCommerce emails to purchasers and for specific actions (e.g. abandoned cart)
Clean visual interface for composing emails
Create smart lists of users to send emails to
Trigger automatic email sending for specific actions (e.g. user registration, new post published, etc.)
Great email previewing and scheduled sending features
Included email templates for common emails
Email logging
SMTP
Fluent SMTP (Free)
https://wordpress.org/plugins/fluent-smtp/
Lightweight full featured SMTP plugin
Newsletters
FluentCRM (Free and Pro)
https://wordpress.org/plugins/fluent-crm/
Performant, locally hosted Newsletter/CRM plugin. Unlimited emails on their free forever plan.
Email Address Encoding
Email Address Encoder (Free)
https://wordpress.org/plugins/email-address-encoder/
A lightweight plugin that protects/obscures plain email addresses and mailto links from email-harvesting robots, by encoding them into decimal and hexadecimal entities. Has an effect on the posts, pages, comments, excerpts, text widgets and other filtered content. Works without JavaScript — just simple spam protection.
Users
User Access Management
User Access Manager (Free)
https://wordpress.org/plugins/user-access-manager/
Lightweight User Access Manager
Allows you to manage the access of your content. This is useful if you need a member area, a private section at your blog or you want that other people can write at your blog but not everywhere.
Including all post types, taxonomies and files by creating user groups. Just assign the content you want to restrict and your registered users which should have access to a group. From now on the content is only accessible and writable for the specified group.
User Switcher
User Switching (Free)
https://wordpress.org/plugins/user-switching/
Ultra Lightweight User Switching Plugin
This plugin allows you to quickly swap between user accounts in WordPress at the click of a button. You’ll be instantly logged out and logged in as your desired user. This is handy for helping customers on WooCommerce sites, membership sites, testing environments, or for any site where administrators need to switch between multiple accounts.
Login As Users (Free)
https://wordpress.org/plugins/login-as-users/
This plugin allows you to quickly change between user accounts at the click of a button.
This plugin adds the ability to access any user account without having the user password by just clicking one button and thus solve problems or provide better and faster customer support.With one click admin will be logged in as the specific user and then he can handle any situation without wasting much time.
Switch Post Authors
Post Author Switcher (Free)
https://wordpress.org/plugins/post-author-switcher/
Change the author of multiple posts simultaneously. Additionally you can switch post author by post type, post status and existing post author.
Multiple User Roles
Multiple Roles (Free)
https://wordpress.org/plugins/multiple-roles/
Allows you to assign more than one role to a user account.
User Deletion
Inactive User Deleter (Free)
https://wordpress.org/plugins/inactive-user-deleter/
Lightweight mass user deleter based on specified criteria.
Delete Me (Free)
https://wordpress.org/plugins/delete-me/
Allow users to delete their own user account.
Remote User Sync
WP Remote User Sync (Free)
https://wordpress.org/plugins/wp-remote-users-sync/
If you run multiple websites and want to keep users separated, but synchronize them automatically and securely for specific user operations, then WP Remote Users Sync is the plugin to use.
Taxonomies
Simple Taxonomies (Free)
https://wordpress.org/plugins/simple-taxonomy-refreshed/
Supports adding one or more taxonomies (either hierarchical or tag) to any objects registered on your installation. This plugin allows you to add a taxonomy just by giving them a name and some options in the backend. It then creates the taxonomy for you and takes care of the URL rewrites.
Media Library Attachment Taxonomies
Attachment Taxonomies (Free)
https://wordpress.org/plugins/attachment-taxonomies/
Lightweight Free Attachment Taxonomies Plugin.
The plugin adds two taxonomies to the WordPress media library which are then available to categorize and tag your attachments. By default, these taxonomies, although sharing the same names and behavior, are separate from the default post taxonomies, but this can easily be changed if desired.
Images
Taxonomy Images (Free)
https://wordpress.org/plugins/taxonomy-images/
Associate images from your media library to categories, tags and custom taxonomies.
Taxonomy Filtering
Beautiful Taxonomy Filters (Free)
https://wordpress.org/plugins/beautiful-taxonomy-filters/
The Beautiful Taxonomy Filters plugin is an easy and good-looking way to provide your visitors with filtering for your post types. With this you get a complete solution for adding filtering based on custom taxonomy terms/categories/tags. It will also automatically add rewrite rules for pretty looking filter URLs.
It’s completely automatic, works without javascript and is based on the WordPress Plugin boilerplate for a standardized, organized and object-oriented codebase. It uses select2 for pretty looking and user friendly dropdowns but will fall back to ordinary ones if javascript is not supported.
Taxonomy Filter (Free)
https://wordpress.org/plugins/taxonomy-filter/
Taxonomy Filter is a simple and flexible plugin which allows users to filter hierarchical term taxonomies inside admin pages. If you need to simplify your tags and categories research on admin pages, this plugin will make it easier for you. It adds a custom input field (only for configured taxonomies) that you can use to filter every taxonomy list.
Custom Fields
ACF
ACF Extended Performance Mode (Paid)
https://www.acf-extended.com/features/modules/performance-mode
The Performance Mode is a unique ACF module that allows developers to optimize ACF metadata and enhance database load with two different methods: Ultra & Hybrid Engines.
ACF Better Search (Free)
https://wordpress.org/plugins/acf-better-search/
Ultra-lightweight ACF search plugin. This adds to the default WordPress search engine the ability to search by content from selected ACF fields.
ACF Caching
ACF Simple Cache (Free)
https://wordpress.org/plugins/acf-simple-cache/
Caches ACF Fields via json file for improved performance.
MetaBox
Optimizing MetaBox Custom Field Database Performance (Free)
https://metabox.io/optimizing-database-custom-fields/
Each custom field is stored as one row in the database. This approach allows developers to store unlimited data regardless of its structure. But, the downside is the rapid bloat of the database. Because the number of custom fields is usually very large.
This article will present solutions to optimize the storage of custom fields in the database to help boost your website performance.
MetaBox Groups (Paid)
https://metabox.io/plugins/meta-box-group/
Database optimization of sub-fields for reduced bloat
Custom Post Types & Custom Taxonomies (Free)
https://wordpress.org/plugins/mb-custom-post-type/
MB Custom Post Types & Custom Taxonomies helps you to register and edit custom post types and custom taxonomies easily in WordPress by providing an easy-to-use UI in the admin area.
SEO
All-In-One SEO plugins
SEO Pyramid (Free)
https://wordpress.org/plugins/seo-pyramid/
Neat, very lightweight SEO Toolkit. Schema functionality included (rare for a free plugin). Almost all the functionality you’d find in a paid SEO plugin. Frequently updated with enhancements and new features.
Note: Activate on staging first
The SEO Framework (Freemium)
https://wordpress.org/plugins/autodescription/
Rankmath (Freemium)
Rankmath is a very well optimized plugin that is not detrimental to pagespeed.
Make sure you enable sitemap functionality in Rankmath. This will allow WP-Rocket to detect the Rankmath sitemap, which should increase preload efficiency.
Yoast (Freemium)
https://wordpress.org/plugins/wordpress-seo/
Hide SEO Bloat (Free)
https://wordpress.org/plugins/so-clean-up-wp-seo/
Removes Yoast backend bloat
WP Meta SEO (Free)
https://wordpress.org/plugins/wp-meta-seo/
Tons of features in the free version. There’s a pro addon, but not necessary as the functionality can be achieved via other free plugins. Free version has quite a lot of useful features. This plugin is heavy, make sure to disable it on the frontend as all of the changes it makes are inserted via the backend.
Bulk edit all website meta on a single view
Edit meta in content with live SEO analysis
Fix HTML image resizing in content
Bulk edit image file name and meta
Bulk edit SEO link title
404 errors redirect and internal broken link checker
Add Google Analytics tracking information and display statistics on WordPress
Generate XML and HTML sitemaps
Facebook and Twitter social sharing custom elements per content
Breadcrumb generator
Gutenberg SEO content checker
Canonical URL management for post, pages
and categories
Elementor full integration with live onPage SEO in the Elementor page editor
SEO Engine (Free)
https://wordpress.org/plugins/seo-engine/
Auto-generate meta titles and descriptions
Automatically use the {TITLE} | {SITENAME} format for titles
Convenient UI to override titles and descriptions, with AI
Automatic sitemap.xml and robots.txt generation
Social Cards for SNS and Open Graph
Search Engine Ranking
WooCommerce Assistant (AI)
Prevent GPTBot (OpenAI) from using your content
Topical Map
Topical Map and Internal Link Flow (Free)
https://wordpress.org/plugins/internal-link-flow-topical-authority-topical-map/
Keyword Research
Keyword Research Tool (Free)
https://wordpress.org/plugins/keyword-research-tool/
Free keyword research plugin.
RankMyWP (Free)
https://wordpress.org/plugins/rank-my-wp/
Keyword Research Tool
Over 140 Keyword Research Countries
Check Keyword Country
Check Keyword Competition
Check Keyword Search Volume
Check Keyword Social Popularity
Save Keyword for SEO Optimization
Save Keyword in Briefcase
Keywords Briefcase
Unlimited Keyword Storage
Categorize Keywords by SEO Strategy
Keywords Research Information
Save Keyword for SEO Optimization
Keyword Research History
Keywords Suggestion
Save Keyword for SEO Optimization
Add Labels to Keywords
Filter Keywords by Labels
Google Ranking
Unlimited Keywords in Google Ranking
Connect to Google Search Console (GSC)
GSC Keywords Synchronization
Add Keywords from Briefcase
Google Ranking with GSC average position
Monitor Google average position over time
Broken Link Checking
Broken Link Checker (Free)
https://wordpress.org/plugins/broken-link-checker/
Lightweight Broken Link Checker
Instant Indexing
Index Now (Free)
https://wordpress.org/plugins/mihdan-index-now/
It can take days to weeks for search engines to discover that the content has changed, as search engines don’t crawl every URL often. IndexNow will let search engines know immediately when content has been updated.
Internal Linking
SEO Booster (Free)
https://wordpress.org/plugins/seo-booster/
Free neat little SEO toolkit with automatic internal linking.
WordPress Internal Link Optimiser (Free)
https://wordpress.org/plugins/internal-link-finder/
Elevate your website’s search engine optimisation (SEO) game by effortlessly identifying and capitalizing on valuable internal linking opportunities while efficiently managing your existing network of internal links.
A robust internal link structure is paramount for driving exceptional search engine performance and on-page SEO.
Auto Internal Links (Free and Pro)
https://wordpress.org/plugins/automatic-internal-links-for-seo/
Automatic Internal Linking plugin.
Backlink Monitoring
SEO Booster (Free)
https://wordpress.org/plugins/seo-booster/
Backlink discovery. Free version requires manual scans, paid version has automated monitoring.
External Links
WP External Links (Free)
https://wordpress.org/plugins/wp-external-links/
Manage all external & internal links on your site. Control icons, nofollow, noopener, ugc (User Generated Content), sponsored and if links open in new window or new tab.
404 Monitoring
SEO Booster (Free)
https://wordpress.org/plugins/seo-booster/
Built in 404 page monitoring
Redirects
Redirection (Free)
https://wordpress.org/plugins/redirection/
Open Source Free Redirect Plugin. Most SEO plugins have this feature built in so this shouldn’t be needed, but I’ll leave it here just in case.
External Tools Toolkit
Opace Essential SEO Toolkit (Free)
https://wordpress.org/plugins/opace-essential-seo-toolkit/
Add links to multiple external tools directly within the admin dashboard to simplify and speed up your SEO workflow.
Schema
SEO Pyramid (Free)
https://wordpress.org/plugins/seo-pyramid/
Neat lightweight SEO plugin, schema functionality included for free (rare).
WPSSO Core (Free)
https://wordpress.org/plugins/wpsso/
Complete Structured Data Plugin for WordPress
Provides complete structured data for WordPress to present your content at its best for social sites and search results, no matter how URLs are shared, reshared, messaged, posted, embedded, or crawled.
Performant Sitemaps
Super Speedy Sitemaps (Free)
https://www.superspeedyplugins.com/product/super-speedy-sitemaps/
Super Speedy Sitemaps is a lightning fast sitemap index with Google News and Multisite support.
Seamlessly replace Yoast and Rank Math sitemaps and you can benefit from the ultra-fast sitemap generation in this plugin while still using the rest of the features from Yoast/Rank Math that you love.
Breadcrumbs
Flexy Breadcrumb (Free)
https://wordpress.org/plugins/flexy-breadcrumb/
Lightweight breadcrumbs plugin, works via shortcode.
Open Graph Tagging
Open Graph and Twitter Card Tags (Free)
https://wordpress.org/plugins/wonderm00ns-simple-facebook-open-graph-tags/
Improves sharing of your WordPress pages, posts, WooCommerce products, or any other post type on social media, by setting the correct Facebook Open Graph Tags.
DataCaptia (Free)
https://wordpress.org/plugins/data-captia/
Lightweight Open Graph Tags for Social Media Sharing. Helps with SEO and Social Sharing Reach.
Content
Related Posts
Super Related Posts (Free)
https://wordpress.org/plugins/super-related-posts/
Related posts plugin to improve traffic & bounce-rate with a superior algorithm. Zero server load & highly configurable related post plugin.
YARPP (Free)
https://wordpress.org/plugins/yet-another-related-posts-plugin/
Another performant related posts plugin.
Content Writing
AI Content Writing Assistant (Free)
https://wordpress.org/plugins/ai-content-writing-assistant/
AI Content Writing Assistant – Content Writer, ChatGPT, Image Generator All in One generates high-quality, unique content and stunning images with just one click.
RSS Feeds
FeedWordPress (Free)
https://wordpress.org/plugins/feedwordpress/
FeedWordPress is an Atom/RSS aggregator for WordPress. It syndicates content from feeds that you choose into your WordPress weblog, and then the content it syndicates appears as a series of special posts in your WordPress posts database. If you syndicate several feeds then you can use WordPress’s posts database and templating engine as the back-end of an aggregation (“planet”) website.
Workflow Management
Oasis Workflow (Free)
https://wordpress.org/plugins/oasis-workflow/
Oasis Workflow is a powerful feature rich plugin designed to automate any editorial workflow process using a simple, intuitive drag and drop interface.
Post Scheduling
Editorial Calendar (Free)
https://wordpress.org/plugins/editorial-calendar/
Neat little free plugin to schedule posts. Disable it on the frontend!
Schedule Posts Calendar (Free)
https://wordpress.org/plugins/schedule-posts-calendar/
Extremely lightweight scheduled post scheduling plugin. It only needs to run in the backend, make sure to disable it in the frontend to eliminate its performance impact!
Content Importing
Wordpress Importer (Free)
https://wordpress.org/plugins/wordpress-importer/
The WordPress Importer will import the following content from a WordPress export file:
Posts, pages and other custom post types
Comments and comment meta
Custom fields and post meta
Categories, tags and terms from custom taxonomies and term meta
Authors
Accessibility
Accessibility Plus (Free)
https://wordpress.org/plugins/accessibility-plus/
Nice free plugin which implements some accessibility improvements.
Accessibe (Free)
https://wordpress.org/plugins/accessibe/
Free Accessibe Accessibility Plugin
WP Accessibility (Free)
https://wordpress.org/plugins/wp-accessibility/
Lightweight. This plug-in helps with a variety of common accessibility problems in WordPress themes. While most accessibility issues can’t be addressed without directly changing your theme, WP Accessibility adds a number of helpful accessibility features with a minimal amount of setup or expert knowledge.
Automation
WP Pipes (Free)
https://wordpress.org/plugins/wp-pipes/
Cool and entirely free automation plugin. Doesn’t have tons of features, but it’s pretty neat.
AutomatorWP (Freemium)
https://wordpress.org/plugins/automatorwp/
Open Source free automation plugin. Lightweight than Uncanny Automator. Make sure you have object caching enabled and reduce any autoload options in your database to the minimum required to allow the plugin to continue functioning unimpaired. Also selectively unload it on the frontend, it only needs to run in the backend.
Note: Paid addons
Uncanny Automator (Freemium)
https://wordpress.org/plugins/uncanny-automator/
Uncanny Automator is heavy and can have a large negative performance impact, so I would strongly suggest selectively disabling it on the frontend. Automation in general is database query heavy, so make sure you have some form of object caching enabled! Automation actions are frequently called with cron jobs, so you’ll have to play around with disabling some Uncanny Automator Database autoload options to reduce the performance impact.
Those options should still be loaded when they are called via cron or another API, so they should largely be safe to remove from autoload, but please test carefully after changing database option autoload settings to ensure nothing has broken! Always take backups before changing autoload options.
If-So (Freemium)
https://wordpress.org/plugins/if-so/
Allows you to set trigger conditions for automated actions.
AutomateWoo (Paid)
Official Automattic created Woocommerce automation plugin. I’ve previously experienced jank with this plugin before, but the last time I used it was a few years ago. The interface is a bit wonky, and like any other automation plugin it will be database heavy. Same deal, selectively disable it on the frontend (it only needs to run in the backend), and make sure you have some form of object caching.
Site Search
ElasticSearch (Free)
ElasticPress (Free)
https://wordpress.org/plugins/elasticpress/
Why you should implement ElasticSearch
https://guides.wp-bullet.com/install-configure-elasticsearch-to-speed-up-wordpress-search/
How to implement ElasticSearch Locally (Free)
https://mayvenstudios.com/blog/implement-elasticsearch-wordpress-site
Optimizing ElasticSearch Relevance Article
https://bigdataboutique.com/blog/optimizing-elasticsearch-relevance-a-detailed-guide-c9efd3
Typesense (Free)
How to locally install TypeSense
https://typesense.org/docs/guide/install-typesense.html
Typesense Plugin (Free)
https://wordpress.org/plugins/search-with-typesense/
Super Speedy Search (Paid)
https://www.superspeedyplugins.com/product/super-speedy-search/
WP Extended Search (Free)
https://wordpress.org/plugins/wp-extended-search/
Search in selected meta keys
Search in category, tags or custom taxonomies
Search in the post author name
Include or exclude any public post type
Control whether to search in title or content or excerpt or all
Compatible with WooCommerce. Search in product SKU, Attributes, variations, and custom fields, etc.
Create unlimited search settings to use with custom search forms.
Add search forms using a widget, shortcode or PHP function. Also works with custom searchform.php
Exclude old content from search results (Older than admin specified date)
Customize the number of posts to display on the search results page
Customize SQL relation (AND/OR) between search terms
Customize order of search results
Control whether to match search query exactly or partially
Limit attachment results by mime type e.g. display only pdf files in search results.
Translation ready
Compatible with WPML
Filtering
Super Speedy Filters (Paid)
https://www.superspeedyplugins.com/product/super-speedy-filters/
Performant filters plugin, works for regular Wordpress post types and Woocommerce.
Filters and Grids (Free)
https://wordpress.org/plugins/ymc-smart-filter/
Free Filters plugin
Themify Woocommerce Product Filters (Free)
https://wordpress.org/plugins/themify-wc-product-filter/
Free Woocommerce Product Filters
Beautiful Taxonomy Filters (Free)
https://wordpress.org/plugins/beautiful-taxonomy-filters/
The Beautiful Taxonomy Filters plugin is an easy and good-looking way to provide your visitors with filtering for your post types. With this you get a complete solution for adding filtering based on custom taxonomy terms/categories/tags. It will also automatically add rewrite rules for pretty looking filter URLs.
It’s completely automatic, works without javascript and is based on the WordPress Plugin boilerplate for a standardized, organized and object-oriented codebase. It uses select2 for pretty looking and user friendly dropdowns but will fall back to ordinary ones if javascript is not supported.
Design
Visual CSS Editor
Yellow Pencil (Freemium)
https://wordpress.org/plugins/yellow-pencil-visual-theme-customizer/
A performant visual css editor. The plugin allows you to customize any page and theme without coding. Click on an element and start visual editing. Adjust colors, fonts, sizes, positions and a lot more.
Import Figma Designs
UIChemy (Free and Pro)
https://wordpress.org/plugins/uichemy/
Allows you to import 10 designs monthly on the free plan. To use the free plan to import unlimited templates, just make a new temp site on instawp.com and register another account.
Imports and Exports
One Click Demo Import (Free)
https://wordpress.org/plugins/one-click-demo-import/
Lightweight One Click Demo Importer
Link Shortening
GreenWPX Shortlink (Free)
https://wordpress.org/plugins/short-link-by-greenwpx/
Free linkshortener
Link Shortener (Free)
https://wordpress.org/plugins/link-shortener/
Extremely basic link shortener.
Linker (Free)
https://wordpress.org/plugins/linker/
Through Linker’s short url tool you can know on which links your visitors are clicking. Linker is the easiest tool to use in order to create a short link in your own domain & track outbound link clicks from your website, using software like Google Analytics.
Create short links to your post, manage your 301 redirects, track affiliate links and do many other URL related tasks easily.
JotUrl Link Shortener (Free)
https://wordpress.org/plugins/joturl-link-shortener/
Ultra-lightweight link shortener. Hasn’t been updated recently, make sure to test on staging to check for compatibility issues.
Ads
Advanced Ads Pro (Paid)
https://wpadvancedads.com/lazy-load-ads/
Lazy load ads: Only loads ads when the users scroll to them in their browser.
Optimization
Adsense
Lazyload Adsense (Free)
https://wordpress.org/plugins/lazy-load-adsense/
Other Ad Providers
For other Ad providers, you can delay their javascript from loading using any of the plugins listed in the Delay Javascript section. These can be identified from a waterfall chart. Only delay ad JS if all Ads are below the fold! (are not visible on the initial page load as they are offscreen).
Ad Management
FlatPM (Free)
https://wordpress.org/plugins/flatpm-wp/
Free ultra lightweight ad management
CRM
FluentCRM (Free)
https://wordpress.org/plugins/fluent-crm/
Lightweight locally hosted CRM plugin.
Live Chat
Help Dialog (Free)
https://wordpress.org/plugins/help-dialog/
Completely Free Lightweight Chat Plugin. It includes links for WhatsApp and phone support, FAQs, a search tool, and a contact form, ensuring quick and personalized assistance.
Indigital Live Chat (Free)
https://wordpress.org/plugins/indigitall-web-push-notifications/
This plugin has 2 in 1 functionality, live chat and push notifications. Self-hosted version is entirely free.
Simple Chat Plugin (Free)
https://wordpress.org/plugins/simple-chat-button/
Free ultra lightweight (no javascript!) Whatsapp live chat plugin
Elementor Pro (Paid)
Elementor now has integrated native Live Chat functionality via the new “Floating Buttons” feature which can be enabled in the advanced settings in Elementor Pro.
Pro Elements (Free)
https://github.com/proelements/proelements
Pro Elements can be used to enable all Elementor Pro features, including the Floating Buttons for Live Chat.
Support
Support Plugins
Fluent Support (Free)
https://wordpress.org/plugins/fluent-support/
Lightweight support plugin
WooCommerce
Dequeue Woocommerce Cart Fragments (Free)
https://wordpress.org/plugins/disable-cart-fragments/.
Woocommerce Cart Fragments are disabled and re-enabled on the fly. There are no options to configure.
Disable WooCommerce Bloat (Free)
Debloat for WooCommerce
https://wordpress.org/plugins/disable-analytics-for-woocommerce/
Selectively disable all of the listed features below:
All Admin Features
Selective Features
Connection to WooCommerce.com notification
Marketplace Suggestions
Extensions submenu
Marketing Hub
Remove Styles
Remove Scripts
Remove Gutenberg blocks styles on frontend
Remove Widgets
Remove Cart Fragmentation
Disable Bloat for WordPress & WooCommerce (Free)
https://wordpress.org/plugins/disable-dashboard-for-woocommerce/
Great plugin with a lot of Debloat features for both Woocommerce and Wordpress. Any paid “pro” options can be achieved with other free plugins. There is no reason to purchase the pro version of the plugin. The pro version is completely unnecessary.
Enable HPOS (Free)
https://woo.com/document/high-performance-order-storage/
High Performance Order Storage is a newer feature that the Woocommerce devs have implemented. It is enabled by default on new Woocommerce installations, however it needs to be manually activated on existing Woocommerce sites. Please ensure all of your plugins are compatible with HPOS before enabling it to prevent any errors. Activate it on staging first before doing so on a live site.
Checkout and Cart Pages
Debloat (Free)
https://wordpress.org/plugins/debloat/
Debloat works on the cart and checkout pages, unlike Perfmatters and Flyingpress. Perfmatters and Flyingpress disable their functionality on both of those pages, so use Debloat to remove unused css and delay javascript instead.
Defer Transactional Emails for Woocommerce (Free)
https://wordpress.org/plugins/defer-transictional-emails-for-woocommerce/
It will improve checkout process performance deferring transactional emails.
Speed Up Order Lookup
Fast Woocommerce Order Lookup (Free)
https://wordpress.org/plugins/fast-woo-order-lookup/
Speeds up order lookup by adding indexes. Speeds up your site by running a background process to create a special-purpose index table, a table of trigrams, to speed up that search. Then it uses those trigrams to search for orders.
Woo Prune Old Orders (Free)
https://wordpress.org/plugins/woo-prune-orders/
Greatly improve the performance of a WooCommerce site bogged down by tens of thousands of historic orders. Back orders up using your favorite Order Exports plugin, or rely upon integrated accounting software to keep history beyond the currently active orders in processing.
Test Checkout Process
Woo Order Test (Free)
https://wordpress.org/plugins/woo-order-test/
Sets up a testing payment gateway for WooCommerce to confirm your checkout works like it should. You can complete a full and real checkout on your site to see if everything is running smoothly. Runs for admin users only.
Store Toolkit
Woocommerce Store Toolkit (Free)
https://wordpress.org/plugins/woocommerce-store-toolkit/
Lightweight multi-function Woocommerce toolkit.
Booster For Woocommerce (Free and Pro)
https://wordpress.org/plugins/woocommerce-jetpack/
Multi-function (100+) all-in-one modular Woocommerce toolkit (unneeded functionality can be disabled to minimize performance impact).
Disable Woocommerce Usage tracking (Free)
Woocommerce>Settings>Advanced>Woocommerce.com
Woocommerce Database Indexing
Scalability Pro (Paid)
https://www.superspeedyplugins.com/product/scalability-pro/
Adds high performance indexes to Wordpress and Woocommerce MySQL tables. Significantly improves database performance.
Product Search
Super Speedy Search (Paid)
https://www.superspeedyplugins.com/product/super-speedy-search/
Fast Product Search plugin.
Email Marketing
ShopMagic (Free)
https://wordpress.org/plugins/shopmagic-for-woocommerce/
Automated email marketing for Woocommerce, completely free.
FluentCRM (Free and Pro)
https://wordpress.org/plugins/fluent-crm/
FluentCRM is a full featured lightweight CRM with an amazing free tier plugin. Fully self-hosted, has Woocommerce complex, granular email marketing features for Woocommerce.
Bulk Edit
Smart Manager (Free and Pro)
https://wordpress.org/plugins/smart-manager-for-wp-e-commerce/
Bulk edit multiple products at the same time. Only needed on the backend.
Filters
Ultimate WooCommerce Filters (Free)
https://wordpress.org/plugins/color-filters/
Ultimate WooCommerce Filters is a plugin that allows you to filter WooCommerce products by color, size, attribute, category or tag. Easy to set up and implement via a block, shortcode or widget.
Themify Woocommerce Product Filters (Free)
https://wordpress.org/plugins/themify-wc-product-filter/
Free Woocommerce Product Filters
Super Speedy Filters (Paid)
https://www.superspeedyplugins.com/product/super-speedy-filters/
Ultra fast product filters for Woocommerce.
Note: Free option coming soon
Additional Order Filters For Woocommerce (Free)
https://wordpress.org/plugins/additional-order-filters-for-woocommerce/
Additional Order Filters for WooCommerce adds additional filters, with which you can easily and quickly find the orders you need among hundreds of others.
Avalon23 Products Filter (Free)
https://wordpress.org/plugins/avalon23-products-filter-for-woocommerce/
Lightweight product filter plugin
Beautiful Taxonomy Filters (Free)
https://wordpress.org/plugins/beautiful-taxonomy-filters/
The Beautiful Taxonomy Filters plugin is an easy and good-looking way to provide your visitors with filtering for your post types. With this you get a complete solution for adding filtering based on custom taxonomy terms/categories/tags. It will also automatically add rewrite rules for pretty looking filter URLs.
It’s completely automatic, works without javascript and is based on the WordPress Plugin boilerplate for a standardized, organized and object-oriented codebase. It uses select2 for pretty looking and user friendly dropdowns but will fall back to ordinary ones if javascript is not supported.
Product Gallery
Image Gallery and Slider (Free)
https://wordpress.org/plugins/gallery-slider-for-woocommerce/
Ultra lightweight image gallery and slider for Woocommerce.
My Account Menu Editing
Gou Manage My Account Menu (Free)
https://wordpress.org/plugins/gou-wc-account-tabs/
Free My Account Menu Editor.
Checkout Field Editing
Qodax Checkout Manager (Free)
https://wordpress.org/plugins/qodax-checkout-manager/
Ultra lightweight checkout field editor
Cost Of Goods
Cost Of Goods Manager (Free)
https://wordpress.org/plugins/cost-of-goods-manager-for-woocommerce/
Free cost of goods plugin
Invoices
PDF Invoices and Packing Slips (Free)
https://wordpress.org/plugins/woocommerce-pdf-invoices-packing-slips/
Note: HEAVY plugin, make sure to selectively disable it on the frontend
Order Statuses
Order Status History for WooCommerce (Free)
https://wordpress.org/plugins/order-status-history-for-woocommerce/
Order Status History for WooCommerce (OSHWOO) speeds up your daily analysis and processing of orders. Unobtrusive visual cues in all the orders screens show when someone has ordered from your shop before, your (most) repeating customers, and spurts of unusual activity (like customers with due payments and cancellations).
Inventory Management
Shelf Planner (Free)
https://wordpress.org/plugins/shelf-planner/
Free HEAVY inventory management system.
Note: Make sure to selectively disable it on the frontend!
Multi-Currency
Woocommerce Currency Switcher (Free and Pro)
https://wordpress.org/plugins/woocommerce-currency-switcher/
Note: Free version has all features enabled, but supports only 2 currencies. To have more than 2 currencies pro is needed.
Shipping Distance
WooReer (Free)
https://wordpress.org/plugins/wcsdm/
Shipping distance calculator
Order Splitting
Woo Order Splitter (Free)
https://wordpress.org/plugins/woo-order-splitter/
It enables you to split, consolidate, clone, your crowd/combined/bulk orders using intelligent rules.
Product Questions
Product Questions and Answers (Free)
https://wordpress.org/plugins/product-questions-answers-for-woocommerce/
Product Feed
Woo Product Feed Pro (Free)
https://wordpress.org/plugins/woo-product-feed-pro/
Very lightweight product feed with fully enabled pro features with no limits.
Create XML feeds, CSV feeds, TXT feeds, and YML feeds for Google Shopping feed (merchant center), Meta feed, Facebook feed, Remarketing product feed, Bing product feed (for Bing Shopping & Bing Ads), Billiger.de feed, Pricerunner feed, Skroutz, Catch.com.au feed, and many more.
Upsells
Offermative (Free)
The easiest and most powerful AI-driven WooCommerce upsell plugin to boost sales and maximize your average order value.
Offermative intelligently generates hundreds of conversion-focused upsells, related product recommendations, cross-sells, dynamic pricing deals, order bumps, BOGO deals and other compelling offer campaigns within your sales funnel, within minutes.
Product Stock Sync
Google Sheets Product Sync (Free)
https://wordpress.org/plugins/product-sync-master-sheet/
Easily manage and synchronize your WooCommerce product stock with the power of Google Sheets – Product Stock Sync with Google Sheets for WooCommerce.
Markup By Attribute
Markup By Attribute for Woocommerce (Free)
https://wordpress.org/plugins/markup-by-attribute-for-woocommerce/
Markup by Attribute Adds ‘Markup’ to Attribute Terms
Markup by Attribute allows you to add a markup (or markdown) to global attribute terms. If the attribute is ‘color’, then Markup by Attribute allows you to add “+5″ to Blue while leaving Green and Yellow alone. When you set regular and sale prices, every blue product will be $5.00 more.
Reviews
Google Business Reviews Ratings (Free)
https://wordpress.org/plugins/g-business-reviews-rating/
Lightweight Google Reviews plugin.
Absolute Reviews (Free)
https://wordpress.org/plugins/absolute-reviews/
Extremely lightweight reviews plugin. Slick designs.
Site Reviews (Free)
https://wordpress.org/plugins/site-reviews/
Amazing free, very lightweight open source review plugin. Works for regular site reviews as well as Woocommerce/EDD. It has many more integrations as well, all free.
Common Administration Tasks
Woocommerce Store Toolkit (Free)
https://wordpress.org/plugins/woocommerce-store-toolkit/
Store Toolkit for WooCommerce is a growing set of commonly-used WooCommerce administration tools.
Related Products
WebToffee Woocommerce Related Products (Free)
https://wordpress.org/plugins/wt-woocommerce-related-products/
Free Related Products plugin
Visual Email Designer
Decorator (Free)
https://wordpress.org/plugins/decorator-woocommerce-email-customizer/
Follow-Up Emails
FluentCRM (Free + Paid)
https://wordpress.org/plugins/fluent-crm/
CRM and Email Automation Plugin with Woocommerce support.
Shopmagic (Free + Paid Addons)
https://wordpress.org/plugins/shopmagic-for-woocommerce/
Giftcards
Gift4U (Free)
https://wordpress.org/plugins/gift4u-gift-cards-all-in-one-for-woo/
Free lightweight gift card manager
Product Compare
WCBoost (Free)
https://wordpress.org/plugins/wcboost-products-compare/
When dealing with numerous similar products, customers frequently find it difficult to make a purchase decision. As a result, making it simple for buyers to compare similar products is an important aspect of e-commerce websites. This feature is not included with the basic installation of WooCommerce.
Pre-Orders
Product Pre-Orders For Woo (Free)
https://wordpress.org/plugins/product-pre-orders-for-woo/
Lightweight pre-order plugin
Variation Swatches
Variation Swatches For Woocommerce (Free)
https://wordpress.org/plugins/variation-swatches-for-woocommerce/
Lightweight variation swatch plugin.
Fields
WC Fields Factory (Free)
https://wordpress.org/plugins/wc-fields-factory/
Custom Fields manager for Woocommerce.
Export Comments
Woocommerce Comments Export (Free)
https://wordpress.org/plugins/comments-import-export-woocommerce/
Wishlist
WCBoost (Free)
https://wordpress.org/plugins/wcboost-wishlist/
Free wishlist plugin. Extremely lightweight, less than 80 kb for the entire plugin.
WishSuite (Free)
https://wordpress.org/plugins/wishsuite/
Completely Free Feature Complete Wishlist Plugin.
WebToffee Wishlist For Woocommerce (Free)
https://wordpress.org/plugins/wt-woocommerce-wishlist/
Free Wishlist Plugin. Medium weight
Sales Notifications/FOMO
Woocommerce Sales Notification (Free)
https://wordpress.org/plugins/wc-sales-notification/
WC Sales Notification is a plugin for Showing your orders or fake notification on your website. You can show the notification all pages in your website. It gives you awesome features, is to generate for fake notifications. The plugin Has Wonderful customization option and incoming and outgoing animation options.
Accessories
F12 Woocommerce Accessories (Free)
https://wordpress.org/plugins/f12-wc-accessories/
Add accessories to products.
Add accessories to categories.
Show accessories on the product page.
Automatically show accessories for products added to the cart on the cart page.
Add custom title & descriptions for the accessories on the product page.
Add custom title & descriptions for the accessories on the cart page.
Use placeholders [product_title] to customize the text and improve your seo.
Set the tags for the titles h1-h6 or use a div container.
Add mandatory accessories to products
Add mandatory accessories to categories
Compare Products
Ever Compare (Free)
https://wordpress.org/plugins/ever-compare/
Free Lightweight Product Comparison Plugin
Compe Woo Compare Products (Free)
https://wordpress.org/plugins/compe-woo-compare-products/
Another lightweight compare plugin
Dynamic Pricing and Discounts
YayPricing (Free)
https://wordpress.org/plugins/yaypricing/
Lightweight discounts plugin
Woo Dynamic Pricing and Discounts (Free)
https://wordpress.org/plugins/redis-woo-dynamic-pricing-and-discounts/
Lightweight free dynamic pricing and discounts plugin
Dynamic Pricing and Discounts (Free)
https://wordpress.org/plugins/discount-and-dynamic-pricing/
Another lightweight dynamic pricing and discounts plugin
Coupon Reminders
Woo Coupon Reminder (Free)
https://wordpress.org/plugins/woo-coupon-reminder/
Lightweight automatic coupon email reminders
Coupon Generator
Coupon Zen (Free)
https://wordpress.org/plugins/coupon-zen/
Coupon Zen is a WordPress coupon code generator plugin that allows you to generate custom coupon codes for your website. Free and easy to use.
Rewards Points
Woocommerce Points and Rewards (Paid)
https://woocommerce.com/products/woocommerce-points-and-rewards/
The official points and rewards plugin, very lightweight.
EPOI – WP Points and Rewards (Free)
https://wordpress.org/plugins/epoi-wp-points-and-rewards/
Another lightweight rewards plugin
Product Size Chart
Product Size Chart For Woo (Free)
https://wordpress.org/plugins/product-size-chart-for-woo/
Lightweight size charts for Woocommerce products
Suggestions
Suggestion Engine (Free)
https://wordpress.org/plugins/woo-suggestion-engine/
Quick View
QuickSwish (Free)
https://wordpress.org/plugins/quickswish/
Subscriptions
SUBRE – Product Subscription (Free)
https://wordpress.org/plugins/subre-product-subscription-for-woo/
Great lightweight free full featured subscriptions plugin.
Extra Checkout Fields
FEWC Extra Checkout Fields (Free)
https://wordpress.org/plugins/fewc-extra-checkout-fields-for-woocommerce/
FEWC – Extra Checkout Fields For WooCommerce is an easy and effective method for customizing the checkout page. You can add custom fields, turn on/off any fields, and modify field position,… And preview the result on customizing.
Automation
AutomateWoo (Paid)
Official Automattic created Woocommerce automation plugin. I’ve previously experienced jank with this plugin before, but the last time I used it was a few years ago. The interface is a bit wonky, and like any other automation plugin it will be database heavy. Same deal, selectively disable it on the frontend (it only needs to run in the backend), and make sure you have some form of object caching.
Custom Product Options
EPOW Custom Product Options (Free)
https://wordpress.org/plugins/epow-custom-product-options-for-woocommerce/
Lightweight product options customization plugin.
Affiliates
Affiliate Manager (Free)
https://wordpress.org/plugins/affiliates-manager/
Lightweight Affiliate Management plugin.
Memberships
Members (Free)
https://wordpress.org/plugins/members/
Lightweight Membership plugin.
Memberpress (Paid)
Paid Membership plugin from the Members Developers, more features, very lightweight.
Memberful (Free)
https://wordpress.org/plugins/memberful-wp/
Another membership plugin.
Restrict Content
QuentnWP (Free)
https://wordpress.org/plugins/quentn-wp/
Free content restriction plugin with Elementor integration.
User Access Manager (Free)
https://wordpress.org/plugins/user-access-manager/
Lightweight User Access Manager
Allows you to manage the access of your content. This is useful if you need a member area, a private section at your blog or you want that other people can write at your blog but not everywhere.
Including all post types, taxonomies and files by creating user groups. Just assign the content you want to restrict and your registered users which should have access to a group. From now on the content is only accessible and writable for the specified group.
Anti-Spam - Do not use a Captcha
Anti-Spam: Spam Protection (Free)
https://wordpress.org/plugins/stop-spammer-registrations-plugin/
Stop spam emails, spam comments, spam registration, and spam bots and spammers in general. Run diagnostic tests, view activity and more. Lightweight.
Wordpress Zero Spam (Free)
https://wordpress.org/plugins/zero-spam/
Captchas introduce additional lag, the above is a far better solution. If zero-spam doesn’t work for you, find another captchaless option in the Wordpress plugin directory. Always seek to minimize calls to third party websites.
If zero-spam isn’t working for you, try to find another non-captcha anti-spam plugin.
Fullworks Anti-Spam (Free)
https://wordpress.org/plugins/fullworks-anti-spam/
Fluent Comments (Free)
https://wordpress.org/plugins/fluent-comments/
Lightweight Fluent anti-spam plugin for comments.
Anti-Spam Reloaded (Free)
https://wordpress.org/plugins/anti-spam-reloaded/
Fluent Forms Anti-Spam (Paid)
https://wpmanageninja.com/wp-fluent-form/wp-fluent-forms-block-spams/
Form Plugins
Fluent Forms (Free)
https://wordpress.org/plugins/fluentform/
Full featured lightweight form plugin
Fluent Forms Anti-Spam (Paid)
https://wpmanageninja.com/wp-fluent-form/wp-fluent-forms-block-spams/
Cforms2 (Free)
https://wordpress.org/plugins/cforms2/
Ultra-lightweight forms plugin. It’s just 220 KB for the entire plugin, which is very, very light. Flexible and powerful form builder plugin, covering a variety of use cases and features.
Contact Coldform (Free)
https://wordpress.org/plugins/contact-coldform/
Extremely lightweight (although barebones) form plugin, very well optimized. It even works without any javascript!
Disqus
Lazy Load Disqus Comments (Free)
https://wordpress.org/plugins/disqus-conditional-load/
Push Notifications
Zestpush (Free)
https://wordpress.org/plugins/zestpush-web-push-notifications/
Completely free push notifications plugin when self-hosted.
FCM Push Notification (Free)
https://wordpress.org/plugins/fcm-push-notification-from-wp/
Entirely free push notification plugin which hooks into Google Firebase (Generous Free plans with a paid tier for over 50k monthly users).
Ultimate Push Notifications (Free)
https://wordpress.org/plugins/ultimate-push-notifications/
Integrates with Google Firebase, the plugin is entirely free, and ultra-lightweight (~300 kb for the entire plugin).
Push Notifications For Web (Free)
https://wordpress.org/plugins/push-notifications-for-web/
Free Push Notification plugin that integrates with Google Firebase.
Push Notification for Post and BuddyPress(Free)
https://wordpress.org/plugins/push-notification-for-post-and-buddypress/
Entirely free push notification plugin that hooks into major notification providers (firebase, onesignal, etc)
WhatsApp Push Notifications
Indigital Web Push Notifications (Free)
https://wordpress.org/plugins/indigitall-web-push-notifications/
Unlimited free push notifications over WhatsApp.
OneSignal (Free and Pro)
https://wordpress.org/plugins/onesignal-free-web-push-notifications/
Visitors opt-in to receive push notifications when you publish a new post. Visitors receive these notifications even after they’ve left your website, thus driving re-engagement.
You can configure notification delivery at preset intervals, create user segments, and customize the opt-in process for visitors.
OneSignal’s free plan allows targeting up to 10,000 subscribers with push notifications.
Avatars
Simple Local Avatars (Free)
https://wordpress.org/plugins/simple-local-avatars/
Adds an avatar upload field to user profiles if the current user has media permissions. Generates requested sizes on demand just like Gravatar! Simple and lightweight.
Galleries
Responsive Lightbox (Free)
https://wordpress.org/plugins/responsive-lightbox/
Performant Popup and Gallery Plugin
Syntax Highlighter
Prismatic (Free)
https://wordpress.org/plugins/prismatic/
The only 3-in-1 syntax highlighter! Display beautiful code snippets with Prism.js, Highlight.js, or plain code escaping.
Bulk Page Generation
Bulk Page Generator (Free)
https://wordpress.org/plugins/bulk-page-generator/
Bulk Page Generator can generate multiple pages simultaneously. Big time saver.
Note: I recommend using this on staging or dev and then pushing to production (live). Bulk Page Generation can be resource intensive.
Sitewide Notices
Sitewide Notice WP (Free)
https://wordpress.org/plugins/sitewide-notice-wp/
Free lightweight sitewide notice plugin.
Sliders
Slider Pro (Free)
https://wordpress.org/plugins/sliderpro/
Lightweight free slider plugin with premium features built in.
Smart Slider 3 (Free and Pro)
https://wordpress.org/plugins/smart-slider-3/
Lightweight slider with a bunch of features.
Popups
Popup Maker (Free)
https://wordpress.org/plugins/popup-maker/
Lightweight popup plugin
Ultimate Lightbox (Free)
https://wordpress.org/plugins/ultimate-lightbox/
Lightweight Popup plugin
FancyBox (Free)
https://wordpress.org/plugins/fancybox-for-wordpress/
Seamlessly integrates FancyBox into your blog: Upload, activate, and you’re done. Additional configuration optional.
You can easily customize almost anything you can think about fancybox lightbox: the border, margin width and color, zoom speed, animation type, close button position, overlay color and opacity and even more advanced option like several options to group images into galleries.
Food Ordering
RestroPress (Free)
https://wordpress.org/plugins/restropress/
Free food ordering system.
Surveys
NgSurvey (Free)
https://wordpress.org/plugins/ngsurvey/
Free survey plugin. Disable it on pages it is not being used on.
FAQs
Ultimate FAQ Solution (Free)
https://wordpress.org/plugins/ultimate-faq-solution/
Lightweight FAQ Plugin.
Private Messaging
Better Messages (Free)
https://wordpress.org/plugins/bp-better-messages/
Better Messages – is realtime private messaging system for WordPress, BuddyPress, BuddyBoss Platform, Ultimate Member, PeepSo and any other WordPress site.
Appointments and Meetings
Ultimate Appointment Scheduling (Free and Pro)
https://wordpress.org/plugins/ultimate-appointment-scheduling/
The free version has almost every feature unlocked.
The premium version has these additional features, which I personally don’t find necessary, but here’s the list:
1. Accept mandatory or optional payments for appointments either via PayPal or WooCommerceAdd reCAPTACHA to your form, to help prevent spam
Option to require login to WordPress before being able to create an appointment
Additional booking form layout option
Labelling options
Customize the look of your form with an array of styling options to help you fit it in seamlessly with the rest of your site
Learning Management Systems (LMS)
LearnDash (Paid)
LearnDash is a performant LMS plugin. Like almost every plugin, it comes with unused CSS and JS that must be removed, however it uses a low number of database calls, so once the CSS and JS are optimized, it performs very well.
To optimize LearnDash’s CSS and JS, please refer to the Remove Unused CSS, Javascript Delay, Javascript Defer, and Asset Unloading sections.
Team Members
WP Team (Free)
https://wordpress.org/plugins/ht-team-member/
Lightweight Free Team Member Plugin
Progress Bars
Progress Bars (Free)
https://wordpress.org/plugins/progress-bars/
Ultra Lightweight Free Progress Bars Plugin
Polls
Yop Poll (Free)
https://wordpress.org/plugins/yop-poll/
Lightweight basic polls
Democracy Poll (Free)
https://wordpress.org/plugins/democracy-poll/
Another lightweight basic polling plugin.
CrowdSignal (Free)
https://wordpress.org/plugins/polldaddy/
Lightweight poll plugin made by Automattic, the developers of Wordpress.
CP Polls (Free)
https://wordpress.org/plugins/cp-polls/
Lightweight Polls Plugin with advanced features. Tons and tons of features for a free poll plugin. It’s got more features than any of the free plugins listed so far.
The fact that their screenshots look like the plugin jumped straight out of 2002 is not encouraging, but give it a try to see if it fits your needs. Can likely customize the polls to look modern.
Quizzes
Involve Me (Free)
https://wordpress.org/plugins/involve-me/
CodeVery Quiz (Free)
https://wordpress.org/plugins/codevery-quiz/
Free lightweight plugin to make beautiful quizzes
Interactive Content
H5P (Free)
https://wordpress.org/plugins/h5p/
https://h5p.org/content-types-and-applications
Free Open Source plugin that can be used to create any interactive content. Quizzes, Games, Polls, Sliders, Image Galleries, Flash Cards, Collages, Charts, Accordions, Timelines, Summaries, Interactive Videos, Presentations and more.
Charts
M-Chart (Free)
https://wordpress.org/plugins/m-chart/
Free Lightweight Chart plugin
Easy Charts (Free)
https://wordpress.org/plugins/easy-charts/
Free Chart Plugin.
WP Charts and Graphs (Free)
https://wordpress.org/plugins/wp-charts-and-graphs/
Free Simple Chart Plugin
SQL Chart Builder (Free)
https://wordpress.org/plugins/sql-chart-builder/
Build Charts from SQL Queries
Accordion
Lightweight Accordion (Free)
https://wordpress.org/plugins/lightweight-accordion/
Ultra-lightweight accordion plugin. The entire plugin is 10 KB, and uses no javascript.
Disclaimers
Disclaimify (Free)
https://wordpress.org/plugins/disclaimify/
Directories
Simple Directory Listing (Free)
https://wordpress.org/plugins/sirve/
Simple Directory Listing plugin
Recipes
RecipePress Reloaded (Free)
https://wordpress.org/plugins/recipepress-reloaded/
RecipePress Reloaded is a lightweight, powerful and very flexible tool to manage your blog’s recipe collection. It was designed with the editor in mind and created for easy and fast usage.
Mediavine Create (Free)
https://wordpress.org/plugins/mediavine-create/
Slightly heavier free Recipe plugin. Great templates.
Blossom Recipe Maker (Free)
https://wordpress.org/plugins/blossom-recipe-maker/
Free Recipe plugin
Text Messaging
Texteller (Free)
https://wordpress.org/plugins/texteller/
Texteller is an all-in-one text message integration solution for WordPress, supporting multiple third-party SMS and messaging gateways.
Note: Hasn’t been updated in a while, check compatibility/functionality on a staging site.
Patreon
Patreon Connect (Free)
https://wordpress.org/plugins/patreon-connect/
The Lightweight Official Patreon Plugin.
Lightweight Youtube Player
Faster Youtube Embed (Free)
https://wordpress.org/plugins/faster-youtube-embed/
Faster YouTube embed is a powerful solution for embedding YouTube videos into your WordPress site that is exceptionally quick, straightforward, and easy to use.
WP Youtube Lyte (Free)
https://wordpress.org/plugins/wp-youtube-lyte/
WP YouTube Lyte allows you to lazy load your video’s, by inserting responsive “Lite YouTube Embeds”. These look and feel like normal embedded YouTube, but only call the “fat” YouTube-player when clicked on, thereby reducing download size & rendering time substantially
Real Estate
Essential Real Estate (Free)
https://wordpress.org/plugins/essential-real-estate/
There are full features needed for a real estate website, easy to customize and overwrite templates. Allow to manage property listings and submit property via back-end and front-end. Supported global payment, build market, agent management,…etc.
FREE plugins but already all PREMIUM FEATURES.
Addons (Free)
https://plugins.g5plus.net/ere/add-ons/
Essential Real Estate Free addons.
Real Estate Manager (Free)
https://wordpress.org/plugins/real-estate-manager
Instagram Feed
HT Instagram Feed (Free)
https://wordpress.org/plugins/ht-instagram/
Free lightweight Instagram feed.
Google Social Login
Login With Google (Free)
https://wordpress.org/plugins/login-with-google/
Lightweight Google Social Login plugin.
Podcasting
Seriously Simple Podcasting (Free)
https://wordpress.org/plugins/seriously-simple-podcasting/
Relatively lightweight podcasting plugin.
Powerpress (Free)
https://wordpress.org/plugins/powerpress/
Full featured podcasting plugin. (Warning: Heavy, especially crucial to delay its javascript).
PowerPress enables you to publish and manage one or multiple podcasts directly from your WordPress website. Strengthen your brand and reach audiences across all major platforms, such as Apple Podcasts, Spotify, YouTube Music, Amazon Music, and more.
Comment Subscribing
Subscribe To Comments Reloaded (Free)
https://wordpress.org/plugins/subscribe-to-comments-reloaded/
Subscribe to Comments Reloaded is a robust plugin that enables commenters to sign up for e-mail notification of subsequent entries. The plugin includes a full-featured subscription manager that your commenters can use to unsubscribe to certain posts or suspend all notifications.
Allows administrators to enable a double opt-in mechanism, requiring users to confirm their subscription clicking on a link they will receive via email or even One Click Unsubscribe.
Buy Me A Coffee Button
Buy Me A Coffee (Free)
https://wordpress.org/plugins/buymeacoffee/
Lightweight Buy Me A Coffee Plugin.
Google Maps
Google Maps Lite (Freemium)
https://wordpress.org/plugins/advanced-google-maps-lite/
Lightweight google maps plugin.
CBX Google Map (Freemium)
https://wordpress.org/plugins/cbxgooglemap/
Another lightweight Google maps plugin.
Manually optimize Google maps (Free)
The best way to optimize Google maps is by taking a screenshot of your map location. You can compress the image as much as possible, which will prevent any calls to google’s third party domain and means your site will load 0 additional javascript to display the map.
Social
Social Sharing
HT Social Share (Free)
https://wordpress.org/plugins/ht-social-share/
Lightweight Completely Free Social Sharing Plugin
Hubbub Lite (Freemium)
https://wordpress.org/plugins/social-pug/
Very lightweight social sharing plugin.
Shared Counts (Free)
https://wordpress.org/plugins/shared-counts/
Shared Counts is a WordPress social media share buttons plugin. Sharing buttons increase traffic and engagement by helping readers share your posts and pages to their friends on social media.
AddToAny Share Buttons (Free)
The AddToAny Share Buttons plugin for WordPress increases traffic & engagement by helping people share your posts and pages to any service. Services include Facebook, Mastodon, Pinterest, WhatsApp, LinkedIn, Threads, Bluesky, Tumblr, Reddit, X, WeChat, and many more sharing and social media sites & apps.
Social Autoposting
WP Scheduled Posts (Free)
https://wordpress.org/plugins/wp-scheduled-posts/
Lightweight Social Auto Poster plugin.
Note: Make sure you selectively disable it in the frontend with any of the plugins for that functionality listed below(Asset Cleanup Pro, Perfmatters Script Manager, Freesoul plugin deactivator, etc.). It only needs to run in the backend.
Gamification
Gamipress (Freemium)
Lightweight Gamification plugin
Tables
Ninja Tables (Freemium)
https://wordpress.org/plugins/ninja-tables/
Lightweight Table Plugin.
Reviews
Site Reviews (Free)
https://wordpress.org/plugins/site-reviews/
Amazing free, lightweight open source review plugin. Works for regular site reviews as well as Woocommerce/EDD. It has many more integrations as well, all free.
Donations
WC Donation Platform (Free)
https://wordpress.org/plugins/wc-donation-platform/
Awesome, completely free open source donation plugin. Extremely well optimized(the entire plugin is 230 kb), great feature set.
Charts
Ninja Charts (Freemium)
https://wordpress.org/plugins/ninja-charts/
Performant Charts plugin
Cookie Notices
Cookie Dough (Free)
https://wordpress.org/plugins/cookie-dough-compliance-and-consent-for-gdpr/
Ultra lightweight Cookie Notice GDPR compliance banner. Completely free.
WP Full Picture (Free and Pro)
https://wordpress.org/plugins/full-picture-analytics-cookie-notice/
The free version has practically every feature unlocked. Local Analytics and Cookie Consent, fully featured. Very lightweight. The free version even has Woocommerce tracking.
Smart Cookie Kit (Free)
https://wordpress.org/plugins/smart-cookie-kit/
Neat little plugin with decent configurability, it can block all scripts until the user consents to cookies. Lightest weight cookie plugin out there, the entire plugin is less than 100 kb.
Cookie Fox (Free)
https://wordpress.org/plugins/cookiefox/
Completely free light weight cookie banner. Light on features, but useful.
Iubenda (Free and Pro)
https://wordpress.org/plugins/iubenda-cookie-law-solution/
Very lightweight cookie compliance plugin, tons and tons of features, free version is solid but has a monthly traffic limit. This is the best option.
https://www.iubenda.com/en/help/379-basic-license-limits
Lightweight Cookie Consent box (Free)
https://wordpress.org/plugins/cookie-consent-box/
Lightweight Cookie Notice by DAEXT
https://codecanyon.net/item/lightweight-cookie-notice/30970799
Free version
https://wordpress.org/plugins/lightweight-cookie-notice-free/
This is the lightest-weight cookie notice plugin I’ve found, it adds only 8 KB to your page weight.
Cookie Notice and Compliance (Free)
https://wordpress.org/plugins/cookie-notice/
Another lightweight cookie notice plugin.
Machete (Free)
https://wordpress.org/plugins/machete/
Machete has a good amount of features, one of them being a performance optimized cookie notice.
Server Level Optimizations
Apache (Free)
Htaccess (Free)
Perishable Press Article
https://perishablepress.com/stupid-htaccess-tricks/
Htaccess Optimizations
https://gist.github.com/seoagentur-hamburg/c96bc796764baaa64d43b70731013f8a
https://awesomeopensource.com/project/phanan/htaccess
More htaccess security headers
https://github.com/drego85/htpw
Apache MPM Settings (Free)
Prefork is the default. You can also test the Worker MPM or Event MPM with your site, theoretically they should offer performance benefits. I haven’t tested either extensively. The event MPM should be the fastest of the 3 if your Wordpress install works with it.
You want to increase these values in your httpd.conf configuration file:
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers xxxx
MinSpareServers xxxx
MaxSpareServers xxxx
ServerLimit xxxx
MaxClients xxxx
MaxRequestsPerChild xxxxx
</IfModule>
# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers xxxx
MaxClients xxxx
MinSpareThreads xxxx
MaxSpareThreads xxxx
ThreadsPerChild xxxx
MaxRequestsPerChild 0
</IfModule>
The values you set here are heavily dependent on the amount of RAM allotted to your server. My server had 12 GB of RAM, so I was able to set very large values here. Tweak the values incrementally to increasingly large values up to a max of 1024(where the xxxx are), again, depending on the amount of available RAM. These values are probably too high, but in my testing 1024 had the best performance.
Do this for everything except MaxRequestsPerChild under prefork MPM(leave the worker MPM one at 0) until you either max your server resources, or hit 1024.
You should look at the graphs for your RAM and CPU utilization in your hosting provider’s backend panel. Make sure you aren’t going over whatever your host deems acceptable, and definitely make sure it isn’t hitting 100%. The max you would want to go on either of them would likely be 80%, but aim for 60% max utilization. You want to leave room for spikes due to heavy load from a large influx of simultaneous users. If your site becomes popular all of a sudden because of a link from a big blog, or a social media influencer or some other traffic source, the usage may spike.
Apache tuning documentation
https://httpd.apache.org/docs/2.4/misc/perf-tuning.html
Awesome Open Source Apache Server Configs
https://awesomeopensource.com/project/h5bp/server-configs-apache
Hostens Article
https://www.hostens.com/knowledgebase/optimize-apache-server/
Host advice article
https://hostadvice.com/how-to/web-hosting/apache/how-to-tune-and-optimize-performance-of-apache/
Bob Cares Apache optimization article
https://bobcares.com/blog/speed-up-apache/
Tecmint Apache Performance Tuning Article
https://www.tecmint.com/apache-performance-tuning/
Quickhost Apache Tuning Article
https://www.quickhost.uk/blog/2021/09/22/how-to-tune-apache-web-server-for-performance/
8G Firewall (Free)
https://perishablepress.com/8g-firewall/
Lightweight highly configurable firewall
Apache2Buddy (Free)
https://github.com/richardforth/apache2buddy
What is Apache2Buddy?
Use the Apache2Buddy script to help make recommendations for changes to the Apache® web server configuration that assist with performance and stability. Apache2Buddy has no impact on the server itself and makes no changes. After the script runs, it suggests Apache fixes that you can examine and consider applying.
Apache2Buddy checks at least the following areas of concern:
PHP® memory limits
Memcache
MaxClients
Memory usage
Max potential memory usage
Percentage of total RAM allocated to Apache
MaxRequestWorkers
How to tune Apache in seconds with apache2buddy.pl
This is a fork of Apache2Buddy.
https://www.techrepublic.com/article/how-to-tune-apache-in-seconds-with-apache2buddy-pl/
Other Apache Resources (Free)
Apache Load Testing
https://awesomeopensource.com/project/alexfernandez/loadtest
Apache Server Hardening
https://www.tecmint.com/apache-security-tips/
LibModSecurity
https://kifarunix.com/configure-libmodsecurity-with-apache-on-centos-8/
Htaccess Editor (Free)
https://wordpress.org/plugins/wp-htaccess-editor/
Edit the htaccess file directly within the WP Admin Dashboard.
Nginx (Free)
https://github.com/fcambus/nginx-resources
Nginx Configuration files
https://github.com/pothi/wordpress-nginx/
Awesome NGINX
https://github.com/agile6v/awesome-nginx
Awesome NGINX Security
https://github.com/wallarm/awesome-nginx-security
WP Rocket NGINX configuration
https://github.com/SatelliteWP/rocket-nginx
Premade configuration for NGINX by the WP Rocket team
Mod Pagespeed Module
https://www.tecmint.com/install-mod_pagespeed-to-boost-apache-nginx-performance/#
Nginx Tuning Repo
https://github.com/denji/nginx-tuning
Test on a staging environment!
Cache Control (Free)
https://wordpress.org/plugins/cache-control-by-cacholong/
Advanced control NGINX’s FastCGI Cache. Also allows scheduled cache purging via Cronjobs.
TCP BBR
Medium
https://atoonk.medium.com/tcp-bbr-exploring-tcp-congestion-control-84c9c11dc3a9
BBR Quick Start
https://github.com/google/bbr/blob/master/Documentation/bbr-quick-start.md
Cloudflare + NGINX
https://blog.cloudflare.com/http-2-prioritization-with-nginx/
Nginx Configuration Generators
Nginxconfig.io
https://github.com/digitalocean/nginxconfig.io
Crossplane
https://github.com/nginxinc/crossplane
Reliable and fast NGINX configuration file parser and builder
Nginx Configuration Formatters
Nginx Config Formatter Go
https://github.com/rwx------/nginxConfigFormatterGo
Nginx Config Formatter
https://github.com/1connect/nginx-config-formatter
Nginx Minify Conf
https://github.com/lovette/nginx-tools/tree/master/nginx-minify-conf
Static Analyzers
Gixy
https://github.com/yandex/gixy
Syntax Highlighting
SSLSecure.vim
https://github.com/chr4/sslsecure.vim
NGINX.vim
https://github.com/chr4/nginx.vim
Vim
https://github.com/nginx/nginx/tree/master/contrib/vim
NGINX vhost Traffic Status Module
https://github.com/vozlt/nginx-module-vts
Nginx Virtual host traffic status module. Extensive NGINX vhost information, including cache hit rate.
Nginx HTTP2 Server Push
https://www.nginx.com/blog/nginx-1-13-9-http2-server-push/
CPU Pinning and Numa Optimization
Adjusting NGINX's Worker Processes
The number of Nginx worker processes should ideally match the number of CPU cores available on your server. This ensures that each worker process can run on a separate CPU core, optimizing CPU usage.
You can set the worker_processes directive in Nginx’s configuration file (nginx.conf) to the number of CPU cores. For example, if your server has 4 CPU cores, you can set worker_processes 4.
It's important to monitor the performance after making these changes and adjust if necessary. Sometimes setting worker processes to a higher number than the CPU cores may yield better performance, especially for serving static content.
Managing Worker Connections
The worker_connections setting defines the maximum number of connections each worker can handle. It’s located in the events block of the nginx.conf file.
Increasing worker_connections allows each worker to handle more simultaneous connections, which can improve throughput. A common initial value to try is 1024.
As with worker processes, it’s essential to monitor server performance after making changes to worker_connections and adjust as needed.
Utilizing Keepalive Connections
Keepalive connections can be enabled in nginx.conf to maintain persistent connections, reducing CPU and network overhead associated with opening and closing connections frequently.
Optimizing for NUMA Architecture
If your server uses a NUMA architecture, ensuring that Nginx processes are using local memory can reduce memory access latency.
Tools like “numactl” can be used to run Nginx with memory allocated from specific NUMA nodes, though this is a more advanced optimization that requires a good understanding of your server’s NUMA configuration.
Linode’s Configuration suggestions
https://www.linode.com/docs/guides/getting-started-with-nginx-part-2-advanced-configuration/
Nginx SSL Connection Speed Optimization
Nginx Official Blog Article
https://www.nginx.com/blog/improve-seo-https-nginx/
RT Camp Article
https://rtcamp.com/tutorials/nginx/ssl-pci-compliance-performance/
Changing Nginx Ciphers for better performance
Nginx’s default set of ciphers includes:
ssl_ciphers HIGH:!aNULL:!MD5;
This enables the strong “Diffie–Hellman_key_exchange algorithm” which is slow. Since PCI compliance doesn’t need this algorithm, we can safely disable it by explicitly defining ssl_ciphers.
ssl_ciphers HIGH:!aNULL:!MD5:!kEDH;
Turbocharging Nginx SSL TTFB/Latency
https://linuxblog.io/nginx-tuning-tips-tls-ssl-https-ttfb-latency/
7G Firewall for Nginx
https://perishablepress.com/7g-firewall-nginx/
Note: Jeff Starr is working on an update for the updated 8G firewall which will be compatible with NGINX(currently only compatible with Apache), however there is no estimated release time for it yet.
A/B Testing with Nginx
https://www.nginx.com/blog/performing-a-b-testing-nginx-plus/
HTTP/3
Enable HTTP/3 for NGINX
https://codedamn.com/news/backend/leveraging-http3-with-nginx
Short walkthrough on how to enable HTTP/3 for all NGINX installs.
WordOPs (Free)
HTTP/3 is now available in WordOPs. Built in and auto-configured when you set up Wordpress via WordOPs.
OpenLiteSpeed (Free)
Linux Config Article
https://linuxconfig.org/openlitespeed-wordpress-installation
Big Dinosaur Article
https://blog.bigdinosaur.org/configuring-wordpress-openlitespeed/
How to Configure OpenLiteSpeed for Maximum WordPress Performance
https://www.uncleb.tech/how-to-configure-openlitespeed-for-maximum-wordpress-performance/
Webserver Control Panel Optimization
Medium Article
Optimize the OpenLiteSpeed Webadmin GUI
https://azdigi.com/blog/en/linux-server-en/web-server/how-to-optimize-openlitespeed-webadmin-gui/
Advanced Configuration
https://openlitespeed.org/kb/category/configuration/advanced-configuration/
PHP suEXEC Max Conn
https://docs.litespeedtech.com/lsws/cp/cpanel/tunings/
PHP suEXEC Max Conn specifies the maximum number of concurrent PHP processes that can be created by LSWS for each user when running PHP scripts in suEXEC mode. The default setting is 10.
Generally this should be a good enough limit for the shared hosting environment, since you may not want too many processes running for each account on a server with many accounts. However, if you do have a need to allow more PHP processes for each account, you can adjust the value from 10 to a higher number, such as 40, or 100
OpenLiteSpeed one click auto-configuration script for Wordpress
https://github.com/litespeedtech/ols1clk
OpenLiteSpeed tuning for large servers/high traffic sites
https://docs.litespeedtech.com/lsws/tuning-dedicated/
Pre-optimized OpenLiteSpeed Docker Images with a focus on PHP performance
https://github.com/sitepilot/docker-lsphp
Docker LSPHP (LSAPI + PHP) is a collection of optimized and extensible container images for running PHP applications in production.
All images are based on their Docker Runtime image, an optimized and extensible Ubuntu container image.
Ansible Playbooks for a pre-optimized OpenLiteSpeed stack for Wordpress
https://github.com/sitepilot/stack-openlitespeed
Ansible playbooks for provisioning optimized web servers for WordPress and Laravel. These playbooks are used by Autopilot (our cloud server control panel) and are perfect for:
Local development environments.
High-performance production servers (with caching).
HTTP/2 and HTTP/3
HTTP/2 and HTTP/3 work at the server level (as well as using a helper plugin) and the functionality must be enabled in your web server in order to take advantage of it.
HTTP/2 and HTTP/3 Explained
HTTP/2 Server Push allows for additional assets to be directly pushed to a visitor's browser without the need for subsequent HTTP requests to fetch them. Helping to even further reduce load times and help sites load more efficiently.
Github Article
https://alexandrehtrb.github.io/posts/2024/03/http2-and-http3-explained/
Thorough technical explanation of HTTP/2 and HTTP/3
SensePost Article
https://sensepost.com/blog/2021/adventures-into-http2-and-http3/
Another thorough technical breakdown with additional information
How To Enable HTTP/2
Apache and NGINX
https://www.linkedin.com/pulse/http2-apache-nginx-detailed-guide-samuel-akopyan/
Short Article on how to enable HTTP/2 for Apache and NGINX.
OpenLiteSpeed
https://www.litespeedtech.com/support/wiki/doku.php/litespeed_wiki:config:enable-http2
HTTP/2 Server Push Plugin
https://wordpress.org/plugins/http2-push-content/
Push / Pre-load all JS files in site with one simple option
Push / Pre-load all the CSS files in your website
Push / Pre-load other resources throughout the site or based on the page types
HTTP/3
Enable HTTP/3 for Apache
Apache currently has no native HTTP/3 module and therefore no native support. Apache can still take advantage of HTTP/3 if NGINX is configured as a reverse proxy once HTTP/3 support is enabled in NGINX.
Note: Apache can be paired with the HAProxy load balancer to enable HTTP/3 Support on Apache servers (HAProxy has native HTTP/3 support).
Enable HTTP/3 for NGINX
https://codedamn.com/news/backend/leveraging-http3-with-nginx
Short walkthrough on how to enable HTTP/3 for NGINX.
Enable HTTP/3 for OpenLiteSpeed
https://azdigi.com/blog/en/linux-server-en/web-server/enable-quic-http-3-on-openlitespeed/
Article on how to enable HTTP/3 for OpenLiteSpeed.
HTTP/2 and HTTP/3 Server Push (Free)
https://wordpress.org/plugins/better-resource-hints/
Free Server Push Plugin
SSL Performance Optimization (Free)
There are several areas to improve SSL connection (and general SSL traffic latency). Some of these may impact security in some small or great way.
(These are for ssl.conf using Apache)
Disable the Domain lookup, and allow Non-SNI to reach primary domain
SSLStrictSNIVHostCheck off
Instead of named hosts, use IP address for the :443 VHOST entry
Cache SSL Sessions
SSLSessionCache shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout 300
Allow for faster SSL Protocol order, general compatibility, medium security:
SSLProtocol all -SSLv3
SSLCipherSuite ALL:+HIGH:+TLSv1:!ADH:!EXP:!SSLv2:!MEDIUM:!LOW:!NULL:!aNULL
SSLHonorCipherOrder on
OCSP Stapling (speeds up SSL)
SSLUseStapling on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingCache shmcb:/run/ocsp(128000)
HSTS (can do preload so http:// requests become https:// requests in the browser
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Consider the following more advanced implementations:
HTTP/2 with HPACK
Brotli Compression
Other non-SSL issues that may help speed up connection
Another directive for Apache in httpd.conf
HostnameLookups Off
HAProxy SSL performance tweaks
https://www.suse.com/c/speeding-ssl-need-know-haproxy/
Additional SSL Performance Optimizations
Choose the right cipher suite
Enable session resumption
Tune TCP parameters
SuperUser Thread
https://superuser.com/questions/1066477/how-to-speed-up-ssl-connection-establishment
Nginx SSL Connection Speed Optimization
Nginx Official Blog Article
https://www.nginx.com/blog/improve-seo-https-nginx/
Turbocharging Nginx SSL TTFB/Latency
https://linuxblog.io/nginx-tuning-tips-tls-ssl-https-ttfb-latency/
Stack Overflow Thread
https://stackoverflow.com/questions/36672261/how-to-reduce-ssl-time-of-website
SSL caching should be on
HTTP Keep-Alives should be turned on so the connection is not dropped after each HTTP Request
Use the most recent TLS version
OCSP Stapling saves network trip to check cert is valid, using OCSP or CRL
Certificate Chain. You'll want a short certificate chain (ideal 3 cert long: your server, intermediary and the CAs root certificate).
Ciphers used. There are older and slower ciphers and faster and new ones. Can get complicated here really quickly but generally you should be looking for ECDHE ciphers for most clients (and preferable ECDHE...GCM ones) and want to specify that server order should be used so you get to pick the cipher used rather than the client.
Reduce TLS Handshake Time
Raaz Kumar Article
https://raazkumar.com/tutorials/nginx/improve-ssl-performance/
Baeldung’s SSL Overhead Optimization Tutorial
https://www.baeldung.com/cs/ssl-overhead-causes-countermeasures
HSTS SSL Preloading
CAUTION: If your site does not have a valid SSL certificate after you add your site to the preload list, it MUST have a valid SSL certificate to remain accessible. A site will be unreachable/inaccessible if the site does not have a valid SSL certificate.
Submission Requirements
If a site sends the preload directive in an HSTS header, it is considered to be requesting inclusion in the preload list and may be submitted via the form on this site.
In order to be accepted to the HSTS preload list through this form, your site must satisfy the following set of requirements:
Serve a valid certificate.
Redirect from HTTP to HTTPS on the same host, if you are listening on port 80.
Serve all subdomains over HTTPS.
In particular, you must support HTTPS for the www subdomain if a DNS record for that subdomain exists.
Note: HSTS preloading applies to all subdomains, including internal subdomains that are not publicly accessible.
Serve an HSTS header on the base domain for HTTPS requests:
The max-age must be at least 31536000 seconds (1 year).
The includeSubDomains directive must be specified.
The preload directive must be specified.
If you are serving an additional redirect from your HTTPS site, that redirect must still have the HSTS header (rather than the page it redirects to).
PHP Settings (Free)
If PHP 8 doesn’t have incompatibilities with the plugins you use, you should use 8-8.3. Always use the most updated version of PHP that you can. Use the newest version of MariaDB or MySQL as well.
PHP execution time should be increased to 300 seconds, input time increased to 300 seconds, input variables increased to 20000, memory limit set to 256 MB-768 MB of RAM. It is not advisable to allocate the entire portion of RAM allotted to your VPS, as doing so can cause performance issues/crash the server.
Enable Zlib output compression in PHP.ini
PHP Opcache
Increase OPcache memory to at least 512 MB, preferably 1024 or 2048 if your server has more ram. The max accelerated files limit should be increased as much as your server resources will allow, the cap is 100000.
Moving PHP session data to /dev/shm for improved performance
Zip up your WordPress site with a move of the PHP session data to /dev/shm! This will give you faster page loading speeds and great user experiences. Here’s how:
Find the php.ini file in the /etc directory.
Edit the file with a text editor.
Look for the line starting with "session.save_path".
Replace the current value with "/dev/shm".
“Performance Improvement: By moving PHP session data to /dev/shm, you are essentially storing this data in RAM. This can significantly speed up the read and write operations for session data, which can be beneficial for WordPress sites with high traffic and heavy session usage.
Considerations and Trade-offs:
RAM Usage
Since /dev/shm uses RAM, it's important to ensure that your server has enough memory. Storing session data in RAM will consume more memory, which could be an issue if your server is already memory-constrained.
Persistence
Data stored in /dev/shm is temporary and will be lost on reboot. This is generally fine for session data, which is temporary by nature, but it's something to keep in mind.
Scalability
If your WordPress site is served from multiple servers in a load-balanced environment, this approach may not be suitable unless you have a way to share session data across servers.
Security
Ensure that your /dev/shm partition is secured appropriately, as storing session data in a shared memory space can have security implications.
Extending PHP’s lifespan by increasing the “Max Idle Time” setting
Locate the PHP config file(php.ini). Edit the file and modify the “maxIdleTime” parameter. Increase its value to give PHP longer idle time. After updating the “maxIdleTime” value, save changes and apply them to the server.
Test Performance
Monitor the website’s performance after extending PHP’s lifespan. Check for better response times and site performance.
Improve front end performance with just one line of PHP
https://www.spacedmonkey.com/2023/06/29/improve-front-end-performance-with-just-one-line-of-php/
StashPHP Cache
WP Stash (Free)
https://github.com/inpsyde/WP-Stash
https://inpsyde.com/en/wordpress-caching-system-wpstash/
OPCache Manager (Free)
https://wordpress.org/plugins/opcache-manager/
OPcache statistics and management right in the WordPress admin dashboard.
Create Multiple Asynchronous PHP Processes To Speed Up Processing Time
Torque Mag Article
https://torquemag.io/2016/01/use-asynchronous-php-wordpress/
MySQL performance optimizations (Free)
Reduce Auto-loaded Data
https://kinsta.com/knowledgebase/wp-options-autoloaded-data/
Most plugins will set many of their database options to autoload at all times, which hurts your database performance, which also uses more server resources. Reducing the auto-loaded data as much as possible without harming any functionality will improve your database performance.
Please test disabling any database options on a staging server, this could potentially break your site when optimizing and testing. Always test on a staging server when modifying autoload database options.
Advanced Database Cleaner (Free and Pro)
https://wordpress.org/plugins/advanced-database-cleaner/
Many database optimization plugins can modify auto-load options. I use the Advanced Database Cleaner plugin, but there are many options available.
Database Cleaner (Free)
https://wordpress.org/plugins/database-cleaner/
Another free option for managing database options autoload status.
Automatic Database Tuning
MySQL Tuner (Free)
https://github.com/major/MySQLTuner-perl
MySQLTuner is a script written in Perl that allows you to review and benchmark a MySQL installation quickly and make adjustments to increase performance and stability. The current configuration variables and status data are retrieved and presented in a brief format along with some basic performance suggestions.
Releem (Paid)
Releem is a paid MySQL optimization service that dynamically adjusts your MySQL configuration to match your server resources and sets the values appropriately. It actively measures Database load and adjusts settings accordingly. MySQL Tuner does not actively monitor and tune the configuration based on Database load dynamically as Releem does.
Enable MySQL Query Cache
https://mariadb.com/kb/en/query-cache/
https://www.freecodecamp.org/news/the-ultimate-guide-to-high-performance-wordpress/
(Ctrl+f for query cache on the free code camp page)
Set in memory table size limits
Set In-memory Table Size Limits: complex queries will cause the SQL server to create temporary tables. The SQL server will attempt to create tables in memory up to a certain size for performance. It is important to set the max size to an appropriate value to avoid creating on-disk temporary tables.
The variables that control this behavior are tmp_table_size and max_heap_table_size. You can compare the number of internal on-disk temporary tables created to the total number of internal temporary tables created by comparing Created_tmp_disk_tables and Created_tmp_tables values.
Set the buffer pool size
https://www.freecodecamp.org/news/the-ultimate-guide-to-high-performance-wordpress/
“The buffer pool is the area of memory that MariaDB uses to cache data and indexes. It is important to configure the buffer pool size appropriately based on the amount of available memory and the size of the database. A good rule of thumb is to set the buffer pool size to about 40% of available memory, but keep in mind this percentage is typically applicable only on stand-alone database servers. The buffer pool size can be controlled using the innodb_buffer_pool_size variable. See https://mariadb.com/kb/en/innodb-buffer-pool/ for more information.
One way to analyze buffer pool performance is by observing the innodb_buffer_pool_wait_free status variable. If it is increasing, then you don't have enough buffer pool (or your flushing isn't occurring frequently enough). In this case, you should set the innodb_buffer_pool_size variable higher if your system resources allow for it.”
Check these links for more information:
https://mariadb.com/kb/en/server-system-variables/#tmp_table_size
https://mariadb.com/kb/en/server-system-variables/#max_heap_table_size
Manual optimization and learning resources
https://www.percona.com/blog/mysql-101-parameters-to-tune-for-mysql-performance/
https://dev.mysql.com/doc/refman/8.0/en/optimization.html
https://www.turing.com/kb/best-practices-for-mysql-performance-tuning
https://www.infoworld.com/article/3675552/10-more-essential-mysql-performance-tuning-tips.html
https://tecadmin.net/mysql-performance-tuning-tips/
https://dev.mysql.com/doc/mysql-perfschema-excerpt/8.0/en/performance-schema.html
https://phoenixnap.com/kb/improve-mysql-performance-tuning-optimization
https://medium.com/releem/optimizing-mysql-for-peak-performance-a-comprehensive-guide-881ba1ad3ee1
Building the best INDEX for a given SELECT
https://mysql.rjweb.org/doc.php/index_cookbook_mysql
You have a SELECT and you want to build the best INDEX for it. This blog is a "cookbook" on how to do that task.
How To Fix Slow MySQL queries
https://www.kevinleary.net/blog/fixing-slow-queries-wordpress-database/
Partitioning Tables
Table partitioning divides large tables into smaller, more manageable pieces, making it easier to query and manage data. This can improve query performance by reducing the amount of data scanned during queries.
Partition by Range/List/Hash/Key
You can partition tables by range, list, hash, or key, depending on your data and query patterns. For example, partitioning by date range can be useful for tables that store historical data.
Indexes on Partitions
Ensure that each partition is properly indexed to maximize performance gains.
Partitioning can significantly reduce query times for large tables by limiting the amount of data that needs to be scanned.
Temporary Tables and Memory Tables
Temporary tables and memory tables can be used for intermediate calculations or to store transient data that doesn't need to be persisted to disk. Memory tables, in particular, are stored in RAM and are very fast.
Memory Engine
Use the MEMORY storage engine for tables that store small amounts of frequently accessed data. These tables reside in memory, allowing for very fast access.
Temporary Tables
Use temporary tables for complex queries that require multiple steps. Temporary tables are created on the fly and dropped after the session ends, reducing the need to repeatedly query the same data.
These techniques can offload complex operations from your main tables and speed up query processing.
Read Replicas
Set up MySQL read replicas to handle read-only queries, which can reduce the load on your primary database server.
Official MySQL Documentation
https://dev.mysql.com/doc/refman/8.4/en/replication-solutions-performance.html
Replication Explainer
https://dev.mysql.com/doc/refman/8.4/en/replication.html
PlanetScale Article
https://planetscale.com/blog/what-is-mysql-replication-and-when-should-you-use-it
Medium Article
Solid article with configuration examples.
Further Research
AI Chatbots can relay a wealth of information on the topic of Read Replicas, and also assist with implementation.
Asynchronous Processing For Read Operations
Medium Article
Tarantool (Free)
https://www.tarantool.io/en/doc/latest/platform/ddl_dml/sql/improving_mysql/
Tarantool is an interesting way to improve MySQL performance and also assists with Database scaling performance.
MySQL Connector for Tarantool
https://github.com/tarantool/mysql
Database Sharding
Split your data across multiple databases (shards) based on a shard key. This can reduce the size of each database, making queries faster and reducing the load on any single server.
These approaches allow for horizontal scaling, which is essential for handling massive amounts of traffic and data.
PlanetScale Article
https://planetscale.com/blog/how-to-scale-your-database-and-when-to-shard-mysql
Vitess (Free)
https://github.com/vitessio/vitess
Vitess is a database clustering system for horizontal scaling of MySQL through generalized sharding.
By encapsulating shard-routing logic, Vitess allows application code and database queries to remain agnostic to the distribution of data onto multiple shards. With Vitess, you can even split and merge shards as your needs grow, with an atomic cutover step that takes only a few seconds.
MySQL Performance Cheat Sheet
https://severalnines.com/blog/mysql-performance-cheat-sheet/
InnoDB Buffer Pool Instance Division
Percona Article
https://www.percona.com/blog/how-many-innodb_buffer_pool_instances-do-you-need-in-mysql-8/
If you have a high workload and a multi-core system, consider dividing the InnoDB buffer pool into multiple instances. This can help reduce contention for memory structures within InnoDB. To do this, adjust the innodb_buffer_pool_instances parameter according to your system's cores and workload.
Tuning InnoDB Log File Size
Releem Article
https://releem.com/docs/mysql-performance-tuning/innodb_log_file_size
The size of the InnoDB log files (innodb_log_file_size) has a significant impact on performance. Larger log files can reduce disk I/O for write-intensive workloads but might increase recovery time after a crash. Balancing the log file size based on the nature of your workload can provide performance benefits.
Thread Pool Utilization
For servers handling many connections and queries, using a thread pool can improve performance. Instead of one thread per connection, MySQL can manage a pool of threads and efficiently handle numerous connections.
Optimize Join Buffers
Releem Article
https://releem.com/docs/mysql-performance-tuning/join_buffer_size
When MySQL performs joins, it uses a join buffer. The size of this buffer (join_buffer_size) determines how much data MySQL can handle at once during a join operation. Increasing the size of the join buffer can improve the performance of non-indexed joins.
MySQL Reference Manual
https://dev.mysql.com/doc/refman/8.0/en/buffering-caching.html
Query Cache Sizing and Usage
MySQL query cache reference manual
https://dev.mysql.com/doc/refman/5.7/en/query-cache.html
In versions of MySQL where query cache is still supported, properly sizing (query_cache_size) and configuring the query cache can lead to performance improvements for read-heavy workloads. However, note that the query cache is deprecated in later versions of MySQL and removed in MySQL 8.0.
Fine-tuning Sort and Read Buffers
Releem Sort Buffer Size Article
https://releem.com/docs/mysql-performance-tuning/sort_buffer_size
MySQL uses sort buffers (sort_buffer_size) and read buffers (read_buffer_size) during various operations. Adjusting these buffers can improve performance, especially for complex sorting and reading operations.
MySQL Compression
MySQL reference manual article
https://dev.mysql.com/doc/refman/8.0/en/innodb-page-compression.html
For tables with large amounts of text or blob data, consider using MySQL's compression capabilities to reduce disk space and improve I/O efficiency.
Use of Covering Indexes
Toadworld article
https://blog.toadworld.com/2017/04/06/speed-up-your-queries-using-the-covering-index-in-mysql
Covering indexes include all the fields required by a query. They can dramatically improve query performance as the database can retrieve all the necessary data from the index without accessing the table data.
Optimizing Subqueries
MySQL Reference Manual article
https://dev.mysql.com/doc/refman/8.0/en/subquery-optimization.html
MySQL Tutorial Article
https://www.mysqltutorial.org/mysql-basics/mysql-subquery/
In MySQL, subqueries can sometimes be inefficient. Rewriting queries to avoid subqueries or transform them into joins can lead to performance improvements.
Partitioning Large Tables
Sling Academy Article
https://www.slingacademy.com/article/table-partitioning-in-mysql-8-a-practical-guide/
For very large tables, consider using table partitioning. This divides a table into parts and can improve query performance, especially for range-based queries.
Data Geek Lab Article
https://datageeklab.com/mastering-mysql-partitioning/
Optimizing Temporary Tables and Disk Swaps
MySQL Reference Manual Article
https://dev.mysql.com/doc/refman/8.0/en/optimize-table.html
Keep an eye on the use of disk-based temporary tables. If possible, tune your server so that most temporary tables are created in memory (tmp_table_size and max_heap_table_size).
Disabling Performance Schema
MySQL Reference manual Article
https://dev.mysql.com/doc/refman/8.0/en/performance-schema-startup-configuration.html
If you're not using MySQL's performance schema, consider disabling it to save resources. This is especially useful for systems with limited resources.
Binary Log Group Commit
MySQL Reference Manual Article
https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html
For replication setups, optimizing the binary log group commit settings can significantly reduce replication lag and improve the overall performance of the master server.
Resource Groups for Priority Tuning
Resource Group Tuning MySQL Reference Manual Article
https://dev.mysql.com/doc/refman/8.0/en/resource-groups.html
Use MySQL 8.0's Resource Groups feature to assign high-priority queries to specific processors or processor cores, improving performance for critical queries.
Linux Blog MySQL Performance Tuning Article
Very extensive article with some unique optimization strategies.
Database Query Optimization Analysis
Improve WP Query Performance When Using External Object Cache
https://www.spacedmonkey.com/2023/01/17/improve-wp_query-performance-if-using-external-object-cache/
Redash (Free)
https://github.com/getredash/redash
SQL users leverage Redash to explore, query, visualize, and share data from any data sources. Their work in turn enables anybody in their organization to use the data. Redash supports more than 35 SQL and NoSQL data sources. It can also be extended to support more.
Browser-based: Everything in your browser, with a shareable URL.
Ease-of-use: Become immediately productive with data without the need to master complex software.
Query editor: Quickly compose SQL and NoSQL queries with a schema browser and auto-complete.
Visualization and dashboards: Create beautiful visualizations with drag and drop, and combine them into a single dashboard.
Sharing: Collaborate easily by sharing visualizations and their associated queries, enabling peer review of reports and queries.
Schedule refreshes: Automatically update your charts and dashboards at regular intervals you define.
Alerts: Define conditions and be alerted instantly when your data changes.
REST API: Everything that can be done in the UI is also available through REST API.
Broad support for data sources: Extensible data source API with native support for a long list of common databases and platforms.
Solarwinds
Database Performance Analyzer (Paid)
https://www.solarwinds.com/database-performance-analyzer
Analyze SQL Server and query performance, identify problems, and give optimization and tuning advice
SQL Sentry (Paid)
https://www.solarwinds.com/sql-sentry
Database performance monitoring for SQL Server and Azure SQL databases, with fast root cause analysis and visibility across the data estate
Database Observability (Paid)
https://www.solarwinds.com/solutions/solarwinds-observability/database-observability
Visualize database health
Plan Explorer (Free)
https://www.solarwinds.com/free-tools/plan-explorer
Quickly get to the root of query problems with a free query analysis tool
Varnish (Free)
My Varnish VCL custom config
https://docs.google.com/document/d/18IrewYSQBt0AChDn_wENbDnKHlr0BWt_zkhfttfVbks/edit?usp=sharing
You should be able to just copy paste the contents into your Varnish Default.vcl config file.
Configuration examples
https://gist.github.com/fevangelou/84d2ce05896cab5f730a
Awesome Varnish
https://github.com/huayra/awesome-varnish
Increase your Varnish Cache Hit Rate
https://varnish-cache.org/docs/trunk/users-guide/increasing-your-hitrate.html
Medium Article
https://nbeguier.medium.com/3-tips-to-boost-the-performance-of-your-varnish-cache-3f4ce44be3c1
Sharded Caching
Dynamic backend resolution
Cache Ajax Requests
https://guides.wp-bullet.com/how-to-cache-ajax-get-requests-with-varnish-4/
Varnish Gather
https://github.com/varnish/varnishgather
Varnish Gather is a simple script designed to gather as much relevant information as possible on a Varnish Cache setup.
Additional Varnish Modules
https://github.com/varnish/varnish-modules
This is a collection of modules ("vmods") extending Varnish VCL used for describing HTTP request/response policies with additional capabilities.
VPS Optimizations (Free)
Optimizing Linux
Disable THP
https://www.pingcap.com/blog/transparent-huge-pages-why-we-disable-it-for-databases/
Tuned-ADM
https://manpages.ubuntu.com/manpages/jammy/man7/tuned-profiles.7.html
Change Init Level to 3
Set your init level to 3 if the default is set to 5. Use the command “init 3” to set the init level to 3, then reboot for the changes to take effect. You can click the link below for instructions on how to do so.
https://www.cyberciti.biz/howto/question/linux/changing-run-levels-3-5.php
This link is how to do the reverse, changing 5 to 3 if the “init 3” command does not work. If your run level is set to 5, change it to 3.
Optimizing Linux Github
https://github.com/sn99/Optimizing-linux
Great repo for how to optimize linux performance.
Stacer
https://www.site24x7.com/learn/linux/linux-performance-optimization.html
Stacer is a tool used for optimizing Linux that deletes unwanted cache and sorting processes by looking at memory usage and CPU. Stacer reveals how services and processes are performing and which user is executing the processes.
Performance Optimization Tools and Techniques
https://linuxconfig.org/linux-performance-optimization-tools-and-techniques
Enable Z-Swap
https://blog.jacobstoner.com/zswap-improve-memory-performance-on-linux/
sudo perl -pi -e 's/^(GRUB_CMDLINE_LINUX_DEFAULT.*)"$/$1 zswap.enabled=1
zswap.compressor=lz4 zswap.zpool=z3fold zswap.max_pool_percent=25"/' /etc/default/grub
sudo update-grub
sudo echo -e 'lz4\nlz4_compress\nz3fold' >> /etc/initramfs-tools/modules
sudo update-initramfs -u
sudo reboot
Tune the Linux Filesystem for increased performance
Foss Linux Article
https://www.fosslinux.com/111937/tips-and-tricks-for-optimizing-linux-device-performance.htm
Semi-suface level, but slightly different info than the linux.com article, best to use both of the many listed techniques together.
Use a Custom Kernel
https://www.fosslinux.com/111937/tips-and-tricks-for-optimizing-linux-device-performance.htm
Disable Unnecessary Linux Services
To list all services, you can use this command:
systemctl list-unit-files --type=service
Then, to disable a service, use:
sudo systemctl disable SERVICE_NAME
Jumbo Frames
Enabling Jumbo Frames:
Check if your network adapter supports Jumbo Frames: ethtool eth0
Enable Jumbo Frames by setting a larger MTU (Maximum Transmission Unit), typically 9000 bytes for Ethernet: ifconfig eth0 mtu 9000 or ip link set dev eth0 mtu 9000
Verify the changes: ifconfig eth0 or ip addr show eth0
Remember to configure Jumbo Frames on all devices in your network to avoid packet fragmentation.
Jumbo Frames can help reduce CPU load by decreasing the number of packets processed, but it's crucial to ensure that all network equipment supports them to avoid potential network issues. Contact your hosting provider to ensure enabling this feature is supported.
TCP BBR
Increase Linux Internet speed with TCP BBR congestion control
https://www.techrepublic.com/article/how-to-enable-tcp-bbr-to-improve-network-speed-on-linux/
https://www.linuxbabe.com/ubuntu/enable-google-tcp-bbr-ubuntu
https://github.com/systemd/systemd/issues/9725#issuecomment-413369212
https://djangocas.dev/blog/huge-improve-network-performance-by-change-tcp-congestion-control-to-bbr/
Linux Network Performance Parameters
https://github.com/leandromoreira/linux-network-performance-parameters
Intel’s VPS Wordpress Tuning guide for Xeon Systems
Linux Optimization suggestions for the Steam Deck
These are Linux optimizations for the Steam Deck, however they are also applicable to Linux VPS optimization. Below is the Medium article I pulled these commands from, as well as reversion commands for each of these optimization features in case you want to revert for any reason.
Paste all of these commands as one single code block, not single lines one at a time. The reversion commands should not be run together with the commands to enable these features, only if you want to disable them and revert back to stock.
Medium Article
Switching over to the “performance” CPU governor at start-up
(paste this into your terminal as one giant code block, do not run the commands individually)
cat << EOF | sudo tee /etc/systemd/system/cpu_performance.service
[Unit]
Description=CPU performance governor
[Service]
Type=oneshot
ExecStart=/usr/bin/cpupower frequency-set -g performance
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable cpu_performance.service
To undo or revert this change, run:
sudo systemctl disable cpu_performance.service
MGLRU (Multi-Gen. Least Recently Used)
This is one of the most recent additions to the upstream Linux kernel, literally just merged for the 6.1 LTS (Long-Term Support). However, the upstream kernel doesn’t enable this functionality by default, yet.
(paste this into your terminal as one giant code block, do not run the commands individually)
To enable this feature, run the terminal command:
cat << EOF | sudo tee /etc/tmpfiles.d/mglru.conf
w /sys/kernel/mm/lru_gen/enabled - - - - 7
w /sys/kernel/mm/lru_gen/min_ttl_ms - - - - 0
EOF
Reversion command:
sudo rm /etc/tmpfiles.d/mglru.conf
Unlocking the memory lock
By default, the Linux kernel sets this particular value to just 64KiB, which is the maximum amount of memory the kernel will lock within a single operation. This is an old recommendation.
This command will set this value to 2 GB, adjust as needed depending on your server’s RAM capacity:
(paste this into your terminal as one giant code block, do not run the commands individually)
cat << EOF | sudo tee /etc/security/limits.d/memlock.conf
* hard memlock 2147484
* soft memlock 2147484
EOF
This site will help you convert the values so you can replace the above value “2147484” with an appropriate value for your VPS’s memory.
http://www.csgnetwork.com/memconv.html
To revert the change, run:
sudo rm /etc/security/limits.d/memlock.conf
Changing the I/O (Input/Output) Scheduler
We are going to permanently swap the I/O-scheduler to Kyber with the following block (note that this will work with all cases, meaning NVMe SSD, eMMC & microSD):
(paste this into your terminal as one giant code block, do not run the commands individually)
cat << EOF | sudo tee /etc/udev/rules.d/64-ioschedulers.rules
ACTION=="add|change", KERNEL=="nvme[0-9]*", ATTR{queue/scheduler}="kyber"
ACTION=="add|change", KERNEL=="sd[a-z]|mmcblk[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="kyber"
EOF
To undo/revert this change:
sudo rm /etc/udev/rules.d/64-ioschedulers.rules
TCP Network Stack Optimization
TCP Keepalive
Adjusts how long TCP should wait before sending keepalive messages to confirm that an idle connection is still active. This can help in managing connection overloads.
(Adjust command values as needed)
sysctl -w net.ipv4.tcp_keepalive_time=600
sysctl -w net.ipv4.tcp_keepalive_probes=5
sysctl -w net.ipv4.tcp_keepalive_intvl=60
TCP Window Scaling
Enables TCP window size adjustments, allowing for larger buffers, which can improve data throughput for connections.
(Adjust command value as needed)
sysctl -w net.ipv4.tcp_window_scaling=1
TCP SACK
The Selective Acknowledgment (SACK) feature allows devices to inform senders about lost packets, facilitating more efficient retransmissions.
(Adjust command value as needed)
sysctl -w net.ipv4.tcp_sack=1
TCP FIN Timeout
Adjusts the timeout to close a connection, freeing up resources sooner.
(Adjust command value as needed)
sysctl -w net.ipv4.tcp_fin_timeout=30
Increase TCP Max Syn Backlog
Determines the number of incoming connections that can be queued for handling.
(Adjust command value as needed)
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
Increase TCP Max Tw Buckets
Controls the maximum number of TCP sockets in TIME_WAIT state, managing memory use.
(Adjust command value as needed)
sysctl -w net.ipv4.tcp_max_tw_buckets=400000
TCP Fast Open
Allows data to be sent during the initial SYN handshake, reducing latency for connections.
(Adjust command value as needed)
sysctl -w net.ipv4.tcp_fastopen=3
Reversion Commands
To revert TCP settings, you'll need to know the default values, which might vary based on your Linux distribution and version. Here are commands to set typical default values:
sysctl -w net.ipv4.tcp_keepalive_time=7200
sysctl -w net.ipv4.tcp_keepalive_probes=9
sysctl -w net.ipv4.tcp_keepalive_intvl=75
sysctl -w net.ipv4.tcp_window_scaling=1
sysctl -w net.ipv4.tcp_sack=1
sysctl -w net.ipv4.tcp_fin_timeout=60
sysctl -w net.ipv4.tcp_max_syn_backlog=128
sysctl -w net.ipv4.tcp_max_tw_buckets=5000
sysctl -w net.ipv4.tcp_fastopen=0
Enable Asynchronous I/O (AIO)
Enable AIO to allow multiple I/O operations to execute concurrently, improving performance for database servers like MySQL
innodb_use_native_aio = 1
Offload Processing
Enable offloading features on your network interface to reduce CPU load
ethtool -K eth0 gro on
ethtool -K eth0 gso on
ethtool -K eth0 tso on
Increase Open File Limits
Ensure your system can handle a large number of open files
echo "fs.file-max = 500000" >> /etc/sysctl.conf
ulimit -n 500000
Enable Writeback Caching for Disk I/O
Improve write performance by enabling writeback caching
hdparm -W1 /dev/sda
Store temporary files in memory to speed up read/write operations
mount -t tmpfs -o size=512M tmpfs /tmp
Optimize Memory Usage
Use zram to compress RAM data to increase the amount of available memory
apt-get install zram-config
Optimize Virtual Memory Settings
Adjust virtual memory settings for better performance
sysctl -w vm.dirty_background_ratio=5
sysctl -w vm.dirty_ratio=10
Use CPU Isolation
Isolate CPU cores for critical applications to ensure they have dedicated resources
isolcpus=1,2
Configure HugeTLB Pages
For applications requiring large memory pages, configure HugeTLB to reduce TLB misses
echo 'vm.nr_hugepages=128' >> /etc/sysctl.conf
Optimize DNS Resolution
Use a Local DNS Cache
Install and configure a local DNS caching server like dnsmasq
apt-get install dnsmasq
Adjust Out-of-Memory (OOM) Killer Settings
Prevent the OOM killer from terminating critical processes by adjusting oom_score_adj
echo '-1000' > /proc/$(pidof critical_process)/oom_score_adj
Use RAM Disks for High-Performance Temporary Storage
Mount a portion of your RAM as a disk for extremely fast I/O operations
mount -t tmpfs -o size=1G tmpfs /mnt/ramdisk
Optimize Swap Settings
Use zswap
Enable and configure zswap for better swap performance
echo 1 > /sys/module/zswap/parameters/enabled
echo lz4 > /sys/module/zswap/parameters/compressor
echo 20 > /sys/module/zswap/parameters/max_pool_percent
Optimize Boot Parameters
Modify boot parameters to improve performance
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash noapic noacpi nosplash irqpoll"
Reduce Kernel Latency
Enable kernel preemption and configure low-latency settings
echo 1 > /sys/kernel/debug/sched_features
Enable and Configure HugeTLBfs
Use HugeTLBfs to allocate large pages for applications that can benefit from reduced TLB misses
mount -t hugetlbfs none /dev/hugepages
Configure Network Bonding
Combine multiple network interfaces for increased bandwidth and redundancy
apt-get install ifenslave
echo "bonding" >> /etc/modules
Fine-Tune TCP SYN Cookies
Enable SYN cookies to protect against SYN flood attacks while allowing legitimate traffic.
sysctl -w net.ipv4.tcp_syncookies=1
Optimize ARP Cache Settings
Tune ARP cache settings to handle large numbers of IP addresses efficiently
sysctl -w net.ipv4.neigh.default.gc_thresh1=1024
sysctl -w net.ipv4.neigh.default.gc_thresh2=2048
sysctl -w net.ipv4.neigh.default.gc_thresh3=4096
Enable IP Spoofing Protection
Configure settings to prevent IP spoofing
sysctl -w net.ipv4.conf.all.rp_filter=1
sysctl -w net.ipv4.conf.default.rp_filter=1
Optimize Kernel Shared Memory Parameters
Adjust shared memory settings to improve performance for applications that use IPC (Inter-Process Communication)
sysctl -w kernel.shmmax=68719476736
sysctl -w kernel.shmall=4294967296
Adjust VM Overcommit Settings
Fine-tune memory overcommit behavior for better memory management
sysctl -w vm.overcommit_memory=1
sysctl -w vm.overcommit_ratio=50
Enable and configure query caching in MySQL/MariaDB for faster query responses
query_cache_size = 64M
query_cache_type = ON
Configure TCP Timestamps
Enable or disable TCP timestamps based on your workload to improve performance
sysctl -w net.ipv4.tcp_timestamps=1
Adjust UDP Buffer Sizes
Increase UDP buffer sizes for applications that use UDP heavily
sysctl -w net.core.rmem_max=26214400
sysctl -w net.core.wmem_max=26214400
Optimize nf_conntrack Settings
Adjust connection tracking settings for high-volume traffic
sysctl -w net.netfilter.nf_conntrack_max=131072
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=1200
Enable Disk Write Caching
Enable write caching on disks to improve write performance
hdparm -W1 /dev/sda
Tune Systemd for Performance
Reduce systemd's default timeout values for faster boot and shutdown
DefaultTimeoutStartSec=10s
DefaultTimeoutStopSec=10s
Optimize NTP Synchronization
Ensure accurate time synchronization with minimal overhead using chrony instead of ntpd
apt-get install chrony
Enable and Configure Network Interface Offloading
Enable offloading features on network interfaces to reduce CPU usage
ethtool -K eth0 gro on
ethtool -K eth0 gso on
ethtool -K eth0 tso on
Implement Kernel Same-Page Merging (KSM)
Enable KSM to merge identical memory pages between virtual machines
echo 1 > /sys/kernel/mm/ksm/run
Use High-Resolution Timers
Enable high-resolution timers for applications that require precise timing
echo "highres=on" >> /etc/default/grub
update-grub
Optimize sysctl Parameters for Network Performance
Adjust various sysctl parameters to enhance network throughput and reduce latency
sysctl -w net.ipv4.tcp_rfc1337=1
sysctl -w net.ipv4.tcp_mtu_probing=1
sysctl -w net.ipv4.tcp_base_mss=536
Implement Disk Quotas for User Management
Enable and configure disk quotas to manage user disk usage efficiently
apt-get install quota
Use Page-Cache Management Tools
Use tools like vmtouch to manage and lock frequently accessed files in memory
apt-get install vmtouch
vmtouch -dl /path/to/important/files
Optimize Swapping Behavior
Configure vm.dirty_expire_centisecs and vm.dirty_writeback_centisecs for better swap performance
sysctl -w vm.dirty_expire_centisecs=2000
sysctl -w vm.dirty_writeback_centisecs=1000
Implement Software RAID for Disk Performance
Use software RAID to improve disk performance and redundancy
mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
Optimize Kernel Timer Frequency
Adjust the kernel timer frequency to reduce overhead
echo 1000 > /proc/sys/kernel/timer_frequency
Enable IPv6
Enable and optimize IPv6 for better network performance and future-proofing
sysctl -w net.ipv6.conf.all.disable_ipv6=0
Use xfs_fsr for XFS File System Defragmentation
Defragment XFS file systems to improve performance
xfs_fsr /dev/sda1
Optimize TCP Backlog Settings
Increase TCP backlog settings to handle more simultaneous connections
sysctl -w net.core.somaxconn=1024
sysctl -w net.core.netdev_max_backlog=5000
Use mdadm for Software RAID Management
Manage software RAID arrays with mdadm
mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
Implement TCP MSS Clamping
Adjust TCP MSS (Maximum Segment Size) to avoid fragmentation
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Optimize TCP SYN Flood Protection
Configure TCP SYN flood protection to prevent DoS attacks
sysctl -w net.ipv4.tcp_syncookies=1
Enable and Configure dnsmasq for DNS Caching
Use dnsmasq to cache DNS queries and reduce lookup times
apt-get install dnsmasq
systemctl enable dnsmasq
systemctl start dnsmasq
Enable tcp_tw_recycle for Faster Connection Reuse
Enable tcp_tw_recycle to speed up connection reuse
sysctl -w net.ipv4.tcp_tw_recycle=1
Use blktrace for Block Layer Tracing
Install and use blktrace to trace block I/O operations
apt-get install blktrace
blktrace -d /dev/sda
Adjust Kernel Panic Settings
Configure the system to automatically reboot after a kernel panic
sysctl -w kernel.panic=10
sysctl -w kernel.panic_on_oops=1
Optimize Inotify Watches
Increase the number of inotify watches to handle more file events
sysctl -w fs.inotify.max_user_watches=524288
Enable TCP Window Scaling
Improve TCP performance by enabling window scaling
sysctl -w net.ipv4.tcp_window_scaling=1
Enable TCP Keepalive Probes
Configure TCP keepalive probes to manage idle connections
sysctl -w net.ipv4.tcp_keepalive_time=300
sysctl -w net.ipv4.tcp_keepalive_intvl=60
sysctl -w net.ipv4.tcp_keepalive_probes=5
Optimize TCP Congestion Control Algorithms
Experiment with different TCP congestion control algorithms to find the best fit for your workload
sysctl -w net.ipv4.tcp_congestion_control=bbr
Use schedtool for Advanced CPU Scheduling
Install and use schedtool to control CPU scheduling policies
apt-get install schedtool
schedtool -R -p 20 -e myapp
Enable Kernel Samepage Merging (KSM)
Use KSM to reduce memory usage by merging identical memory pages
echo 1 > /sys/kernel/mm/ksm/run
Optimize Network Buffer Sizes
Increase network buffer sizes to handle high traffic volumes
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
Optimize Kernel Scheduler
Adjust kernel scheduler settings for better performance
echo 1 > /proc/sys/kernel/sched_autogroup_enabled
Adjust rcu Settings for Low-Latency Systems
Tune Read-Copy Update (RCU) settings for low-latency performance
echo 0 > /sys/kernel/rcu_expedited
Optimize Filesystem Journaling
Choose the appropriate journaling mode for your filesystem (e.g., data=writeback for ext4)
mount -o remount,data=writeback /dev/sda1
Enable and Configure BBRv2 TCP Congestion Control
Use BBRv2 for even better TCP congestion control performance
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
Optimize File System Performance with tune2fs
Use tune2fs to optimize ext4 filesystem parameters
tune2fs -o journal_data_writeback /dev/sda1
Use ethtool to Optimize NIC Settings
Fine-tune NIC settings for better network performance
ethtool -K eth0 tso off
Enable and Configure Network Interface Teaming
Use network interface teaming for load balancing and failover
apt-get install ifenslave
Use irqbalance for Balancing Interrupts
Install and configure irqbalance to distribute interrupts across CPUs
apt-get install irqbalance
Tune Kernel Semaphore Parameters
Adjust semaphore settings for better performance with IPC-heavy applications
sysctl -w kernel.sem="250 32000 100 128"
Configure and Use ethtool for Network Optimization
Use ethtool to optimize network interface settings
ethtool -K eth0 rx off tx off
Enable TCP Small Queues (TSQ)
Optimize the TCP stack by enabling TSQ
sysctl -w net.ipv4.tcp_limit_output_bytes=131072
Enable and Configure EarlyOOM
Use EarlyOOM to handle out-of-memory situations more gracefully
apt-get install earlyoom
Optimize Inode Cache
Adjust inode cache settings to handle large numbers of files
sysctl -w fs.inode-nr
sysctl -w fs.inode-state
Optimize Disk Caching
Adjust vm.dirty_ratio and vm.dirty_background_ratio to control disk caching behavior
sysctl -w vm.dirty_ratio=20
sysctl -w vm.dirty_background_ratio=10
Implement IP Address Aliasing
Use IP address aliasing to manage multiple IP addresses on a single network interface, improving network performance and management
ip addr add 192.168.1.2/24 dev eth0
Enable Asynchronous I/O for Database Servers
Enable asynchronous I/O (AIO) for database servers like MySQL or PostgreSQL to improve disk I/O performance
innodb_use_native_aio=1
Optimize TCP Reassembly Settings
Adjust TCP reassembly settings to handle fragmented packets more efficiently
sysctl -w net.ipv4.tcp_reordering=3
Enable jemalloc for Memory Allocation
Use jemalloc as a memory allocator for applications like Nginx, MySQL, or Redis to improve memory management performance
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
Adjust IO Elevator Algorithms
Switch to a more suitable I/O elevator algorithm like mq-deadline or none for SSDs
echo mq-deadline > /sys/block/sda/queue/scheduler
Use fstrim for SSDs
Periodically run fstrim to inform the SSD of unused blocks, improving performance
fstrim -v /
Optimize TCP Keepalive Settings
Fine-tune TCP keepalive settings to manage idle connections better
sysctl -w net.ipv4.tcp_keepalive_time=120
sysctl -w net.ipv4.tcp_keepalive_intvl=30
sysctl -w net.ipv4.tcp_keepalive_probes=5
Optimize Virtual Memory Overcommit
Adjust virtual memory overcommit settings to better handle memory allocation
sysctl -w vm.overcommit_memory=2
sysctl -w vm.overcommit_ratio=50
Use ethtool for Network Interface Tuning
Adjust network interface settings for better performance
ethtool -K eth0 rx off tx off
Implement BBRv2 TCP Congestion Control
Use BBRv2 for enhanced TCP congestion control performance
sysctl -w net.ipv4.tcp_congestion_control=bbr
Optimize I/O Performance with blk-mq (Multi-Queue Block I/O Queueing Mechanism)
Enable and configure blk-mq for better I/O performance on SSDs
echo "mq-deadline" > /sys/block/sda/queue/scheduler
Use schedtool to Control CPU Scheduling Policies
Install and use schedtool to manage CPU scheduling
apt-get install schedtool
schedtool -R -p 20 -e /usr/bin/myapp
Optimize TCP Retransmission Timeout (RTO)
Adjust TCP RTO settings for better performance
sysctl -w net.ipv4.tcp_retries2=5
Optimize TCP SYN Cookies
Enable TCP SYN cookies to protect against SYN flood attacks
sysctl -w net.ipv4.tcp_syncookies=1
Optimize TCP Window Scaling
Enable TCP window scaling for better performance
sysctl -w net.ipv4.tcp_window_scaling=1
Use cgroups for Resource Management
Implement cgroups to limit, prioritize, and isolate resource usage of processes
cgcreate -g cpu,memory:mygroup
cgset -r cpu.shares=512 mygroup
cgset -r memory.limit_in_bytes=512M mygroup
Optimize TCP Memory Buffers
Adjust TCP memory buffer settings for better performance
sysctl -w net.ipv4.tcp_rmem='4096 87380 16777216'
sysctl -w net.ipv4.tcp_wmem='4096 65536 16777216'
Optimize Kernel Schedulers
Choose the appropriate I/O scheduler for your workload (noop for SSD)
echo "noop" > /sys/block/sda/queue/scheduler
Optimize Kernel Shared Memory Parameters
Adjust shared memory settings for better performance with IPC-heavy applications
sysctl -w kernel.shmmax=68719476736
sysctl -w kernel.shmall=4294967296
Implement ZFS for Advanced File System Features
Use ZFS for better data integrity, snapshots, and performance
apt-get install zfsutils-linux
zpool create mypool /dev/sda
Enable TCP Selective Acknowledgements (SACK)
Optimize TCP performance with SACK
sysctl -w net.ipv4.tcp_sack=1
Enable and Configure zram for Compressed Swap
Use zram to create a compressed block device in RAM
apt-get install zram-config
Implement TCP Timestamping
Enable TCP timestamps for better performance and reliability
sysctl -w net.ipv4.tcp_timestamps=1
Use zpool for ZFS Pool Management
Manage ZFS storage pools with zpool
zpool create mypool /dev/sda
Optimize File System Access Time
Use noatime and nodiratime mount options to reduce disk I/O
mount -o remount,noatime,nodiratime /
Optimize TCP Backlog Size
Increase TCP backlog size to handle more incoming connections
sysctl -w net.core.somaxconn=1024
Optimize Kernel Virtual Memory Settings
Adjust Virtual Memory Settings For Better Performance and Optimize Kernel File Handle Limits
Increase the number of file handles the kernel can manage
sysctl -w fs.file-max=2097152
Enable TCP Low Latency
Configure TCP low latency mode for better responsiveness
sysctl -w net.ipv4.tcp_low_latency=1
Use pm2 for Node.js Process Management
Install and use pm2 to manage Node.js processes
npm install pm2@latest -g
pm2 start app.js
Note: Only applicable if using Node.js in Wordpress
Implement Squid for Caching and Proxying
Install and configure Squid for web caching and proxying
apt-get install squid
Optimize TCP Congestion Control for High Latency Networks
Use a suitable TCP congestion control algorithm for high-latency networks
sysctl -w net.ipv4.tcp_congestion_control=htcp
Use cpulimit to Limit CPU Usage of Processes
Install and use cpulimit to control the CPU usage of processes
apt-get install cpulimit
cpulimit -e myapp -l 50
Optimize Disk Write Caching
Enable disk write caching for better write performance
hdparm -W1 /dev/sda
Use noatime and nodiratime Mount Options
Reduce disk I/O by disabling access time updates on filesystems
mount -o remount,noatime,nodiratime /
Adjust Maximum Transmission Unit (MTU) for Network Interfaces
Increase MTU size for better performance on high-speed networks
ip link set dev eth0 mtu 9000
Tune Kernel Preemption Model
Configure the kernel preemption model for low-latency desktop or high-throughput server workloads
echo 0 > /proc/sys/kernel/preempt
Optimize Disk I/O
Increase Read-Ahead Buffer
Adjust the read-ahead buffer size for disk I/O
blockdev --setra 2048 /dev/sda
Optimize IRQ (Interrupt Request) Balancing
Distribute IRQ load across multiple CPU cores to prevent bottlenecks
apt-get install irqbalance
systemctl enable irqbalance
Use HugePages for Memory-Intensive Applications
echo 'vm.nr_hugepages=128' >> /etc/sysctl.conf
Use Lightweight Logging
Reduce the verbosity of system logs to decrease disk I/O
sed -i 's/^#LogLevel=info/LogLevel=error/' /etc/systemd/journald.conf
Network Queue Management
Queue Length
Increasing the network interface queue length can help handle more packets during traffic bursts, reducing packet drops.
(Adjust value as needed)
ifconfig eth0 txqueuelen 10000
Reversion Command
Reset the transmission queue length to its default value (usually 1000):
ifconfig eth0 txqueuelen 1000
I/O Scheduler
Choosing the right I/O scheduler can improve performance based on your workload characteristics (e.g., SSD vs HDD).
Set I/O Scheduler
For SSDs, noop or deadline might be better.
echo "deadline" > /sys/block/sda/queue/scheduler
Swappiness
The vm.swappiness parameter controls the relative weight given to swapping out runtime memory, versus dropping pages from the system cache.
Adjust Swappiness
sysctl -w vm.swappiness=10
Preventing the superfluous book-keeping of File Access Times
The Linux kernel updates the access time of every file every time it would access it, meaning that even a read-only operation would immediately result in a write operation, because the access time of the file in question had to be updated.
Therefore, let’s permanently switch over to the noatime setting with the following command:
sudo sed -i -e '/home/s/\bdefaults\b/&,noatime/' /etc/fstab
To undo/revert this change:
sudo sed -i -e 's/,noatime//' /etc/fstab
Reversion Commands
File Descriptor Limits
Reverting file descriptor limits involves setting them back to typical defaults:
# System-wide
echo "fs.file-max = 65535" >> /etc/sysctl.conf
# Per-user
echo "* soft nofile 1024" >> /etc/security/limits.conf
echo "* hard nofile 4096" >> /etc/security/limits.conf
I/O Scheduler
To revert the I/O scheduler, you can switch back to the default. For many Linux systems, cfq (Completely Fair Queuing) is a common default for HDDs, and noop or mq-deadline for SSDs:
echo "cfq" > /sys/block/sda/queue/scheduler
Swappiness
The default swappiness value is usually set at 60, which is suitable for most general-use cases:
sysctl -w vm.swappiness=60
Making Reversions Permanent
To ensure these settings are permanent, update the /etc/sysctl.conf file with the reverted values and run:
sysctl -p
This command reloads the configurations from the sysctl.conf file.
Gzip, Brotli and Zstandard Text Compression (Free)
Gzip, Brotli and Zstandard compression are text compression methods that work at the webserver level. That means you need support for Gzip/Brotli/Zstandard compression enabled via NGINX, Apache, or LiteSpeed and to properly configure them to serve compressed content.
Red Switches Article
https://www.redswitches.com/blog/brotli-vs-gzip/
Fantastic in-depth article that explains both Brotli and Gzip compression methods.
WP Rocket Articles
https://wp-rocket.me/google-core-web-vitals-wordpress/enable-text-compression
Gzip, Brotli and Zstandard Compression Levels
The articles above have a good explanation of compression levels, their benefits, potential pitfalls from raising the compression level, etc. However, the quick explanation is that higher compression levels produce smaller file sizes but increase server processing time. Increasing compression levels has diminishing returns, and you need a high powered server to use the maximum compression level for Brotli and Gzip.
The default compression level for Brotli and Gzip should be 6. Higher levels are better up to a point. Very high levels of gzip and brotli compression may actually be a performance detriment and hurt your pagespeed scores, so it is highly recommended to run speed tests after adjusting these configuration settings to measure their impact on performance and determine whether further adjustments are needed.
I recommend raising the level one increment at a time until you reach the point where you see a performance hit instead of a benefit on tests.
How to enable Brotli or Gzip for Apache
https://wp-rocket.me/blog/brotli-vs-gzip-compression/
WP Rocket has a section in this article on how to implement Gzip/Brotli compression via .htaccess for Apache only
How to enable Brotli with Gzip fallback on NGINX
https://bytepursuits.com/nginx-enabling-brotli-compression-with-gzip-fallback
Zstandard Compression
Gzip vs Brotli vs Zstandard Compression Article
While Zstandard compression is the best and fastest compression algorithm of the three, Zstandard Compression is currently only supported by Chrome as of May 2024. Firefox and other browsers will add support for Zstandard compression soon, Zstandard compression support is currently in beta testing for Firefox.
However due to how new Zstandard is, when implemented, you should always have a fallback configured to serve Gzipped/Brotli Compressed content to browsers that do not support Zstandard Compression(any device with an older browser, so the majority of all browsers across user devices).
Experimental NGINX Zstandard Module
https://github.com/tokers/zstd-nginx-module
Load Balancing
Haproxy (Free)
HAProxy Caching
LoadForge Article
https://loadforge.com/guides/advanced-haproxy-caching-strategies
Great article on how to set up HAProxy caching, as well as advanced caching configuration strategies.
Official HAProxy Article
https://www.haproxy.com/blog/accelerate-your-apis-by-using-the-haproxy-cache
Article on HAProxy caching directly from the HAProxy blog.
Resources
https://www.cloudbees.com/blog/performance-tuning-haproxy
https://delta.blue/blog/haproxy-timeouts/
https://www.papertrail.com/solution/tips/haproxy-logging-how-to-tune-timeouts-for-performance/
https://www.suse.com/c/speeding-ssl-need-know-haproxy/
Configuration Recommendations/What to avoid
Roxy WI
GUI for HAProxy and other server stack infrastructure automatic configuration. Free tier, as well as paid.
Pre-Made HAProxy Configs
https://github.com/HariSekhon/HAProxy-configs
MPTCP
https://www.multipath-tcp.org/
(More info soon)
Redhat Article
https://www.redhat.com/en/blog/understanding-multipath-tcp-networking-highway-future
AWS Hosting Stack
Ars Technica Article
https://arstechnica.com/information-technology/2023/07/ars-on-aws-01/
Elastic Load Balancing (Paid)
https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html
Elastic Load Balancing automatically distributes your incoming traffic across multiple targets, such as EC2 instances, containers, and IP addresses, in one or more Availability Zones. It monitors the health of its registered targets, and routes traffic only to the healthy targets. Elastic Load Balancing scales your load balancer as your incoming traffic changes over time. It can automatically scale to the vast majority of workloads.
Elastic Load Balancing supports the following load balancers: Application Load Balancers, Network Load Balancers, Gateway Load Balancers, and Classic Load Balancers. You can select the type of load balancer that best suits your needs.
AWS Fargate (Paid)
https://aws.amazon.com/fargate/
AWS Fargate is a serverless, pay-as-you-go compute engine that lets you focus on building applications without managing servers.
AWS Lambda (Paid)
https://aws.amazon.com/lambda/
AWS Lambda is a compute service that runs your code in response to events and automatically manages the compute resources (Automatic Scaling), making it the fastest way to turn an idea into a modern, production, serverless applications.
Amazon Aurora (Paid)
https://aws.amazon.com/rds/aurora/
Amazon Aurora provides unparalleled high-performance and availability at global scale with full MySQL and PostgreSQL compatibility, at 1/10th the cost of commercial databases. Aurora has 5x the throughput of MySQL and 3x of PostgreSQL.
Amazon Elastic File System (Paid)
Serverless, fully elastic file storage. Amazon Elastic File System (Amazon EFS) automatically grows and shrinks as you add and remove files with no need for management or provisioning.
Amazon Elastic Container Service (Paid)
Amazon Elastic Container Service (ECS) is a fully managed container orchestration service that helps you to more efficiently deploy, manage, and scale containerized applications.
Amazon OpenSearch (Paid)
https://aws.amazon.com/opensearch-service/
Amazon OpenSearch Service makes it easy for you to perform interactive log analytics, real-time application monitoring, website search, and more. OpenSearch is an open source, distributed search and analytics suite derived from Elasticsearch. Amazon OpenSearch Service offers the latest versions of OpenSearch, support for 19 versions of Elasticsearch (1.5 to 7.10 versions), as well as visualization capabilities powered by OpenSearch Dashboards and Kibana (1.5 to 7.10 versions).
Amazon ElastiCache (Paid)
https://aws.amazon.com/elasticache/
Amazon ElastiCache is a fully managed, Redis- and Memcached-compatible service that delivers real-time, cost-optimized performance, and up to 99.99% high availability for modern applications. ElastiCache is ideal for high-performance use cases such as data caching, web, mobile apps, healthcare apps, financial apps, gaming, ad-tech, IoT, media streaming, session stores, leaderboards, machine learning (ML), and microservices-based applications.
ElastiCache speeds up database and application performance, scaling to hundreds of millions of operations per second with microsecond response time. Benefits include enhanced security, reliability, scalability, and performance when compared to open source alternatives. It also unlocks cost savings for read-heavy workloads and provides cost-optimization features like data tiering for memory-intensive workloads.
With Amazon ElastiCache Serverless, you can create a highly available cache in under a minute without infrastructure provisioning or configuration. You can create an ElastiCache Serverless cache in a few steps by specifying a cache name in the AWS Management Console, AWS Software Development Kit (SDK), or AWS Command Line Interface (CLI).
SSH tools
WinSCP (Windows only) (Free)
https://winscp.net/eng/index.php
A great GUI SFTP file manager that works over SSH. I highly recommend it for managing files over SSH on Windows. Has an integrated terminal that can be launched from the GUI.
Filezilla (Multi-platform) (Free)
https://filezilla-project.org/index.php
Multi-platform SFTP GUI file manager, works on Mac, Windows and Linux.
SolarPutty (Windows only) (Free)
https://www.solarwinds.com/free-tools/solar-putty
Fantastic terminal program with some nice QOL features.
Putty lacks the ability to do basic things such as copy paste, or saving login credentials.
Note
If you go the VPS route like I did, you are going to be using SSH to modify config files frequently(at least during the initial setup), and it will be absolutely necessary to use it if you somehow manage to crash your server and get locked out of the frontend/backend of Wordpress. You can always revert your changes to the config file if they cause issues, because Wordpress is just a program running on your server. You will always be able to access the config files via SSH as long as your server is on.
Always configure your SSH credentials and log in with an SSH client before you make any modifications to Apache, PHP, MySQL, Varnish, HAProxy, Nginx, or any other server level software so you don’t get locked out and have to start from scratch. You will need to do this with any VPS you manage.
This is absolutely critical for the servers your live sites run on. Do not forget to set your SSH credentials up.
CI/CD Pipeline (Continuous integration and continuous delivery/deployment)
Github (Free)
WPPusher
Free tier supports public repositories.
Github Embed
https://wordpress.org/plugins/github-embed/
Plugin that allows you to embed details from github just by pasting in the URL as you would any other embed source. Currently supports:
Repositories
User profiles
Project milestone summaries
Project contributors
Github Updater
https://github.com/afragen/git-updater
A simple plugin to enable automatic updates to your GitHub hosted WordPress plugins, themes, and language packs. Additional API plugins available for Bitbucket, GitLab, Gitea, and Gist.
Git and Composer Pipeline
Delicious Brains Article
https://deliciousbrains.com/storing-wordpress-in-git/#custom-plugins-themes
Jenkins (Free)
https://github.com/jenkinsci/jenkins
Medium Article
Extremely comprehensive Medium guide on Jenkins CICD github development
CI/CD Jenkins Github Pipeline
Blazemeter Article
https://www.blazemeter.com/blog/cicd-pipeline-jenkins-github
Hosting
Managed vs VPS Hosting
Make sure you choose a fast host. In my testing VPS hosting is fastest, but managed hosting providers such as WP Engine/Cloudways/Kinsta etc, are close. Managed hosting is suggested for major clients so they have hosting support if necessary when you (the developer) is unavailable.
VPS hosting is generally going to be faster than those hosts, and give you much more flexibility to implement performance optimizations.
Avoid shared hosting
Avoid shared hosting like the plague. Extremely limited server resources, almost no configuration flexibility, expensive, and SLOW.
Hosting Server Location
When I choose a location for my servers, I like to place it in as close to a central location to my users geographic region as possible. As an example, in the US I place my servers in the center of the country so that visitors on the East and West Coast will have somewhat similar latency, so the user experience is relatively homogenous regardless of their state.
VPS Configuration Panels and Software
ClusterCS (Paid)
I use ClusterCS to configure my VPS automatically. Personally, they are my preferred panel. All you need are SSH credentials, they handle everything else. You can also tweak many, many more settings than using a hosting providers panel directly, they don’t place any limitations on what you can configure. They’re the priciest panel option however.
aaPanel (Free)
https://www.aapanel.com/new/index.html
aaPanel is free, and the closest to my LAMP setup(meaning you can follow the apache optimization section. Unfortunately I have no experience with NGINX).
WordOPs (Free)
WordOPs is another free option to automatically configure your VPS to run Wordpress. WordOPs is a command line tool to install Wordpress on a VPS over SSH.
HTTP/3
HTTP/3 support is now included in WordOPs!
Other VPS panel options
The other paid panel options that I’m aware of that you have for VPS configuration are services such as Runcloud, SpinUpWP, and some other cloud control panels like Cyberpanel. There are many other options available as well that are not listed here.
Cheap and Fast VPS Hosting Providers
Digital Ocean
Digital Ocean Droplets are pretty cheap, and they have great performance. Of all the mainstream providers that are commonly recommended in hosting articles, they are by far the best. They certainly outclass Vultr and Linode, which are extremely slow, and should not be used.
Genesis Hosting
A little known hosting provider that has relatively performant VPS’s (even though their specs may appear to be low compared to other providers). They give you bare metal VPS’s (just like VPSDime listed below), which you will have to configure yourself over SSH with one of the aforementioned VPS configuration panels.
My VPS Host
VPSDime
I host with VPSDime. VPSDime has incredibly cheap (and blazing fast!) Linux VPS’s. I host my sites on their cheapest Linux VPS plan, which is a 4 vCPU, 6 GB ram machine for only $7/month. However their RAM upgrade options only cost an additional $7/month for 6 GB more RAM up to a cap of 36 GB.
The system resources they give you for what they charge is insane, and out of the 50+ hosting providers I have tested, no one has better performance and certainly no one has better pricing than what they charge.
Disclosure: The above link to VPSDime contains an affiliate code which earns me a commission for purchases made at no additional cost to you. Thank you for helping me provide you with useful information!
If you decide to go with VPSDime, I recommend getting their cheapest VPS plan for $7/month (Don’t add any of their add-ons that cost additional money (such as Varnish Configuration), they are unneeded), then configuring it using one of the aforementioned VPS management panels over SSH. If you wanted to, you could easily run multiple websites off of one single VPSDime VPS due to their generous system resource allocation. If you need additional ram over 6 GB, each additional 6 GB of ram is an additional $7/month.
Note: I will be adding a section onfor how to manually configure Varnish Caching soon!
Hosting Performance Benchmarking
WP Performance Tester (Free)
https://wordpress.org/plugins/wpperformancetester/
Wordpress hosting benchmarking plugin
CDN/DNS
Do I need a CDN?
Not every site needs a CDN! If you are only serving traffic local to the country the server is hosted in, users are near the hosting origin server’s geographic location, and do not have excessive volumes of traffic do not need CDNs. In such cases, a CDN will actually have a net negative performance impact due to the increased network latency and unnecessary network hops.
If your site has a decent amount of traffic which would heavily load the server, a CDN is absolutely something to consider to reduce hosting bandwidth usage and traffic limits (if your host imposes any). If the site is serving multiple geographic regions and not just the country of origin, a CDN is a must.
A CDN will provide performance consistency across geographic regions since they have proxy servers which host a local copy of your site on the CDNs server, which allows a visitor to access the site from a server which is much closer to their physical location. If your site is based in the US but receives traffic from outside the country of origin for example, the visitor outside would experience worse load times than the visitor who is closer to the hosting server. In this scenario a CDN is preferable.
Beleaf article
https://beleaf.au/blog/anatomy-of-a-performant-and-sustainable-webpage/
How Does A CDN Work?
SwitchUpCB Article
https://switchupcb.com/blog/1-second-wordpress-website-page-speed/
Note: Even though SwitchUpCB has a really solid breakdown of how CDN’s function, absolutely do not trust his information on anything else in the article. His analysis on everything else related to Pagespeed Performance in this article is wrong.
CDN Rewrite
CDN Enabler (Free)
https://wordpress.org/plugins/cdn-enabler/
Enables CDN rewrite (true CDNs, not cloudflare as a reverse proxy as this functionality is unneeded when using Cloudflare).
Cloudflare (Freemium)
Cloudflare has a free tier, and is one of the most reliable CDNs out there.
Be aware that if you choose not to proxy your traffic through Cloudflare, you will also lose most(almost all really) of the benefits of Cloudflare’s CDN, so you should speed test your site with the CDN active(orange cloud), and with the CDN inactive(gray cloud) both.
Cloudflare functions solely as your DNS provider if the cloud is gray. This will still result in a performance benefit if your original DNS provider was slow, however the impact will be minimal.
Cloudflare Super Page Cache (Free)
https://wordpress.org/plugins/wp-cloudflare-page-cache/
Enables many Cloudflare paid features for free!
Cache Ajax Requests
Cloudflare Super Page Cache (Free)
https://wordpress.org/plugins/wp-cloudflare-page-cache/
Cloudflare Super Page Cache can cache Ajax get requests (not post requests sadly)
Uncheck the box in “do not cache dynamic content” titled “Ajax Requests”
Limitations
If the Ajax requests are coming from a plugin that uses Ajax Nonces, the page/ajax will not be able to be cached.
See the developer’s explanation here:
https://wordpress.org/support/topic/how-to-correctly-cache-or-bypass-ajax-requests/
Signed Exchanges
https://blog.cloudflare.com/automatic-signed-exchanges-desktop-android
Note: This functionality is available for the domains proxied through Cloudflare. Please ensure that the proxy status is set to Cloudflare (orange cloud).
App For Cloudflare
Unlock advanced Cloudflare features without being a network administrator or developer. Works with any Cloudflare plan (including Free), no APO subscription needed.
Cloudflare + NGINX
https://blog.cloudflare.com/http-2-prioritization-with-nginx/
Cloudflare Argo Traffic Routing (Paid)
https://www.cloudflare.com/application-services/products/argo-smart-routing/
“Argo delivers web traffic over the fastest links available resulting in noticeably faster web assets and improved end-user experience, resulting in faster loading times.
Cloudflare APO (Automatic Platform Optimization) For Wordpress (Paid)
https://www.cloudflare.com/application-services/products/automatic-platform-optimization/
Powered by the Cloudflare's Edge
“Automatic Platform Optimization serves both static and dynamic content from Cloudflare edge reducing costly round trips to the origin and server processing time. All the communication occurs between the user’s device and Cloudflare edge and
Automatic Platform Optimization bypasses the cache on standard WordPress and WooCommerce cookies for authenticated users. This ensures customized content for a specific user is only visible to that user. Fonts are rehosted and served from our cache.”
Enhanced HTTP/2 Prioritization
Optimizes the order of resource delivery, independent of the browser. Greatest improvements will be experienced by visitors using Safari and Edge browsers.
Cache Reserve (Paid)
Increase your cache hit ratio and avoid unnecessary trips to the origin
Automatically store all cacheable files in Cloudflare's object storage buckets for longer periods and minimize egress costs.
Response Buffering (Paid, and Expensive)
Enable or disable buffering of responses from the origin server
(Requires the Expensive Enterprise Plan)
Rocket Loader
Do not enable Rocket Loader
Rocket Loader is almost always problematic most of the time and can often break functionality, leave it disabled. I recommend never using this feature.
Batch Install Every Free Optimization Plugin
Note: This list has not been updated in a few months and there are a significant number of new additions in the guide that will soon be included.
WPFavs (Free)
https://wordpress.org/plugins/wpfavs/
Plugin which allows you to import batch plugin installation templates from the WP Favs website to install a group of plugins automatically from wordpress.org/plugins. You can choose to install them all, or just choose the ones you want out of the premade list, then install them in bulk in one click.
WP Favs List Code:
JAuOGP5BZICR5LmBsPANN9kpKHfiie
Paid Plugins are not included in the batch installation
Everything else in the guide has been included in the batch installation list above. Just enter the code in the WP Favs plugin settings, and you’re good to go.
MISCELLANEOUS
Grafana - Observability monitoring (Free)
Compose and scale observability with a free and open-source stack
Rest API Performance
https://www.spacedmonkey.com/2023/02/03/rest-api-performance-with-jonny-harris/
Instant Temporary Wordpress Sites
TasteWP (Freemium)
InstaWP (Freemium)
Wordpress Playground (Free)
https://wordpress.org/playground/
Temporary Wordpress site which exists only in your browser and all data is deleted once the tab is closed.
Wordpress Playground Sandbox/Instant Dev Site (Free)
https://wordpress.org/plugins/playground/
With this plugin, you can:
Create a copy of your site in a private WordPress Playground instance.
Test plugins from the WordPress plugin directory without actually installing them on your site.
Your site’s data is shipped directly to your web browser where it stays only as long as you keep your browser tab open. That’s right! WordPress Playground runs a copy of your site directly on your device.
Admin And Site Enhancements (Free)
https://wordpress.org/plugins/admin-site-enhancements/
Awesome plugin which combines the features of various plugins to modify the admin dashboard, all into one! I’d personally put this one on every site as it has so many nice QOL features.
Website Sitemap and Wireframe Generator
Relume (Freemium)
Speed Logger
Speed Logger runs regular speed tests on your pages to monitor pagespeed on a day to day basis.
Official Matrix Chat for Wordpress (Free)
https://wordpress.org/plugins/chatrix/
An official free Matrix Chat client for Wordpress
Accessibility Scanners
Wave (Free)
WAVE is a suite of evaluation tools that helps authors make their web content more accessible to individuals with disabilities. WAVE can identify many accessibility and Web Content Accessibility Guideline (WCAG) errors, but also facilitates human evaluation of web content.
Editoria11y Accessibility Checker (Free)
https://wordpress.org/plugins/editoria11y-accessibility-checker/
Editoria11y (“editorial accessibility ally”) is a quality assurance tool built for an author’s workflow:
It provides instant feedback. Authors do not need to remember to press a button or visit a dashboard to check their work.
It checks in context on pages, not just within the post editor, allowing it to test content edited in widgets or theme features.
It focuses exclusively on content issues: assisting authors at improving the things that are their responsibility.
It is meant to supplement, not replace, testing your code and visual design with developer-focused tools and testing practices.
Accessibility Checker (Free)
https://wordpress.org/plugins/accessibility-checker/
Accessibility Checker automatically scans your content each time you save a draft or hit publish, giving you real-time feedback on your post’s or page’s accessibility. Receive a visual overview of how your content stacks up against more than 40 different accessibility checks created to meet Web Content Accessibility Guidelines (WCAG) 2.1 success criteria.
For each error or warning flagged, Accessibility Checker lists the code that triggered the error or warning. Each item is identified as an error or warning depending upon its severity, so that you can prioritize your fixes. Thorough documentation is available to guide you on how to fix accessibility problems on your website and personalized accessibility remediation assistance and accessibility consulting is available if desired.
Kevin Leary’s Tools
https://www.kevinleary.net/blog/test-website-ada-compliance-wcag-accessibility/
Remove Backgrounds from PNGS (Free)
https://gemoo.com/tools/remove-background/
Remove backgrounds from PNGs to make them transparent
Website Architecture Analysis
Built With (Free)
Great site for a quick analysis of a Website’s tech stack.
Free Open Source Project Management Tool
Taiga (Free)
Amazing free open source project management tool.
Load testing
Locust (Free)
Self-Hosted Open Source Load Testing software written in Python.
Loader.io (Freemium)
Load testing tool with up to 100k concurrent user simulation on the generous free plan.
Yandex Tank (Free)
https://github.com/yandex/yandex-tank
Free load testing tool from Yandex
AI
CodeWP (Freemium)
Nifty site to create things for functions and plugins for Wordpress with AI.
ChatGPT (Freemium)
ChatGPT can produce code for you for Wordpress. The paid ChatGPT 4 is obviously going to produce better code.
Gemini (Freemium)
Google’s Gemini AI can also write code for you. Different model than ChatGPT, can produce better results. Try them both, see which one you prefer.
Analytics
Perplexity (Freemium)
Claude (Freemium)
Meta (Freemium)
Open Source Models
Hugging Face (Free)
LMStudio (Free)
GPT4ALL (Free)
LoLLMs (Free)
https://github.com/ParisNeo/lollms
Ollama (Free)
Awesome AI (Free)
https://github.com/re50urces/Awesome-AI
AI mega-resource. The repository contains AI tools to do a variety of things. Great resource.
Fabric (Free)
https://github.com/danielmiessler/fabric
Community curated prompts
Fabric has Patterns for all sorts of life and work activities, including:
Extracting the most interesting parts of YouTube videos and podcasts.
Writing an essay in your own voice with just an idea as an input.
Summarizing opaque academic papers.
Creating perfectly matched AI art prompts for a piece of writing.
Rating the quality of content to see if you want to read/watch the whole thing.
Getting summaries of long, boring content.
Explaining code to you.
Turning bad documentation into usable documentation.
Creating social media posts from any content input.
And bunch more
Analytics
Fully Locally Host Your Analytics
Locally hosting your analytics js files will result in a performance improvement due to reduced network latency and roundtrip time. Always locally host your analytics JS files when possible!
Host Everything Locally (Free)
https://github.com/Dan0sz/host-everything-locally
Fullstory (Paid)
Comprehensive analytics platform. Could be useful.
Microsoft Clarity (Free)
https://clarity.microsoft.com/
Highly recommended! Drop-in Hotjar replacement, and 100% free.
Locally hosting analytics files will reduce network latency and roundtrip time, therefore increasing your website’s performance. Always locally host analytics scripts!
Server Side Event Tracking
https://www.kevinleary.net/blog/building-a-server-side-event-tracking-application/
More users are using ad blockers than ever, preventing accuracy in client-side event metric tracking. Here’s a great blog on how to implement server side tracking so that you get accurate metrics.
Open Source Analytics Tools (Free)
https://posthog.com/blog/best-open-source-analytics-tools
PostHog (Freemium)
Plausible (Free)
Graphana (Free)
GrowthBook (Free)
https://github.com/growthbook/growthbook
OpenReplay (Free)
Apache Superset (Free)
https://github.com/apache/superset
Mojito A/B Testing (Free)
https://github.com/mint-metrics/mojito
https://github.com/mint-metrics/mojito-js-delivery
A modular, source-controlled split testing framework that lets you build, launch and analyze experiments via Git/CI. Mojito’s JS file is just 5 kb, very well optimized.
Countly (Free)
https://github.com/Countly/countly-server
OpenWebAnalytics (Free)
https://github.com/Open-Web-Analytics/Open-Web-Analytics
Track visitors, pageviews, e-commerce transactions, and configurable actions
Track unlimited number of websites using a single instance of OWA Server
First party Javascript tracker client
Reporting Dashboard/Portral
View and customize all reports
Generate Heatmaps
Generate "Domstream" session recordings
Geolocation of visitors
REST API for administration and data access
Multi user reporting interface
Extensible framework via custom modules
Open Web Analytics Wordpress Plugin (Free)
https://wordpress.org/plugins/open-web-analytics/
Matomo Analytics (Free)
https://wordpress.org/plugins/matomo/
Google Analytics replacement, full local hosting on your own server is possible!
Matomo On-Premise (Free)
https://matomo.org/how-do-i-install-on-premise/
Unleash A/B Testing (Free)
https://github.com/Unleash/unleash
Build No Code Mobile Apps (Free)
That’s right! You can now build your own mobile app with zero code, entirely for free!
Headless Wordpress on JAMStack
Smashing Magazine
https://www.smashingmagazine.com/2020/02/headless-wordpress-site-jamstack/
Great article on how to build a headless Wordpress site with JAMStack.
Secure Datastores
OpenBao (Free)
https://github.com/openbao/openbao
OpenBao exists to provide a software solution to manage, store, and distribute sensitive data including secrets, certificates, and keys. The OpenBao community intends to provide this software under an OSI-approved open-source license, led by a community run under open governance principles.
Arbitrary key/value secrets can be stored in OpenBao. OpenBao encrypts these secrets prior to writing them to persistent storage, so gaining access to the raw storage isn't enough to access your secrets. OpenBao can write to disk, Consul, and more.
OpenBao can generate secrets on-demand for some systems, such as AWS or SQL databases. For example, when an application needs to access an S3 bucket, it asks OpenBao for credentials, and OpenBao will generate an AWS keypair with valid permissions on demand. After creating these dynamic secrets, OpenBao will also automatically revoke them after the lease is up.
Infrastructure As Code
OpenTofu (Free)
https://github.com/opentofu/opentofu
OpenTofu is an OSS fork of Terraform for building, changing, and versioning infrastructure safely and efficiently (Similar to Ansible). OpenTofu can manage existing and popular service providers as well as custom in-house solutions. This allows a blueprint of your datacenter to be versioned and treated as you would any other code. Additionally, infrastructure can be shared and re-used.
Ansible (Free)
https://github.com/ansible/ansible
Ansible is a radically simple IT automation system. It handles configuration management, application deployment, cloud provisioning, ad-hoc task execution, network automation, and multi-node orchestration. Ansible makes complex changes like zero-downtime rolling updates with load balancers easy. More information on the Ansible website.
How to Pair them
OpenTofu - Provision infrastructure with metadata decoration in a programmatic repeatable way.
Ansible - Configure your newly provisioned infrastructure based on the previously created metadata decoration
Headline Analyzer Tools
Kinsta
https://kinsta.com/blog/headline-analyzer/
Fix Hanging Words in WordPress
https://www.kevinleary.net/blog/fix-hanging-words-wordpress/
Awesome Open Source (Free)
https://awesomeopensource.com/
Awesome WP Speed Up (Free)
Amazing page, has lists of most of the performance plugins out there, tons and tons more that are not listed in the guide:
https://awesomeopensource.com/project/lukecav/awesome-wp-speed-up
Most of these plugins won’t be of any use to you as they are just poorer implementations of the features WP-Rocket, Flyingpress and Perfmatters contain here, but there are a few diamonds in the rough.
Luke Cavs Github Repos (Free)
https://github.com/lukecav?tab=repositories
Some of this guide was sourced from his repos, he also has a lots of stuff not in this guide that may be applicable to your site. He has a bunch of repos, each one is its own beast. Highly recommend browsing through it, tons of goodies. This one can be a real deep dive, prepare to get lost in how much stuff he has.
The repos he maintains also contain resources for many popular plugins. A few examples would be Awesome Elementor or Awesome Gravity Forms, which are mega wiki pages that contain almost every resource and addon available for both plugins. He has over 100 repos.
Purifycss (Free)
Critical CSS Generator
IcoMoon (Free)
SVG Icons
Admin and Site Enhancements (Free and Pro)
https://wordpress.org/plugins/admin-site-enhancements/
Collection of quality of life tweaks for the Wordpress admin.
Onlinemediamasters
https://onlinemediamasters.com/
Amazing blog with a fantastic amount of optimization articles and guides.
Tools
https://onlinemediamasters.com/tools/
Collection of useful Wordpress tools.
WPSpeedMatters
Very useful blog, has some things not covered by this guide
Kinsta’s blog
Useful info, techniques and other things not covered here. I implemented some of the suggestions from their articles that I have not listed in this guide. Also a fantastic resource for many other things related to web development, highly recommended reading.
Performance Checklist Github
https://github.com/flowforfrank/performance-checklist
Perishable Press
Great blog. Interesting plugins, books which look interesting to explore in the future, lots of great articles. Solid resource for optimization.
Dynamic Link Insertion Via Javascript To Improve SEO
https://perishablepress.com/insert-links-external-javascript/
How to Modify GET and POST Requests with WordPress
https://perishablepress.com/modify-get-post-requests-wordpress/
expose_php, Easter Eggs, and .htaccess
https://perishablepress.com/expose-php/
How to Fix _blank Target Vulnerability
https://perishablepress.com/fix-blank-target-vulnerability/
Huge Collection of Code Snippets: HTAccess, PHP, WordPress, jQuery, HTML, CSS
https://perishablepress.com/code-snippets/
How to Modify HTTP Headers in the WordPress Admin Area
https://perishablepress.com/modify-http-headers-wordpress-admin-area/
Free Code Camp Guide
https://www.freecodecamp.org/news/the-ultimate-guide-to-high-performance-wordpress/
Inline SVGs (Free)
https://yoksel.github.io/url-encoder/
Fix plugin conflicts with the Elementor editor
Editor Cleanup For Elementor (Free)
https://wordpress.org/plugins/editor-cleanup-for-elementor/
Editor Cleanup For Elementor is an add-on of Freesoul Deactivate Plugins to clean up the editor of Elementor.
It will not only clean up the assets of other plugins, their PHP code will not run either.
Favicon Generator
Favicomatic (Free)
Generate favicons
Nelio A/B Testing (Freemium)
https://wordpress.org/plugins/nelio-ab-testing/
A/B Testing plugin
OoohBoi Steroids for Elementor (Free)
https://wordpress.org/plugins/ooohboi-steroids-for-elementor/
An awesome set of tools, options and settings that expand Elementor defaults. Instead of creating new Elementor Widgets, these act like an upgrade of existing options or the self-standing panels thing.
Local WP Development
Dev Kinsta (Free)
If you’re interested in developing your Wordpress site on a local server instead of a staging server, I recommend using Dev Kinsta: https://kinsta.com/devkinsta/
LocalWP (Free)
The other option for local Wordpress development is LocalWP: https://www.localwp.com
Temporary Wordpress Hosting
InstaWP (Freemium)
InstaWP is great for temporary wordpress hosting. Free tier sites last ~1 week. If you want to continue working on that temp site, create a backup, erase the existing site, create a new temporary site, restore the backup. You can do this ad infinitum (forever). Somewhat tedious, but free! They also have paid plans with more features.
Great if you need space to work on a demo for a client or can’t afford another hosting plan but need somewhere to work which is accessible over the internet (as opposed to local development).
TasteWP (Freemium)
Free instant temporary Wordpress sites
Uptime Monitoring (Free)
Hetrix Tools (Free)
Free uptime and blacklist monitoring service.
Markup.io (Freemium)
Markup is a great tool for collaborating with clients and your designers, it lets people leave comments and feedback about your page with a live updated UI.
Automate tedious tasks
Zapier (Freemium)
Great automation SAAS
Make (Freemium)
Comparable to Zapier.
Hexomatic (Paid)
Webpage Rip (Free)
Rip portions of web pages or the entire page.
SEO
Learningseo.io (Free)
The de facto best resource to learn about SEO on the internet. Has a full roadmap covering every SEO subject under the sun.
Annie Cushing's Tools (Free)
https://docs.google.com/spreadsheets/d/1Y_ozPDx9PJY8bM7sVSOrvC4bT_8UGKG7qhtbUkW4HbU/edit#gid=0
Great collection of tools and lots of useful resources.
Buzzstream (Freemium)
Say goodbye to tedious list building and ineffective emails with the world’s best outreach CRM.
Search Engine Journal (Free)
https://www.searchenginejournal.com/
Great SEO Blog
Prowly (Paid)
PR Outreach
Note: This is for the personal documentation and not for any commercial purpose. Thankyou
Comments
Post a Comment
Thankyou for your comment. Happy Reading !!!