{"id":1282,"date":"2026-09-14T19:38:49","date_gmt":"2026-09-14T19:38:49","guid":{"rendered":"https:\/\/www.ahosting.net\/blog\/?p=1282"},"modified":"2026-09-14T23:24:13","modified_gmt":"2026-09-14T23:24:13","slug":"one-or-more-recommended-modules-are-missing","status":"publish","type":"post","link":"https:\/\/www.ahosting.net\/blog\/one-or-more-recommended-modules-are-missing\/","title":{"rendered":"One or More Recommended Modules Are Missing: How to Read the WordPress Site Health Warning and Fix It on Shared Hosting"},"content":{"rendered":"\n<script type=\"application\/ld+json\">{\"@context\": \"https:\/\/schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"What does the \\\"The optional module, imagick, is not installed or has been disabled\\\" warning mean in WordPress?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Specifically it means WordPress looked for the imagick extension in the PHP your account is running, did not find it loaded, and recorded that as one line inside a larger Site Health test. The wording is generated by core from a list of modules it checks one at a time, so the sentence is identical whichever module is named and tells you nothing about severity on its own. What it does tell you is that imagick was absent at the moment the test ran, on the PHP version the site is using right now. A different PHP version on the same account can produce a different list, which is why the warning often appears immediately after a version change rather than after anything was uninstalled.\"}}, {\"@type\": \"Question\", \"name\": \"Can a WordPress site run normally when recommended modules are missing in 2026?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Typically yes, and that is the whole point of the word recommended. Core marks only two modules as required, and everything else in the test is optional, which means the site keeps serving pages, taking orders and running cron whether or not the named module is present. What changes is quality rather than availability: images are resized by a less capable library, dates and currency sort by byte order instead of locale rules, or an upload is accepted without its type being sniffed properly. The warning is a statement about the ceiling your PHP build puts on WordPress, not a statement that anything is broken.\"}}, {\"@type\": \"Question\", \"name\": \"What should I do first when Site Health reports recommended modules are missing?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"First and foremost, read which module is named before you touch anything, because the list under the heading is the only part that carries information. Expand the Site Health entry, write down every module it lists, then check the PHP version the site is running, since those two facts together explain almost every instance of this warning. Only after that does it make sense to open the PHP settings in cPanel. Changing a PHP version to clear a warning you have not read is the most common way people turn a cosmetic notice into a site that throws fatal errors on a plugin that was never tested on the new version.\"}}, {\"@type\": \"Question\", \"name\": \"imagick vs gd: which one matters more when recommended modules are missing?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"In practice gd matters more, because gd is what keeps working when imagick is absent. Core treats gd as the declared fallback for imagick, so a site with gd and no imagick still resizes every upload, still builds every thumbnail and still serves responsive image sets. The visible cost is fidelity on resizing and the loss of PDF thumbnails in the media library. The situation that actually hurts is the one nobody looks for: both absent at once, because the fallback rule changes what core does about it rather than simply adding a second line to the same warning.\"}}, {\"@type\": \"Question\", \"name\": \"intl vs mbstring: which missing PHP module breaks more on a WooCommerce store?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"By contrast with imagick, both of these are felt by shoppers rather than by editors, and intl is the one that bites hardest on a store selling across borders. The intl extension carries the Unicode locale rules that decide how a price, a date and a sorted list of names are formatted for a given country, so without it those fall back to a generic representation that is correct English and wrong everywhere else. The mbstring extension matters wherever product names, addresses or reviews contain characters outside plain Latin text. A store trading in one country in English notices neither; a store trading in six notices both.\"}}, {\"@type\": \"Question\", \"name\": \"Can I fix recommended modules are missing myself on AHosting shared hosting?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Fortunately for most of the modules the answer is yes, and it takes about a minute. Every AHosting shared and WordPress plan includes selectable PHP versions, and the same cPanel screen that chooses the version carries the extension list for it, so enabling a module is a checkbox rather than a ticket. The exception is a module that depends on a library installed at the operating-system level rather than inside PHP: if that library is not on the server, the checkbox for it does not exist to be ticked. That case is the one worth a support ticket, and the guide above shows how to tell the two apart in the interface itself.\"}}, {\"@type\": \"Question\", \"name\": \"Does AHosting enable imagick by default, and how do I check it in 2026?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Accordingly the honest answer is that you should check rather than take anyone's word for it, including ours, because the loaded extension list belongs to the PHP version the account is running and that is a per-account setting you control. Open Select PHP Version in cPanel and read the extension list for the version currently selected, which is the authoritative answer for your account at this moment. The command line gives the same answer faster if you prefer it, and every plan includes a jailed shell, so php -m printed from cPanel Terminal lists every module PHP has actually loaded.\"}}, {\"@type\": \"Question\", \"name\": \"Why does the recommended modules are missing warning come back after a PHP version change?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Indeed this is the single most common way the warning appears on a site that was clean yesterday, and the reason is that the extension list is a property of the version, not of the account. Each installed PHP version keeps its own configuration directory and loads its own set of modules, so switching from one to another swaps the whole list rather than carrying your selections across. A module you ticked two years ago on an older version is simply not ticked on the new one. Re-running Site Health straight after any version change, and re-ticking what the previous version had, turns this from a mystery into a two-minute step.\"}}, {\"@type\": \"Question\", \"name\": \"Will clearing recommended modules are missing speed up an AHosting WordPress site in 2026?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Ultimately no, and it is worth being blunt about that because the warning sits under a badge marked Performance and invites exactly this hope. Enabling imagick does not make pages render faster for visitors; it changes the quality of images produced when a file is uploaded, which is work that happens once per upload and never during a page view. The module most likely to affect what a visitor experiences is an object cache, and that is a separate Site Health entry with a separate recommendation. Treat this warning as a correctness and capability question, and look elsewhere for speed.\"}}, {\"@type\": \"Question\", \"name\": \"Is libsodium missing from Site Health a problem I should be worried about?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Interestingly you will almost certainly never see it named, because core skips the check entirely on any PHP version from 7.2 upward, where the extension ships with PHP itself. The test records a failure only when the module is unavailable and the running PHP predates the version that bundled it, so a modern site cannot produce that line whether or not the extension is actually loaded. The same silence covers mcrypt, which core only examines when libsodium has already failed. If you are running a supported PHP version, these two are outside what this test is able to report to you at all.\"}}]}<\/script>\n\n\n<div class=\"wp-block-aioseo-table-of-contents\"><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-what-one-or-more-recommended-modules-are-missing-actually-means\">What &quot;One or More Recommended Modules Are Missing&quot; Actually Means<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-why-site-health-says-recommended-modules-are-missing-rather-than-broken\">Why Site Health Says Recommended Modules Are Missing Rather Than Broken<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-why-the-module-names-do-not-match-anything-you-can-install\">Why the Module Names Do Not Match Anything You Can Install<\/a><\/li><\/ul><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-the-fallback-chain-behind-the-recommended-modules-are-missing-warning\">The Fallback Chain Behind the Recommended Modules Are Missing Warning<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-the-wordpress-php-module-fallback-chain\">The WordPress PHP Module Fallback Chain<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-when-a-warning-silently-becomes-a-critical\">When a Warning Silently Becomes a Critical<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-the-two-modules-site-health-can-never-warn-you-about\">The Two Modules Site Health Can Never Warn You About<\/a><\/li><\/ul><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-what-each-missing-module-actually-costs-you\">What Each Missing Module Actually Costs You<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-the-ahosting-php-module-impact-ladder\">The AHosting PHP Module Impact Ladder<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-imagick-is-the-one-with-a-memory-bill\">imagick Is the One With a Memory Bill<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-intl-is-the-one-a-woocommerce-store-should-care-about\">intl Is the One a WooCommerce Store Should Care About<\/a><\/li><\/ul><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-the-handbook-the-warning-links-to-disagrees-with-the-warning\">The Handbook the Warning Links To Disagrees With the Warning<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-how-to-fix-recommended-modules-are-missing-on-an-ahosting-cpanel-plan\">How to Fix Recommended Modules Are Missing on an AHosting cPanel Plan<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-what-to-do-when-the-module-is-not-in-the-list\">What to Do When the Module Is Not in the List<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-why-enabling-every-module-is-the-wrong-instinct\">Why Enabling Every Module Is the Wrong Instinct<\/a><\/li><\/ul><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-decode-the-module-named-in-your-warning\">Decode the Module Named in Your Warning<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-a-practical-checklist-for-clearing-recommended-modules-are-missing\">A Practical Checklist for Clearing Recommended Modules Are Missing<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-one-or-more-recommended-modules-are-missing\">Frequently Asked Questions About Missing WordPress PHP Modules<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#faq-optional-module-imagick-is-not-installed-or-has-been-disabled\">What does the &quot;The optional module, imagick, is not installed or has been disabled&quot; warning mean in WordPress?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-site-run-normally-recommended-modules-are-missing-2026\">Can a WordPress site run normally when recommended modules are missing in 2026?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-what-to-do-first-site-health-reports-recommended-modules-are-missing\">What should I do first when Site Health reports recommended modules are missing?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-imagick-vs-gd-recommended-modules-are-missing\">imagick vs gd: which one matters more when recommended modules are missing?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-intl-vs-mbstring-woocommerce-store\">intl vs mbstring: which missing PHP module breaks more on a WooCommerce store?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-fix-recommended-modules-are-missing-ahosting-shared-hosting\">Can I fix recommended modules are missing myself on AHosting shared hosting?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-does-ahosting-enable-imagick-by-default-check-2026\">Does AHosting enable imagick by default, and how do I check it in 2026?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-recommended-modules-are-missing-returns-after-php-version-change\">Why does the recommended modules are missing warning come back after a PHP version change?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-clearing-recommended-modules-are-missing-speed-ahosting-2026\">Will clearing recommended modules are missing speed up an AHosting WordPress site in 2026?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-libsodium-missing-from-site-health-worried\">Is libsodium missing from Site Health a problem I should be worried about?<\/a><\/li><\/ul><\/li><\/ul><\/div>\n\n\n<div class=\"ah-tldr\"> <span class=\"ah-tldr-badge\">TL;DR<\/span> <p>Site Health tests twenty PHP modules and marks only two of them required, so a heading saying recommended modules are missing is almost always a quality ceiling rather than a fault. Read the module names under it, not the heading. Four of those modules are fallbacks for other modules, and a missing fallback is the one case that turns the warning into a red critical &#8212; which is why the same screen can go from yellow to red without anything new breaking.<\/p> <\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Site Health puts a blue Performance badge beside it, which makes it read like a speed problem, and it is not one. When WordPress reports that one or more <strong>recommended modules are missing<\/strong>, it has finished a test that walks a fixed list of PHP extensions and records which ones your server did not load. Almost every entry on that list is optional by design, so the heading is a statement about the ceiling your PHP build puts on WordPress rather than a fault report. The useful information is in the module names printed underneath it, and in one rule about fallbacks that decides whether this stays a yellow warning or turns red. This guide covers both, and what to do about each module on a cPanel account.<\/p>\n\n\n\n<figure class=\"wp-block-audio\"><audio controls src=\"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/09\/PODCAST-one-or-more-recommended-modules-are-missing.m4a\"><\/audio><figcaption class=\"wp-element-caption\">Listen: Site Health tests around twenty PHP modules and marks only two of them required, which is why this warning is a ceiling rather than a fault. By Matt Chrust, Director of Business Development, AHosting.<\/figcaption><\/figure>\n\n\n\n<h2 id=\"aioseo-what-one-or-more-recommended-modules-are-missing-actually-means\" class=\"wp-block-heading\">What &#8220;One or More Recommended Modules Are Missing&#8221; Actually Means<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The heading is generated, not written. Core keeps a list of roughly twenty PHP modules, tests for each one in turn by looking for a function, a class, a constant or a loaded extension, and collects a line for every module it cannot find. If the collection is empty, the test reports that required and recommended modules are installed. If it is not empty, the heading changes to say that recommended modules are missing, or something stronger. So the sentence you are reading was assembled from whatever failed, and it will say exactly the same thing whether one module is absent or nine are. The color of the badge and the list beneath it are the only parts that vary. Site Health is worth reading this way generally: its other entries, like the <a href=\"https:\/\/www.ahosting.net\/blog\/your-site-could-not-complete-a-loopback-request\/\">loopback request test<\/a>, behave the same way and are equally often misread as outages.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Recommended Modules Are Missing in WordPress: Fixed (2026)\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/zowecpAtM9I?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h3 id=\"aioseo-why-site-health-says-recommended-modules-are-missing-rather-than-broken\" class=\"wp-block-heading\">Why Site Health Says Recommended Modules Are Missing Rather Than Broken<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Core marks only two of the modules it tests as required: the hashing extension and the JSON extension. Everything else in the list is flagged optional. That distinction is not cosmetic, because it changes the status the whole test returns. An optional module that is absent sets the status to recommended, which is the yellow badge and the wording you are looking at. A required module that is absent sets the status to critical, which is red and a different heading entirely. A site that can boot far enough to render the Site Health screen has both required modules by definition, since WordPress cannot run without either of them. In other words, the yellow version of this warning is the only version most people will ever see, and it can never by itself mean the site is broken.<\/p>\n\n\n\n<h3 id=\"aioseo-why-the-module-names-do-not-match-anything-you-can-install\" class=\"wp-block-heading\">Why the Module Names Do Not Match Anything You Can Install<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When recommended modules are missing, two of the entries are named after the array key core uses internally rather than after the PHP extension you would go and enable, and both of them waste people an afternoon. The first is mod_xml, which tests for the libxml extension; searching for a PHP extension called mod_xml returns nothing because there is no such extension. The second is libsodium, which tests for a constant belonging to the extension PHP calls sodium. Search <a href=\"https:\/\/doc.libsodium.org\/\" target=\"_blank\" rel=\"noopener\">the libsodium project documentation<\/a> and you will find a C library, not a checkbox. Both translations matter in the one place they are used, the extension list in cPanel, where your account sits <a href=\"https:\/\/www.ahosting.net\/web-hosting.html\">isolated under CageFS<\/a> with its own PHP configuration. Look for libxml and for sodium; the names Site Health prints are not the names the interface uses.<\/p>\n\n\n\n<div class=\"ah-infographic\"> <svg viewBox=\"0 0 720 400\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-label=\"How one missing PHP module produces a yellow warning while two produce a red critical: imagick alone is covered by its declared fallback gd, but when gd is missing as well core promotes gd to required and the whole Site Health test changes status.\"> <title>Why the same Site Health test turns from yellow to red<\/title> <desc>WordPress checks imagick. If imagick is missing, core checks whether its declared fallback, gd, is present. If gd is present, the test records one optional-module warning and the heading reads that one or more recommended modules are missing. If gd is also missing, core promotes gd from optional to required for this run, the test status becomes critical, and the heading changes to say that required modules are missing. Nothing else about the site has changed.<\/desc> <rect x=\"0\" y=\"0\" width=\"720\" height=\"400\" fill=\"#0f172a\"\/> <text x=\"32\" y=\"40\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"19\" font-weight=\"700\">One missing module is yellow. Two can be red.<\/text> <text x=\"32\" y=\"63\" fill=\"#eef3ff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"13\">A fallback is only tested when the module it covers has already failed, and then it counts as required.<\/text> <rect x=\"32\" y=\"92\" width=\"196\" height=\"76\" fill=\"#1e293b\" stroke=\"#334155\" stroke-width=\"1\"\/> <text x=\"48\" y=\"118\" fill=\"#60a5fa\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"13\" font-weight=\"700\">1. Core checks imagick<\/text> <text x=\"48\" y=\"139\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\">Marked optional in the list<\/text> <text x=\"48\" y=\"158\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\">of modules it tests<\/text> <rect x=\"260\" y=\"92\" width=\"196\" height=\"76\" fill=\"#1e293b\" stroke=\"#f59e0b\" stroke-width=\"2\"\/> <text x=\"276\" y=\"118\" fill=\"#f59e0b\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"13\" font-weight=\"700\">2. It is not loaded<\/text> <text x=\"276\" y=\"139\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\">One warning line is recorded,<\/text> <text x=\"276\" y=\"158\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\">naming imagick<\/text> <rect x=\"488\" y=\"92\" width=\"200\" height=\"76\" fill=\"#1e293b\" stroke=\"#334155\" stroke-width=\"1\"\/> <text x=\"504\" y=\"118\" fill=\"#60a5fa\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"13\" font-weight=\"700\">3. Now gd is checked<\/text> <text x=\"504\" y=\"139\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\">Its declared fallback, tested<\/text> <text x=\"504\" y=\"158\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\">only because imagick failed<\/text> <rect x=\"32\" y=\"206\" width=\"320\" height=\"106\" fill=\"#1e293b\" stroke=\"#2563eb\" stroke-width=\"2\"\/> <text x=\"48\" y=\"232\" fill=\"#60a5fa\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"13\" font-weight=\"700\">gd is present<\/text> <text x=\"48\" y=\"254\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\">Status stays at recommended. The heading<\/text> <text x=\"48\" y=\"273\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\">reads that recommended modules are<\/text> <text x=\"48\" y=\"292\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\">missing. Images still resize.<\/text> <rect x=\"384\" y=\"206\" width=\"304\" height=\"106\" fill=\"#1e293b\" stroke=\"#f59e0b\" stroke-width=\"2\"\/> <text x=\"400\" y=\"232\" fill=\"#f59e0b\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"13\" font-weight=\"700\">gd is missing too<\/text> <text x=\"400\" y=\"254\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\">Core promotes gd to required for this<\/text> <text x=\"400\" y=\"273\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\">run. Status becomes critical and the<\/text> <text x=\"400\" y=\"292\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\">heading says required, not recommended.<\/text> <text x=\"32\" y=\"350\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"13\" font-weight=\"700\">Four modules behave this way: gd, mcrypt, simplexml and xmlreader, plus zlib behind zip.<\/text> <text x=\"32\" y=\"372\" fill=\"#eef3ff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\">A fallback that is present is never mentioned at all, so it cannot be read off the screen.<\/text> <\/svg> <\/div>\n\n\n\n<h2 id=\"aioseo-the-fallback-chain-behind-the-recommended-modules-are-missing-warning\" class=\"wp-block-heading\">The Fallback Chain Behind the Recommended Modules Are Missing Warning<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Five of the modules in the list are not tested on their own terms at all. Each one is declared as a fallback for another module, and core handles them with a rule that is easy to state and almost never stated: a fallback is examined only if the module it covers has already failed. If the primary module is present, the fallback is skipped entirely and can never appear in the warning, whether or not it is installed. If the primary module has failed, the fallback is examined and, for the duration of that check, it is treated as required rather than optional. One rule, two consequences, and the second one is the reason a screen reporting that recommended modules are missing sometimes turns red without anything new having gone wrong.<\/p>\n\n\n\n<h3 id=\"aioseo-the-wordpress-php-module-fallback-chain\" class=\"wp-block-heading\">The WordPress PHP Module Fallback Chain<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Read from WordPress core on 2026-09-14. Whenever recommended modules are missing, each row here is a pair core will never report together in the ordinary case, because the second column is invisible while the first column is healthy.<\/p>\n\n\n\n<figure class=\"wp-block-table ah-ladder\"><table><thead><tr><th>Module core tests first<\/th><th>Its declared fallback<\/th><th>If only the first is missing<\/th><th>If both are missing<\/th><\/tr><\/thead><tbody><tr><td>imagick<\/td><td>gd<\/td><td>One optional line. Status stays recommended.<\/td><td>gd is promoted to required. Status becomes critical.<\/td><\/tr><tr><td>zip<\/td><td>zlib<\/td><td>One optional line. Status stays recommended.<\/td><td>zlib is promoted to required. Status becomes critical.<\/td><\/tr><tr><td>mod_xml (tests libxml)<\/td><td>simplexml and xmlreader<\/td><td>One optional line. Status stays recommended.<\/td><td>Either fallback missing promotes it to required. Status becomes critical.<\/td><\/tr><tr><td>libsodium (tests sodium)<\/td><td>mcrypt<\/td><td>Nothing is reported on PHP 7.2 or newer.<\/td><td>Nothing is reported on PHP 7.2 or newer.<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">The WordPress PHP Module Fallback Chain, read from core source on 2026-09-14. A fallback that is present is never named, so it cannot be read off the Site Health screen.<\/figcaption><\/figure>\n\n\n\n<h3 id=\"aioseo-when-a-warning-silently-becomes-a-critical\" class=\"wp-block-heading\">When a Warning Silently Becomes a Critical<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Picture a site with gd and without imagick, which is an extremely common shape. It reports that recommended modules are missing, names imagick, and everything works. Now the account is moved to a newly installed PHP version where neither image library has been enabled yet. Core tests imagick, fails, then tests gd because imagick failed, fails again, and promotes gd to required for that run. The badge goes red and the heading stops saying recommended. Nothing about the site changed except the PHP version, and no new component broke. This is the same class of surprise as <a href=\"https:\/\/www.ahosting.net\/blog\/could-not-establish-a-secure-connection-to-wordpress-org\/\">the update-check warning that appears after a server change<\/a>: the underlying state moved, and a test that was always running simply started reporting it differently.<\/p>\n\n\n\n<h3 id=\"aioseo-the-two-modules-site-health-can-never-warn-you-about\" class=\"wp-block-heading\">The Two Modules Site Health Can Never Warn You About<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The sodium check carries an extra condition. Core records a failure only when the module is unavailable and the running PHP is older than the version that bundled it, which is 7.2. On any supported PHP version the second half of that condition is false, so no failure is ever recorded, whether or not sodium is loaded. And because mcrypt is examined only when libsodium has already failed, and libsodium can no longer fail, mcrypt is never examined either. Two entries sit in the list permanently unreachable. That is worth knowing before you go looking for them, because their absence from your warning is not evidence that they are present.<\/p>\n\n\n\n<h2 id=\"aioseo-what-each-missing-module-actually-costs-you\" class=\"wp-block-heading\">What Each Missing Module Actually Costs You<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When recommended modules are missing the practical question is never which ones, it is what you lose while they are. Some of these cost fidelity that only an editor would notice. One of them quietly weakens upload validation. One blocks the mechanism every update arrives through. Sorting the list by consequence, rather than working down it alphabetically, is most of the work.<\/p>\n\n\n\n<h3 id=\"aioseo-the-ahosting-php-module-impact-ladder\" class=\"wp-block-heading\">The AHosting PHP Module Impact Ladder<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The last column is the one that decides whether this is yours to fix. A module that is pure PHP is a checkbox on your own account; a module that wraps a library installed at the operating-system level can only be offered if that library is on the server.<\/p>\n\n\n\n<figure class=\"wp-block-table ah-ladder\"><table><thead><tr><th>Module, as Site Health names it<\/th><th>What you enable<\/th><th>What stops working without it<\/th><th>Fallback<\/th><th>Needs a server-side library<\/th><\/tr><\/thead><tbody><tr><td>curl<\/td><td>curl<\/td><td>Outbound requests fall to a slower transport; some plugins refuse to activate<\/td><td>None<\/td><td>Yes, libcurl<\/td><\/tr><tr><td>zip<\/td><td>zip<\/td><td>Unpacking plugin, theme and core update packages<\/td><td>zlib<\/td><td>Yes, <a href=\"https:\/\/libzip.org\/\" target=\"_blank\" rel=\"noopener\">libzip<\/a> 0.11 or newer<\/td><\/tr><tr><td>imagick<\/td><td>imagick<\/td><td>High-fidelity resizing and PDF thumbnails in the media library<\/td><td>gd<\/td><td>Yes, ImageMagick 7.1 or newer<\/td><\/tr><tr><td>intl<\/td><td>intl<\/td><td>Locale-correct dates, currency, number formatting and sorting<\/td><td>None<\/td><td>Yes, <a href=\"https:\/\/icu.unicode.org\/\" target=\"_blank\" rel=\"noopener\">ICU<\/a><\/td><\/tr><tr><td>fileinfo<\/td><td>fileinfo<\/td><td>Detecting an uploaded file type from its contents<\/td><td>None<\/td><td>No<\/td><\/tr><tr><td>mbstring<\/td><td>mbstring<\/td><td>Correct handling of accented and non-Latin text<\/td><td>None<\/td><td>No<\/td><\/tr><tr><td>exif<\/td><td>exif<\/td><td>Reading orientation and capture data from photographs<\/td><td>None<\/td><td>No<\/td><\/tr><tr><td>mod_xml<\/td><td>libxml<\/td><td>Feed reading, imports and any plugin that parses XML<\/td><td>simplexml, xmlreader<\/td><td>Yes, libxml<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">The AHosting PHP Module Impact Ladder. Module names are as WordPress prints them; the second column is the name the cPanel extension list uses.<\/figcaption><\/figure>\n\n\n\n<h3 id=\"aioseo-imagick-is-the-one-with-a-memory-bill\" class=\"wp-block-heading\">imagick Is the One With a Memory Bill<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress ships two image editors and picks between them at runtime, preferring <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_image_editor_imagick\/\" target=\"_blank\" rel=\"noopener\">the Imagick editor<\/a> when the extension is available. Enabling it is not free, and this is the part a host can tell you that a general guide cannot. The extension loads the ImageMagick library into the PHP worker, and ImageMagick keeps its own resource limits in a policy file <a href=\"https:\/\/imagemagick.org\/resources\/\" target=\"_blank\" rel=\"noopener\">separate from any PHP setting<\/a>, including how much memory it will hold a decoded image in. Those limits sit inside your account container, not beside it. A WP Bronze plan publishes 2 GB of account memory and up to 30 concurrent PHP workers; a WP Gold plan publishes 4 GB and 50. Every worker that is resizing a large upload is spending from the same pool, which is the mechanism behind <a href=\"https:\/\/www.ahosting.net\/blog\/wordpress-memory-limit-not-working-shared-hosting\/\">a PHP memory limit that appears not to work<\/a>. The extension itself is <a href=\"https:\/\/pecl.php.net\/package\/imagick\" target=\"_blank\" rel=\"noopener\">a separate package rather than part of PHP<\/a>, which is why it is a checkbox at all.<\/p>\n\n\n\n<h3 id=\"aioseo-intl-is-the-one-a-woocommerce-store-should-care-about\" class=\"wp-block-heading\">intl Is the One a WooCommerce Store Should Care About<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Editors notice imagick. Shoppers notice intl. The extension carries the Unicode locale data that decides how a price, a date and a sorted list of names are rendered for a particular country, and without it those operations fall back to generic rules that read as correct English and as wrong almost everywhere else. A store selling in one country in one language will never see a symptom. A store selling across borders sees them on every invoice, and there is no fallback module standing in. If the extension is not offered on your account it is because the ICU library behind it is missing from the server, which is a different conversation from ticking a box. Anyone running a store should confirm it is loaded before the next <a href=\"https:\/\/www.ahosting.net\/woocommerce-hosting.html\">peak trading period<\/a> rather than during one.<\/p>\n\n\n\n<h2 id=\"aioseo-the-handbook-the-warning-links-to-disagrees-with-the-warning\" class=\"wp-block-heading\">The Handbook the Warning Links To Disagrees With the Warning<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">There is one genuine inconsistency worth knowing about, because it sends people looking for the wrong thing. The description core prints under the recommended modules are missing heading links to <a href=\"https:\/\/make.wordpress.org\/hosting\/handbook\/server-environment\/#php-extensions\" target=\"_blank\" rel=\"noopener\">the WordPress Hosting Team handbook<\/a> as the authoritative list of required and recommended modules. That handbook names the JSON extension and the mysqli extension as required. The Site Health test that printed the link marks the JSON extension and the hashing extension as required, and does not treat mysqli as required at all. The two documents therefore disagree about one entry each, in both directions. Neither is wrong for its own purpose: the handbook describes what a host should provide, while the test describes what core will check for and how it will grade the result. Read the handbook when you are choosing a plan. Read the test when you are reading the test.<\/p>\n\n\n\n<h2 id=\"aioseo-how-to-fix-recommended-modules-are-missing-on-an-ahosting-cpanel-plan\" class=\"wp-block-heading\">How to Fix Recommended Modules Are Missing on an AHosting cPanel Plan<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Every AHosting shared and WordPress plan publishes selectable PHP versions, and on a CloudLinux server the interface that selects the version is <a href=\"https:\/\/docs.cloudlinux.com\/cloudlinuxos\/cloudlinux_os_components\/#php-selector\" target=\"_blank\" rel=\"noopener\">also the interface that carries the extension list for it<\/a>. Each installed version keeps its own configuration directory and loads its own set of modules, which is both how you fix a recommended modules are missing warning and why it comes back after a version change.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open Site Health, expand the entry, and write down every module name it lists. This list is the whole input to the rest of the procedure.<\/li>\n\n\n\n<li>Translate the two names that need it: mod_xml means libxml, and libsodium means sodium.<\/li>\n\n\n\n<li>Open Select PHP Version in cPanel and confirm which version is currently active. If you are unsure whether to change it, <a href=\"https:\/\/www.ahosting.net\/blog\/best-php-version-for-wordpress-cpanel\/\">choose the version first and the extensions second<\/a>.<\/li>\n\n\n\n<li>Switch to the extensions list for that version and tick the modules you noted. Save.<\/li>\n\n\n\n<li>Return to Site Health and re-run it. The entry should clear, or name a shorter list.<\/li>\n\n\n\n<li>If a module you need is not in the list at all, stop. That is the server-library case, and nothing you do on this screen will change it.<\/li>\n<\/ol>\n\n\n\n<h3 id=\"aioseo-what-to-do-when-the-module-is-not-in-the-list\" class=\"wp-block-heading\">What to Do When the Module Is Not in the List<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">An extension that wraps a system library cannot be offered unless the library is installed on the machine. imagick needs ImageMagick, intl needs ICU, zip needs libzip. When one of those is absent from the extension list rather than present and unticked, the fix is a support request naming the module, the PHP version and the site, and it is a reasonable request to make. Where this stops being reasonable is a module that is genuinely unusual, or a specific library version your application pins. At that point you have outgrown what a shared PHP build can be asked to carry, and <a href=\"https:\/\/www.ahosting.net\/vps-hosting.html\">a server with root access<\/a> is the honest answer rather than a sales one, because installing an arbitrary extension is a root operation.<\/p>\n\n\n\n<h3 id=\"aioseo-why-enabling-every-module-is-the-wrong-instinct\" class=\"wp-block-heading\">Why Enabling Every Module Is the Wrong Instinct<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The extension list is long and the checkboxes are free, so the temptation is to tick everything and never read that recommended modules are missing again. Resist it for two reasons. Every loaded extension is memory in every PHP worker, and on a shared plan the workers are counted, so a bloated PHP build reduces how many requests the account can hold at once. And extensions occasionally conflict or change behavior in ways that surface as a fatal error on one plugin rather than as a warning anywhere useful. Tick what Site Health named, re-run the test, and stop. The same restraint applies to the rest of that screen, including <a href=\"https:\/\/www.ahosting.net\/blog\/autoloaded-options-could-affect-performance\/\">the autoloaded options entry<\/a>, where the reflex fix is also worse than the measured one.<\/p>\n\n\n\n<h2 id=\"aioseo-decode-the-module-named-in-your-warning\" class=\"wp-block-heading\">Decode the Module Named in Your Warning<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pick the module Site Health named when it reported that recommended modules are missing. The decoder gives you what that module provides, what you lose without it, whether a fallback is quietly covering for it, and whether the fix is a checkbox or a ticket.<\/p>\n\n\n\n<style> .ahmod-tool{background:#0f172a;border-radius:10px;padding:22px;margin:26px 0;color:#fff;font-size:.95rem} .ahmod-tool h3{color:#fff;margin:0 0 6px;font-size:1.15rem} .ahmod-tool p.ahmod-sub{color:#eef3ff;margin:0 0 18px;font-size:.88rem} .ahmod-row{display:flex;flex-wrap:wrap;gap:14px;margin-bottom:14px} .ahmod-f{flex:1 1 180px} .ahmod-f label{display:block;color:#eef3ff;font-size:.8rem;margin-bottom:5px} .ahmod-f select{width:100%;padding:8px;border:1px solid #334155;border-radius:6px;background:#1e293b;color:#fff;font-size:.9rem} .ahmod-btn{background:#2563eb;color:#fff;border:0;border-radius:6px;padding:10px 20px;font-size:.92rem;cursor:pointer;text-decoration:none;display:inline-block} .ahmod-out{margin-top:18px;padding:16px;background:#1e293b;border-left:4px solid #2563eb;border-radius:6px;display:none} .ahmod-out.ahmod-on{display:block} .ahmod-num{font-size:1.25rem;font-weight:700;color:#60a5fa;display:block;margin-bottom:8px} .ahmod-out p{margin:0 0 10px;color:#fff} .ahmod-out p strong{color:#93c5fd} .ahmod-note{color:#94a3b8;font-size:.78rem;margin-top:12px} <\/style> <div class=\"ahmod-tool\" data-ahmod=\"decoder\"> <h3>Missing Module Impact Decoder<\/h3> <p class=\"ahmod-sub\">Pick the module named in your warning, say what the site does, and it tells you what that module actually provides, what stops working without it, whether a fallback is covering for it, and whether this is a checkbox on your account or a library on the server.<\/p> <div class=\"ahmod-row\"> <div class=\"ahmod-f\"> <label for=\"ahmod-name\">The module named under the heading<\/label> <select id=\"ahmod-name\"> <option value=\"imagick\" selected>imagick<\/option> <option value=\"intl\">intl<\/option> <option value=\"exif\">exif<\/option> <option value=\"fileinfo\">fileinfo<\/option> <option value=\"mbstring\">mbstring<\/option> <option value=\"zip\">zip<\/option> <option value=\"curl\">curl<\/option> <option value=\"mod_xml\">mod_xml<\/option> <option value=\"gd\">gd<\/option> <\/select> <\/div> <div class=\"ahmod-f\"> <label for=\"ahmod-use\">What the site mainly does<\/label> <select id=\"ahmod-use\"> <option value=\"content\">Publishes content and images<\/option> <option value=\"store\">Sells, using WooCommerce<\/option> <option value=\"intl\">Trades in more than one country<\/option> <\/select> <\/div> <div class=\"ahmod-f\"> <label for=\"ahmod-badge\">What color the Site Health entry is<\/label> <select id=\"ahmod-badge\"> <option value=\"rec\">Yellow, recommended<\/option> <option value=\"crit\">Red, critical<\/option> <\/select> <\/div> <\/div> <button class=\"ahmod-btn wp-element-button\" id=\"ahmod-go\" type=\"button\">Decode it<\/button> <div class=\"ahmod-out\" id=\"ahmod-out\"> <span class=\"ahmod-num\" id=\"ahmod-num\">&#8212;<\/span> <p><strong>What the module provides:<\/strong> <span id=\"ahmod-what\"><\/span><\/p> <p><strong>What stops working without it:<\/strong> <span id=\"ahmod-cost\"><\/span><\/p> <p><strong>Is anything covering for it:<\/strong> <span id=\"ahmod-fb\"><\/span><\/p> <p><strong>Do this first:<\/strong> <span id=\"ahmod-first\"><\/span><\/p> <p class=\"ahmod-note\">The decoder reads the module list the way core builds it: every entry is optional unless it is standing in for something that has already failed. It cannot see which extensions your PHP version actually loaded, so confirm against the extension list in cPanel before changing anything.<\/p> <\/div> <\/div> <script> (function(){ document.addEventListener('DOMContentLoaded', function(){ var tool = document.querySelector('[data-ahmod]'); if (!tool) { return; } var mode = tool.getAttribute('data-ahmod'); if (mode !== 'decoder') { return; } var go = document.getElementById('ahmod-go'); if (!go) { return; } var out = document.getElementById('ahmod-out'); if (!out) { return; } var num = document.getElementById('ahmod-num'); if (!num) { return; } var what = document.getElementById('ahmod-what'); if (!what) { return; } var cost = document.getElementById('ahmod-cost'); if (!cost) { return; } var fb = document.getElementById('ahmod-fb'); if (!fb) { return; } var first = document.getElementById('ahmod-first'); if (!first) { return; } var M = {}; M['imagick'] = ['Image quality, not image availability.', 'A wrapper around the ImageMagick library, used by the better of the two image editors WordPress ships with.', 'Resizing falls to gd, which produces visibly softer results on photographic detail, and PDF thumbnails in the media library stop being generated.', 'Yes. gd is the declared fallback and is present on almost every build, which is why this is a warning rather than a failure.', 'Look for imagick in the extension list of the PHP version the site is running. It needs the ImageMagick library on the server, so if it is absent from the list entirely, that is the ticket case.']; M['intl'] = ['Locale correctness for anything a human reads.', 'The Unicode locale rules that decide how dates, numbers, currency and sorted lists are formatted for a given country.', 'Formatting and sorting fall back to generic rules that are right in English and wrong in most other locales, which shows up in prices, dates and name ordering.', 'No. Nothing in the module list stands in for intl, so its absence is felt directly.', 'Enable intl in the extension list, then reload any page that prints a formatted price or date and confirm the change took effect.']; M['exif'] = ['Correct orientation on uploaded photographs.', 'Reading the metadata a camera or phone writes into an image file, including which way up it was held.', 'Photographs taken in portrait can be stored and displayed rotated, and the capture data WordPress would otherwise keep is lost.', 'No. There is no fallback for exif in the module list.', 'Enable exif, then re-upload one photograph that was previously rotated to confirm it is now read correctly.']; M['fileinfo'] = ['Knowing what an uploaded file really is.', 'Detection of a file type from its contents rather than from the extension a visitor typed.', 'Uploads are validated more weakly, and some plugins that inspect files before accepting them will refuse to run at all.', 'No. There is no fallback for fileinfo in the module list.', 'Enable fileinfo. This one is worth doing promptly because the gap it leaves is a security gap rather than a cosmetic one.']; M['mbstring'] = ['Handling text that is not plain Latin.', 'String functions that count, cut and convert multibyte characters correctly.', 'Titles, addresses and reviews containing accented or non-Latin characters can be truncated mid-character, which corrupts the text rather than shortening it.', 'No. There is no fallback for mbstring in the module list.', 'Enable mbstring before importing any content in a language other than English, because the damage happens on write and is not reversible by enabling it afterwards.']; M['zip'] = ['Unpacking the archives every update arrives in.', 'Reading and writing zip archives, which is how plugin, theme and core update packages are delivered.', 'Installing and updating from the dashboard can fail at the unpacking step, which is a far more visible symptom than the warning itself.', 'Yes. zlib is the declared fallback, and if zlib is missing as well the whole test turns critical.', 'Enable zip, then run one plugin update from the dashboard to confirm the unpacking step now completes.']; M['curl'] = ['Every outbound request the site makes.', 'The library WordPress prefers for talking to other servers, including the update service and every payment or mail API.', 'Outbound requests fall to a slower transport with fewer options, and some plugins that require curl explicitly will refuse to activate.', 'No. There is no fallback for curl in the module list.', 'Enable curl. On a site that takes payments or sends transactional mail, treat this as the highest priority module on the list.']; M['mod_xml'] = ['Reading XML, under a name you cannot search for.', 'The libxml extension. Core prints the array key mod_xml rather than the extension name, which is why searching the name returns nothing useful.', 'Importing content, reading feeds and several plugin integrations stop working, since all of them parse XML.', 'Yes. simplexml and xmlreader are both declared fallbacks, and either one missing while mod_xml is missing turns the test critical.', 'Look for libxml, not mod_xml, in the extension list. That single translation resolves most of the confusion this entry causes.']; M['gd'] = ['The fallback that is not supposed to be named.', 'The image library WordPress falls back to when imagick is unavailable.', 'Nothing resizes. With neither image library present, thumbnail generation and responsive image sets stop entirely.', 'No, and this is the important case: gd only appears in the warning when imagick has already failed, and core then treats it as required.', 'Enable gd immediately, and enable imagick in the same visit. Seeing gd named at all means the site currently has no image library.']; go.addEventListener('click', function(){ var nameEl = document.getElementById('ahmod-name'); if (!nameEl) { return; } var useEl = document.getElementById('ahmod-use'); if (!useEl) { return; } var badgeEl = document.getElementById('ahmod-badge'); if (!badgeEl) { return; } var key = nameEl.value; var row = M[key]; if (!row) { return; } var head = row[0]; var whatText = row[1]; var costText = row[2]; var fbText = row[3]; var firstText = row[4]; if (badgeEl.value === 'crit') { head = head + ' The entry is red, so a fallback has failed as well and core has promoted it to required.'; } if (useEl.value === 'store') { if (key === 'curl') { costText = costText + ' On a store this reaches the payment gateway and the mail that confirms an order.'; } if (key === 'intl') { costText = costText + ' On a store this reaches every displayed price and every invoice date.'; } if (key === 'zip') { costText = costText + ' On a store this blocks the security updates that close a published vulnerability.'; } } if (useEl.value === 'intl') { if (key === 'intl') { firstText = 'Treat this as the priority. ' + firstText; } if (key === 'mbstring') { firstText = 'Treat this as the priority. ' + firstText; } } num.textContent = head; what.textContent = whatText; cost.textContent = costText; fb.textContent = fbText; first.textContent = firstText; out.className = 'ahmod-out ahmod-on'; }); }); })(); <\/script>\n\n\n\n<h2 id=\"aioseo-a-practical-checklist-for-clearing-recommended-modules-are-missing\" class=\"wp-block-heading\">A Practical Checklist for Clearing Recommended Modules Are Missing<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Read the module names under the heading before touching any setting. The heading itself carries no information.<\/li>\n\n\n\n<li>Note the badge color. Yellow means every missing module is optional. Red means a fallback has failed and core has promoted it.<\/li>\n\n\n\n<li>Translate mod_xml to libxml and libsodium to sodium before searching the extension list.<\/li>\n\n\n\n<li>Confirm which PHP version is active, because the extension list belongs to the version and not to the account.<\/li>\n\n\n\n<li>Prioritize by consequence: curl and zip first, then fileinfo, then imagick and intl according to what the site actually does.<\/li>\n\n\n\n<li>A module missing from the list entirely, rather than present and unticked, is a server library question and belongs in a ticket.<\/li>\n\n\n\n<li>Re-run Site Health immediately after every PHP version change, and re-tick what the previous version had.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Clearing a recommended modules are missing warning needs no support ticket on an AHosting account, and that is deliberate: <a href=\"https:\/\/www.ahosting.net\/wordpress-hosting.html\">our WordPress plans<\/a> include selectable PHP versions, WP-CLI and a jailed shell precisely so the reader of a warning like this can act on it in the same session they read it. Where a module turns out to need a library the server does not carry, that part is ours, and naming the module in a ticket is enough to start it. The work above is the part you keep; the part underneath it is what the plan is for.<\/p>\n\n\n\n<h2 id=\"faq-one-or-more-recommended-modules-are-missing\" class=\"wp-block-heading\">Frequently Asked Questions About Missing WordPress PHP Modules<\/h2>\n\n\n\n<h3 id=\"faq-optional-module-imagick-is-not-installed-or-has-been-disabled\" class=\"wp-block-heading\">What does the &#8220;The optional module, imagick, is not installed or has been disabled&#8221; warning mean in WordPress?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Specifically it means WordPress looked for the imagick extension in the PHP your account is running, did not find it loaded, and recorded that as one line inside a larger Site Health test. The wording is generated by core from a list of modules it checks one at a time, so the sentence is identical whichever module is named and tells you nothing about severity on its own. What it does tell you is that imagick was absent at the moment the test ran, on the PHP version the site is using right now. A different PHP version on the same account can produce a different list, which is why the warning often appears immediately after a version change rather than after anything was uninstalled.<\/p>\n\n\n\n<h3 id=\"faq-site-run-normally-recommended-modules-are-missing-2026\" class=\"wp-block-heading\">Can a WordPress site run normally when recommended modules are missing in 2026?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Typically yes, and that is the whole point of the word recommended. Core marks only two modules as required, and everything else in the test is optional, which means the site keeps serving pages, taking orders and running cron whether or not the named module is present. What changes is quality rather than availability: images are resized by a less capable library, dates and currency sort by byte order instead of locale rules, or an upload is accepted without its type being sniffed properly. The warning is a statement about the ceiling your PHP build puts on WordPress, not a statement that anything is broken.<\/p>\n\n\n\n<h3 id=\"faq-what-to-do-first-site-health-reports-recommended-modules-are-missing\" class=\"wp-block-heading\">What should I do first when Site Health reports recommended modules are missing?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">First and foremost, read which module is named before you touch anything, because the list under the heading is the only part that carries information. Expand the Site Health entry, write down every module it lists, then check the PHP version the site is running, since those two facts together explain almost every instance of this warning. Only after that does it make sense to open the PHP settings in cPanel. Changing a PHP version to clear a warning you have not read is the most common way people turn a cosmetic notice into a site that throws fatal errors on a plugin that was never tested on the new version.<\/p>\n\n\n\n<h3 id=\"faq-imagick-vs-gd-recommended-modules-are-missing\" class=\"wp-block-heading\">imagick vs gd: which one matters more when recommended modules are missing?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In practice gd matters more, because gd is what keeps working when imagick is absent. Core treats gd as the declared fallback for imagick, so a site with gd and no imagick still resizes every upload, still builds every thumbnail and still serves responsive image sets. The visible cost is fidelity on resizing and the loss of PDF thumbnails in the media library. The situation that actually hurts is the one nobody looks for: both absent at once, because the fallback rule changes what core does about it rather than simply adding a second line to the same warning.<\/p>\n\n\n\n<h3 id=\"faq-intl-vs-mbstring-woocommerce-store\" class=\"wp-block-heading\">intl vs mbstring: which missing PHP module breaks more on a WooCommerce store?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">By contrast with imagick, both of these are felt by shoppers rather than by editors, and intl is the one that bites hardest on a store selling across borders. The intl extension carries the Unicode locale rules that decide how a price, a date and a sorted list of names are formatted for a given country, so without it those fall back to a generic representation that is correct English and wrong everywhere else. The mbstring extension matters wherever product names, addresses or reviews contain characters outside plain Latin text. A store trading in one country in English notices neither; a store trading in six notices both.<\/p>\n\n\n\n<h3 id=\"faq-fix-recommended-modules-are-missing-ahosting-shared-hosting\" class=\"wp-block-heading\">Can I fix recommended modules are missing myself on AHosting shared hosting?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Fortunately for most of the modules the answer is yes, and it takes about a minute. Every AHosting shared and WordPress plan includes selectable PHP versions, and the same cPanel screen that chooses the version carries the extension list for it, so enabling a module is a checkbox rather than a ticket. The exception is a module that depends on a library installed at the operating-system level rather than inside PHP: if that library is not on the server, the checkbox for it does not exist to be ticked. That case is the one worth a support ticket, and the guide above shows how to tell the two apart in the interface itself.<\/p>\n\n\n\n<h3 id=\"faq-does-ahosting-enable-imagick-by-default-check-2026\" class=\"wp-block-heading\">Does AHosting enable imagick by default, and how do I check it in 2026?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Accordingly the honest answer is that you should check rather than take anyone&#8217;s word for it, including ours, because the loaded extension list belongs to the PHP version the account is running and that is a per-account setting you control. Open Select PHP Version in cPanel and read the extension list for the version currently selected, which is the authoritative answer for your account at this moment. The command line gives the same answer faster if you prefer it, and every plan includes a jailed shell, so php -m printed from cPanel Terminal lists every module PHP has actually loaded.<\/p>\n\n\n\n<h3 id=\"faq-recommended-modules-are-missing-returns-after-php-version-change\" class=\"wp-block-heading\">Why does the recommended modules are missing warning come back after a PHP version change?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Indeed this is the single most common way the warning appears on a site that was clean yesterday, and the reason is that the extension list is a property of the version, not of the account. Each installed PHP version keeps its own configuration directory and loads its own set of modules, so switching from one to another swaps the whole list rather than carrying your selections across. A module you ticked two years ago on an older version is simply not ticked on the new one. Re-running Site Health straight after any version change, and re-ticking what the previous version had, turns this from a mystery into a two-minute step.<\/p>\n\n\n\n<h3 id=\"faq-clearing-recommended-modules-are-missing-speed-ahosting-2026\" class=\"wp-block-heading\">Will clearing recommended modules are missing speed up an AHosting WordPress site in 2026?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ultimately no, and it is worth being blunt about that because the warning sits under a badge marked Performance and invites exactly this hope. Enabling imagick does not make pages render faster for visitors; it changes the quality of images produced when a file is uploaded, which is work that happens once per upload and never during a page view. The module most likely to affect what a visitor experiences is an object cache, and that is a separate Site Health entry with a separate recommendation. Treat this warning as a correctness and capability question, and look elsewhere for speed.<\/p>\n\n\n\n<h3 id=\"faq-libsodium-missing-from-site-health-worried\" class=\"wp-block-heading\">Is libsodium missing from Site Health a problem I should be worried about?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Interestingly you will almost certainly never see it named, because core skips the check entirely on any PHP version from 7.2 upward, where the extension ships with PHP itself. The test records a failure only when the module is unavailable and the running PHP predates the version that bundled it, so a modern site cannot produce that line whether or not the extension is actually loaded. The same silence covers mcrypt, which core only examines when libsodium has already failed. If you are running a supported PHP version, these two are outside what this test is able to report to you at all.<\/p>\n\n\n\n<script> (function(){ document.addEventListener('DOMContentLoaded', function(){ var allH3s = document.querySelectorAll('h3.wp-block-heading'); var inFaq = false; for (var i = 0; i < allH3s.length; i++) { var h3 = allH3s[i]; var prev = h3.previousElementSibling; if (prev) { if (prev.tagName === 'H2') { var prevId = prev.getAttribute('id'); if (prevId) { if (prevId.indexOf('faq-') === 0) { inFaq = true; } else { inFaq = false; } } } } if (inFaq) { initToggle(h3); } } function initToggle(h3) { var answer = h3.nextElementSibling; if (!answer) { return; } if (answer.tagName !== 'P') { return; } var chev = document.createElement('span'); chev.className = 'ahfaq-chev ahfaq-chev-closed'; chev.setAttribute('aria-hidden', 'true'); h3.appendChild(chev); h3.setAttribute('tabindex', '0'); h3.setAttribute('aria-expanded', 'false'); answer.classList.add('ahfaq-collapsed'); h3.addEventListener('click', function(){ doToggle(h3, answer, chev); }); h3.addEventListener('keydown', function(e){ if (e.key === 'Enter') { e.preventDefault(); doToggle(h3, answer, chev); } if (e.key === ' ') { e.preventDefault(); doToggle(h3, answer, chev); } }); } function doToggle(h3, answer, chev) { var isOpen = h3.getAttribute('aria-expanded') === 'true'; if (isOpen) { answer.classList.remove('ahfaq-open'); answer.classList.add('ahfaq-collapsed'); h3.setAttribute('aria-expanded', 'false'); chev.classList.add('ahfaq-chev-closed'); chev.classList.remove('ahfaq-chev-open'); } else { answer.classList.remove('ahfaq-collapsed'); answer.classList.add('ahfaq-open'); h3.setAttribute('aria-expanded', 'true'); chev.classList.remove('ahfaq-chev-closed'); chev.classList.add('ahfaq-chev-open'); } } }); })(); <\/script>\n","protected":false},"excerpt":{"rendered":"<p>TL;DR Site Health tests twenty PHP modules and marks only two of them required, so a heading saying recommended modules are missing is almost always a quality ceiling rather than a fault. Read the module names under it, not the heading. Four of those modules are fallbacks for other modules, and a missing fallback is [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":1283,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[8],"tags":[66,108,291,290,110,276,157,288],"class_list":["post-1282","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress","tag-cpanel","tag-php","tag-php-extensions","tag-recommended-modules-are-missing","tag-shared-hosting","tag-site-health","tag-woocommerce","tag-wordpress-updates"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"Site Health says recommended modules are missing? Only two are required. Which module matters, what it costs you, and how to enable it on cPanel hosting.\" \/>\n\t<meta name=\"robots\" content=\"max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n\t<meta name=\"author\" content=\"Matt Chrust\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.ahosting.net\/blog\/one-or-more-recommended-modules-are-missing\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Blog Home | AHosting Blog\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Recommended Modules Are Missing: WordPress Fix | AHosting\" \/>\n\t\t<meta property=\"og:description\" content=\"Site Health says recommended modules are missing? Only two are required. Which module matters, what it costs you, and how to enable it on cPanel hosting.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.ahosting.net\/blog\/one-or-more-recommended-modules-are-missing\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/09\/one-or-more-recommended-modules-are-missing-ahosting.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/09\/one-or-more-recommended-modules-are-missing-ahosting.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-09-14T19:38:49+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-09-14T23:24:13+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@ahostingdotnet\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Recommended Modules Are Missing: WordPress Fix | AHosting\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Site Health says recommended modules are missing? Only two are required. Which module matters, what it costs you, and how to enable it on cPanel hosting.\" \/>\n\t\t<meta name=\"twitter:creator\" content=\"@ahostingdotnet\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/09\/one-or-more-recommended-modules-are-missing-ahosting.jpg\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/one-or-more-recommended-modules-are-missing\\\/#article\",\"name\":\"Recommended Modules Are Missing: WordPress Fix | AHosting\",\"headline\":\"One or More Recommended Modules Are Missing: How to Read the WordPress Site Health Warning and Fix It on Shared Hosting\",\"author\":{\"@type\":\"Person\",\"name\":\"Matt Chrust\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/author\\\/matt-chrust\\\/\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/one-or-more-recommended-modules-are-missing-ahosting.jpg\",\"width\":1200,\"height\":675,\"caption\":\"Core marks only two modules required. A fallback is tested only once the module it covers has failed, and then it counts as required.\"},\"datePublished\":\"2026-09-14T19:38:49+00:00\",\"dateModified\":\"2026-09-14T23:24:13+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/one-or-more-recommended-modules-are-missing\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/one-or-more-recommended-modules-are-missing\\\/#webpage\"},\"articleSection\":\"WordPress, cPanel, PHP, PHP extensions, recommended modules are missing, Shared Hosting, Site Health, WooCommerce, WordPress updates\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/one-or-more-recommended-modules-are-missing\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.ahosting.net\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/category\\\/wordpress\\\/#listItem\",\"name\":\"WordPress\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/category\\\/wordpress\\\/#listItem\",\"position\":2,\"name\":\"WordPress\",\"item\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/category\\\/wordpress\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/one-or-more-recommended-modules-are-missing\\\/#listItem\",\"name\":\"One or More Recommended Modules Are Missing: How to Read the WordPress Site Health Warning and Fix It on Shared Hosting\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/one-or-more-recommended-modules-are-missing\\\/#listItem\",\"position\":3,\"name\":\"One or More Recommended Modules Are Missing: How to Read the WordPress Site Health Warning and Fix It on Shared Hosting\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/category\\\/wordpress\\\/#listItem\",\"name\":\"WordPress\"},\"item\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/one-or-more-recommended-modules-are-missing\\\/\"}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/#organization\",\"name\":\"AHosting\",\"description\":\"AHosting Blog\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/assets\\\/img\\\/ahosting-logo.svg\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/one-or-more-recommended-modules-are-missing\\\/#organizationLogo\"},\"image\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/one-or-more-recommended-modules-are-missing\\\/#organizationLogo\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/ahostingdotnet\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/author\\\/matt-chrust\\\/#author\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/author\\\/matt-chrust\\\/\",\"name\":\"Matt Chrust\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/one-or-more-recommended-modules-are-missing\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/795895edac1c44589f6c7f5e6bb79df405fbbaac15817bdd387ec57da61731ec?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Matt Chrust\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/one-or-more-recommended-modules-are-missing\\\/#webpage\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/one-or-more-recommended-modules-are-missing\\\/\",\"name\":\"Recommended Modules Are Missing: WordPress Fix | AHosting\",\"description\":\"Site Health says recommended modules are missing? Only two are required. Which module matters, what it costs you, and how to enable it on cPanel hosting.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/one-or-more-recommended-modules-are-missing\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/author\\\/matt-chrust\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/author\\\/matt-chrust\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/one-or-more-recommended-modules-are-missing-ahosting.jpg\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/one-or-more-recommended-modules-are-missing\\\/#mainImage\",\"width\":1200,\"height\":675,\"caption\":\"Core marks only two modules required. A fallback is tested only once the module it covers has failed, and then it counts as required.\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/one-or-more-recommended-modules-are-missing\\\/#mainImage\"},\"datePublished\":\"2026-09-14T19:38:49+00:00\",\"dateModified\":\"2026-09-14T23:24:13+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/#website\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/\",\"name\":\"AHosting\",\"description\":\"AHosting Blog\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Recommended Modules Are Missing: WordPress Fix | AHosting","description":"Site Health says recommended modules are missing? Only two are required. Which module matters, what it costs you, and how to enable it on cPanel hosting.","canonical_url":"https:\/\/www.ahosting.net\/blog\/one-or-more-recommended-modules-are-missing\/","robots":"max-snippet:-1, max-image-preview:large, max-video-preview:-1","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.ahosting.net\/blog\/one-or-more-recommended-modules-are-missing\/#article","name":"Recommended Modules Are Missing: WordPress Fix | AHosting","headline":"One or More Recommended Modules Are Missing: How to Read the WordPress Site Health Warning and Fix It on Shared Hosting","author":{"@type":"Person","name":"Matt Chrust","url":"https:\/\/www.ahosting.net\/blog\/author\/matt-chrust\/"},"publisher":{"@id":"https:\/\/www.ahosting.net\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/09\/one-or-more-recommended-modules-are-missing-ahosting.jpg","width":1200,"height":675,"caption":"Core marks only two modules required. A fallback is tested only once the module it covers has failed, and then it counts as required."},"datePublished":"2026-09-14T19:38:49+00:00","dateModified":"2026-09-14T23:24:13+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.ahosting.net\/blog\/one-or-more-recommended-modules-are-missing\/#webpage"},"isPartOf":{"@id":"https:\/\/www.ahosting.net\/blog\/one-or-more-recommended-modules-are-missing\/#webpage"},"articleSection":"WordPress, cPanel, PHP, PHP extensions, recommended modules are missing, Shared Hosting, Site Health, WooCommerce, WordPress updates"},{"@type":"BreadcrumbList","@id":"https:\/\/www.ahosting.net\/blog\/one-or-more-recommended-modules-are-missing\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.ahosting.net\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.ahosting.net\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.ahosting.net\/blog\/category\/wordpress\/#listItem","name":"WordPress"}},{"@type":"ListItem","@id":"https:\/\/www.ahosting.net\/blog\/category\/wordpress\/#listItem","position":2,"name":"WordPress","item":"https:\/\/www.ahosting.net\/blog\/category\/wordpress\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.ahosting.net\/blog\/one-or-more-recommended-modules-are-missing\/#listItem","name":"One or More Recommended Modules Are Missing: How to Read the WordPress Site Health Warning and Fix It on Shared Hosting"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.ahosting.net\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.ahosting.net\/blog\/one-or-more-recommended-modules-are-missing\/#listItem","position":3,"name":"One or More Recommended Modules Are Missing: How to Read the WordPress Site Health Warning and Fix It on Shared Hosting","previousItem":{"@type":"ListItem","@id":"https:\/\/www.ahosting.net\/blog\/category\/wordpress\/#listItem","name":"WordPress"},"item":"https:\/\/www.ahosting.net\/blog\/one-or-more-recommended-modules-are-missing\/"}]},{"@type":"Organization","@id":"https:\/\/www.ahosting.net\/#organization","name":"AHosting","description":"AHosting Blog","url":"https:\/\/www.ahosting.net\/","logo":{"@type":"ImageObject","url":"https:\/\/www.ahosting.net\/assets\/img\/ahosting-logo.svg","@id":"https:\/\/www.ahosting.net\/blog\/one-or-more-recommended-modules-are-missing\/#organizationLogo"},"image":{"@id":"https:\/\/www.ahosting.net\/blog\/one-or-more-recommended-modules-are-missing\/#organizationLogo"},"sameAs":["https:\/\/x.com\/ahostingdotnet"]},{"@type":"Person","@id":"https:\/\/www.ahosting.net\/blog\/author\/matt-chrust\/#author","url":"https:\/\/www.ahosting.net\/blog\/author\/matt-chrust\/","name":"Matt Chrust","image":{"@type":"ImageObject","@id":"https:\/\/www.ahosting.net\/blog\/one-or-more-recommended-modules-are-missing\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/795895edac1c44589f6c7f5e6bb79df405fbbaac15817bdd387ec57da61731ec?s=96&d=mm&r=g","width":96,"height":96,"caption":"Matt Chrust"}},{"@type":"WebPage","@id":"https:\/\/www.ahosting.net\/blog\/one-or-more-recommended-modules-are-missing\/#webpage","url":"https:\/\/www.ahosting.net\/blog\/one-or-more-recommended-modules-are-missing\/","name":"Recommended Modules Are Missing: WordPress Fix | AHosting","description":"Site Health says recommended modules are missing? Only two are required. Which module matters, what it costs you, and how to enable it on cPanel hosting.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.ahosting.net\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.ahosting.net\/blog\/one-or-more-recommended-modules-are-missing\/#breadcrumblist"},"author":{"@id":"https:\/\/www.ahosting.net\/blog\/author\/matt-chrust\/#author"},"creator":{"@id":"https:\/\/www.ahosting.net\/blog\/author\/matt-chrust\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/09\/one-or-more-recommended-modules-are-missing-ahosting.jpg","@id":"https:\/\/www.ahosting.net\/blog\/one-or-more-recommended-modules-are-missing\/#mainImage","width":1200,"height":675,"caption":"Core marks only two modules required. A fallback is tested only once the module it covers has failed, and then it counts as required."},"primaryImageOfPage":{"@id":"https:\/\/www.ahosting.net\/blog\/one-or-more-recommended-modules-are-missing\/#mainImage"},"datePublished":"2026-09-14T19:38:49+00:00","dateModified":"2026-09-14T23:24:13+00:00"},{"@type":"WebSite","@id":"https:\/\/www.ahosting.net\/#website","url":"https:\/\/www.ahosting.net\/","name":"AHosting","description":"AHosting Blog","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.ahosting.net\/#organization"}}]},"og:locale":"en_US","og:site_name":"Blog Home | AHosting Blog","og:type":"article","og:title":"Recommended Modules Are Missing: WordPress Fix | AHosting","og:description":"Site Health says recommended modules are missing? Only two are required. Which module matters, what it costs you, and how to enable it on cPanel hosting.","og:url":"https:\/\/www.ahosting.net\/blog\/one-or-more-recommended-modules-are-missing\/","og:image":"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/09\/one-or-more-recommended-modules-are-missing-ahosting.jpg","og:image:secure_url":"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/09\/one-or-more-recommended-modules-are-missing-ahosting.jpg","og:image:width":1200,"og:image:height":675,"article:published_time":"2026-09-14T19:38:49+00:00","article:modified_time":"2026-09-14T23:24:13+00:00","twitter:card":"summary_large_image","twitter:site":"@ahostingdotnet","twitter:title":"Recommended Modules Are Missing: WordPress Fix | AHosting","twitter:description":"Site Health says recommended modules are missing? Only two are required. Which module matters, what it costs you, and how to enable it on cPanel hosting.","twitter:creator":"@ahostingdotnet","twitter:image":"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/09\/one-or-more-recommended-modules-are-missing-ahosting.jpg"},"aioseo_meta_data":{"post_id":"1282","title":"Recommended Modules Are Missing: WordPress Fix | AHosting","description":"Site Health says recommended modules are missing? Only two are required. Which module matters, what it costs you, and how to enable it on cPanel hosting.","keywords":null,"keyphrases":{"focus":{"keyphrase":"recommended modules are missing","score":0,"analysis":[]},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2026-09-14 19:34:39","updated":"2026-09-14 23:25:02","seo_analyzer_scan_date":null,"focus_keyword":"recommended modules are missing","additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.ahosting.net\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.ahosting.net\/blog\/category\/wordpress\/\" title=\"WordPress\">WordPress<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tOne or More Recommended Modules Are Missing: How to Read the WordPress Site Health Warning and Fix It on Shared Hosting\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.ahosting.net\/blog"},{"label":"WordPress","link":"https:\/\/www.ahosting.net\/blog\/category\/wordpress\/"},{"label":"One or More Recommended Modules Are Missing: How to Read the WordPress Site Health Warning and Fix It on Shared Hosting","link":"https:\/\/www.ahosting.net\/blog\/one-or-more-recommended-modules-are-missing\/"}],"_links":{"self":[{"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/posts\/1282","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/comments?post=1282"}],"version-history":[{"count":4,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/posts\/1282\/revisions"}],"predecessor-version":[{"id":1294,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/posts\/1282\/revisions\/1294"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/media\/1283"}],"wp:attachment":[{"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/media?parent=1282"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/categories?post=1282"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/tags?post=1282"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}