Let Nginx Add the Trailing Slash, Not WordPress
WordPress loads completely just to redirect /page to /page/. A small nginx map does the same redirect without touching PHP.
Writing about PHP, WordPress, technical SEO, performance, and the occasional deep dive.
WordPress loads completely just to redirect /page to /page/. A small nginx map does the same redirect without touching PHP.
The ISPConfig 3.3.3 security release refuses the include directive in the per-site nginx Directives field. The release notes don't say so, but there is a supported override: a custom blacklist file. Here's what changed and how to fix it.
I made TypeSafe's Jev model play noughts and crosses and checked every move against a perfect solver. The model never changed, but the way I described the board and worded the question took it from 55% to 83% best moves.
A User-Agent whitelist is not enough to let ClaudeBot or GPTBot through the Nginx Bad Bot Blocker once AbuseIPDB is involved. Here is how to verify AI crawlers against their published IP ranges instead.
Meta's crawlers hit one of my servers at 100 requests per minute from 458 different IPs. Here is how to rate limit the whole meta-external family with plain nginx, without breaking Meta ads landing page verification.
A 30-day cache lifetime, and still the page cache kept shrinking overnight. Tracing every code path that purges W3 Total Cache turned up a purge policy that applies to far more than posts, a menu save that wipes the whole cache, and the reason priming right after purging does nothing. Then the purge log caught the real culprit: an SEO plugin wiping the entire cache every time someone opened wp-admin.
A large WordPress site was sitting on 2GB of page cache with far more files than live pages. Digging into W3 Total Cache's disk layout turned up _old files, orphaned directories and a surprising 30-second serve window - so I built a free plugin to make all of it visible.
An Elementor Pro Archive template can stop WordPress from 404ing tag and category URLs that don't exist - returning a 200 soft 404, or a hard fatal if you use the Archive URL dynamic tag. Here's a drop-in mu-plugin fix and why it happens.
Fake Googlebot traffic can quietly hammer your server. Here is how to verify crawlers against Google and Bing's official IP ranges in nginx and drop the impostors.
Elementor 4.1.3 can throw a fatal Call to undefined function is_plugin_active() on the front-end of lean installs. Here's the one-line cause, a drop-in mu-plugin fix, and why it only hits some sites.
If Elementor webhooks aren't sending or WPML can't connect to its servers on an AWS EC2 instance, the problem probably isn't WordPress - it's bind9 causing intermittent DNS failures.
Most AI analytics tools markup API costs by 300-1000%. I built AI Data Stream with a different approach: bring your own AI keys, pay zero markup, and get the context your AI needs to actually explain what’s happening in your data.
If you use Elementor with a caching plugin, then the odds are that you’ve seen pages of your site lose styling after updates. It has been brought up multiple times on GitHub and WordPress forums, but it doesn’t seem like Elementor developers feel it’s their responsibility to fix.
If you've noticed performance issues on WordPress pages that contain a Contact Form 7 form, especially during traffic spikes, you might be experiencing an overlooked problem: uncached API requests.
There are several articles already out there on how to track Elementor form submissions with TagManager. Still, most seem to rely on an element visibility trigger, which is inefficient, or overly elaborate custom JavaScript.
On the 21st of November 2024, Google retired Sitelinks Search Box from SERPs. Although SearchAction is part of the schema.org standard, it was essentially a Google-specific enhancement.
The Nginx Bad Bot Blocker script is fantastic and a no-brainer to install on any Nginx server hosting publicly accessible websites. As great as it is though, I’ve recently noticed a significant increase in the number of attacks on the servers which I administer and websites in general. So I looked into into integrating the
If you find certain areas of your site not working after updating to Elementor 3.18, take this step to fix them.
When using certain CRMs and marketing automation tools, Contact Form 7 submissions can all look like they came from the same form. This is especially noticeable in HubSpot which uses the class on the form tag to identify each form. Unless you specifically add a class to the shortcode then it will look like any
When recently working on a WordPress website that generated pages from an API that aren’t stored in the main site database, I discovered that the W3 Total Cache admin bar link to clear the current page’s cache didn’t work. The ‘Purge Current Page’ link in the Performance menu item works by passing the current post
In the page caching settings of W3 Total Cache there is an option to flush the ‘Post Terms Pages’ when saving or updating a post. This clears the listing pages for any terms that the post has been added to, but it doesn’t clear the listing pages of any parent terms that aren’t checked, even
Get your Logo and Organization schema back after a Yoast update.
How to map a Synology NAS with Windows 11 that you previously had connected with Windows 10
If you find that PDF files aren’t updating after changes, it could be that they are cached by the browser or a CDN such as Cloudflare.
Customizing the invoiceninja V5 client portal colour scheme.
Yoast 11 introduced schema data added by default. If your site already has schema added through your theme then this may break.
If you were previously stripping Yoast HTML comments on your website then there is a good chance that updating to v11.0 will show the new schema data at the top of your website.
If you are using Joomla’s alternative layouts for certain pages, you might want to target those pages with a css class. You could add a class directly into the layout file, but since the layout file is inserted into the main component area this only lets you target that specific area and not the page
It used to be easy to remove core JavaScript files from Joomla’s output by unsetting the script at the top of your template’s index file. unset( $this->_scripts[ JURI::root( true ) . ‘/media/jui/js/bootstrap.min.js’ ] ); For whatever reason, this doesn’t work anymore with Joomla 3.9.
Are you continually telling people to optimise their image filenames before uploading them to a website? Do staff members keep assuring you that they will optimise their filenames in the future whilst having no intention of doing so? Have they said “I’ll go back and do it later” rather than taking 2 seconds to do
The latest ISPConfig hosting panel includes support for Let’s Encrypt free SSL certificates. This makes it easy to secure all domains added to the panel, but it doesn’t have an option to generate a cert for the actual control panel login. Rather than manually installing and configuring a new cert through the command line, there
How to create a double opt-in campaign with Mautic that instantly sends the confirmation email rather than waiting for a campaign to trigger.
If you have a website using WooCommerce and have registered it with the new version of Google Search Console, it's likely that you will get an email notification about 'index coverage' issues for the /my-account/ page.
Example code to update preferred locale with information from WPML using the 'wpmautic_tracking_attributes' filter of the official Mautic WordPress plugin.
A new option was recently added to the official Mautic WordPress plugin (Version 2.1.0), but it won’t do anything out of the box. Here’s how to set it up to track extra information from your logged-in users.
How to install Certbot on a server managed by Serverpilot for free SSL certificates and enable HTTP/2 for a faster website with automated cert renewal.
If you have used Serverpilot to set up your server intending to host Mautic then here is how to add the cron jobs to keep everything running.
On first glance, the blank Mautic theme looks like the perfect starting point for a simple HTML email, you just drag and drop the elements that you need into the layouts, add your images and text, select some colours and it’s done. Unfortunately, after testing the resulting emails in different email clients and web apps
This is a follow-up to the original post about adding Mautic tags to users based on what they view on your site. In this post, I’m going to add (or remove) tags after check out, based on the products that the user bought.
In this article, we are going to add a new field to the article editor screen and use the content of the field to output a canonical link in the head of the page on the article view. At some point, Joomla’s automatically added canonical links were removed as they didn’t work correctly, so this
How to get the Symfony 4 demo app running on Windows without errors. Fix errors related to using the ‘make’ command and get routing and cache clearing working.
Usually, when I install Mautic, there is a bit of back and forth with the client to get the information required to get the job done. This is my list of information that needs to be provided to get Mautic installed and operational in one sitting.
The official WordPress plugin for Mauitc comes with a number of shortcodes, which makes it easy to add Mautic forms and content into posts and pages. One of the shortcodes adds the ability to tag (or un-tag) visitors in Mautic depending on the pages they view. This makes it easy to tag visitors dynamically by using the
Today I was talking to a musician importing thousands of contacts into a newly setup Mautic install. The issue was that the CSV of contacts to import only contained Country Code and Zip columns.
If you get the following error when trying to import contacts into Mautic, it’s likely that the issue is not with the file encoding, but with one of the fields within the file. Invalid file type “text/x-pascal”. Use a file that matches of of the following mime types: “text/csv”, “text/plain”.
Simple on demand Disqus comment loading without any library dependencies. Automatically loads when linked to directly and optionally for search engines.
Having used Mautic for a few clients, I decided to install it on my own site, partly for testing and partly to actually use it’s functionality. Unfortunately, having made an effort to keep my page sizes to a bare minimum, it was depressing to see that the tracking script increased the overall size of my pages
I first ran into this issue after installing a local copy of Mautic to develop some custom Email templates. Everything looks fine until you open up the email builder and images added in the Email Twig template don’t show. The fix is pretty simple if a little counter intuitive.
If you are following the official documentation to use the symfony installer on Windows then it is very likely that you will run into the error: ‘symfony’ is not recognized as an internal or external command, operable program or batch file. Here’s how to fix it.
How to fix fatal errors related to JSON decoding when updating you Joomla core version.