{"id":1263,"date":"2026-09-11T20:59:21","date_gmt":"2026-09-11T20:59:21","guid":{"rendered":"https:\/\/www.ahosting.net\/blog\/?p=1263"},"modified":"2026-09-11T22:17:37","modified_gmt":"2026-09-11T22:17:37","slug":"your-site-could-not-complete-a-loopback-request","status":"publish","type":"post","link":"https:\/\/www.ahosting.net\/blog\/your-site-could-not-complete-a-loopback-request\/","title":{"rendered":"Your Site Could Not Complete a Loopback Request: How to Read the Error and Fix It on Shared Hosting"},"content":{"rendered":"<div class=\"wp-block-aioseo-table-of-contents\"><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-what-your-site-could-not-complete-a-loopback-request-actually-tests\">What &quot;Your Site Could Not Complete a Loopback Request&quot; Actually Tests<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-the-loopback-request-is-a-post-to-wp-cron-php-with-a-ten-second-clock\">The Loopback Request Is a POST to wp-cron.php With a Ten-Second Clock<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-critical-vs-recommended-two-different-loopback-request-failures\">Critical vs Recommended: Two Different Loopback Request Failures<\/a><\/li><\/ul><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-what-stops-working-when-the-loopback-request-fails\">What Stops Working When the Loopback Request Fails<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-the-ahosting-loopback-error-decoder-what-each-code-means-on-shared-hosting\">The AHosting Loopback Error Decoder: What Each Code Means on Shared Hosting<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-the-decoder-table\">The Decoder Table<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-critical-loopback-request-failures-the-curl-codes\">Critical Loopback Request Failures: the cURL Codes<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-recommended-loopback-request-failures-the-status-codes\">Recommended Loopback Request Failures: the Status Codes<\/a><\/li><\/ul><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-why-a-loopback-request-fails-on-shared-hosting-specifically\">Why a Loopback Request Fails on Shared Hosting Specifically<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-dns-during-a-migration-sends-the-loopback-request-to-the-old-host\">DNS During a Migration Sends the Loopback Request to the Old Host<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-cloudflare-bot-fight-mode-challenges-your-own-servers-loopback-request\">Cloudflare Bot Fight Mode Challenges Your Own Server&#039;s Loopback Request<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-modsecurity-rules-and-htaccess-denies-on-wp-cron-php\">ModSecurity Rules and .htaccess Denies on wp-cron.php<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-the-entry-process-ceiling-when-the-loopback-request-gets-a-508\">The Entry-Process Ceiling: When the Loopback Request Gets a 508<\/a><\/li><\/ul><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-how-to-fix-a-failed-loopback-request-in-order\">How to Fix a Failed Loopback Request, in Order<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-first-step-reproduce-the-loopback-request-from-outside-the-server\">First Step: Reproduce the Loopback Request From Outside the Server<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-second-step-fix-the-layer-the-loopback-request-code-names\">Second Step: Fix the Layer the Loopback Request Code Names<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-third-step-re-run-site-health-then-test-cron-directly\">Third Step: Re-run Site Health, Then Test Cron Directly<\/a><\/li><\/ul><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-decode-your-loopback-request-error\">Decode Your Loopback Request Error<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-when-the-loopback-request-is-not-the-problem\">When the Loopback Request Is Not the Problem<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-a-practical-checklist-for-a-failed-loopback-request\">A Practical Checklist for a Failed Loopback Request<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-your-site-could-not-complete-a-loopback-request\">Frequently Asked Questions About the Loopback Request Error<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#faq-loopback-request-error-mean\">What does the &quot;WordPress could not complete loopback request&quot; error mean?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-site-health-loopback-request-test-sends-2026\">What does the Site Health loopback request test actually send in 2026?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-loopback-request-vs-rest-api-error\">Loopback request failed vs REST API error: are they the same problem in Site Health?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-loopback-request-ahosting-migration-dns\">Why does the loopback request fail on AHosting shared hosting during a migration before DNS is switched?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-cloudflare-bot-fight-mode-loopback-request-403\">Can Cloudflare Bot Fight Mode make the loopback request return a 403 on a WordPress site?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-508-loopback-request-ahosting-bronze\">What does a 508 status on the loopback request mean on an AHosting Bronze plan?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-curl-error-28-vs-curl-error-7-loopback-request\">cURL error 28 vs cURL error 7 on a loopback request: which one is a firewall?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-failed-loopback-request-scheduled-posts-woocommerce-2026\">Does a failed loopback request stop scheduled posts and WooCommerce emails in 2026?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-test-loopback-requests-working-ahosting\">How do I test whether loopback requests are working on AHosting without waiting for Site Health?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-disable-wp-cron-loopback-request-warning-2026\">Should I disable WP-Cron to fix the loopback request warning in 2026?<\/a><\/li><\/ul><\/li><\/ul><\/div>\n\n\n<script type=\"application\/ld+json\">{\"@context\": \"https:\/\/schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"What does the \\\"WordPress could not complete loopback request\\\" error mean?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Specifically, it means WordPress tried to make an HTTP request to its own public address, the way a visitor would, and that request either never got an answer or got an answer other than 200. The test behind the message posts a tiny body to your site's wp-cron.php and gives it ten seconds. Because wp-cron.php exits the moment it sees a POST, the request only exercises DNS, the network path, whatever sits in front of PHP, and the WordPress bootstrap itself. The line printed underneath the label carries the actual diagnosis: a cURL error code when nothing came back, or an HTTP status code when your own server refused.\"}}, {\"@type\": \"Question\", \"name\": \"What does the Site Health loopback request test actually send in 2026?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"In practice it sends one POST request to your site's wp-cron.php with the body site-health=loopback-test, a Cache-Control no-cache header, your current cookies, any HTTP Basic credentials you used to reach wp-admin, and a ten-second timeout. Certificate verification is switched off for this request, so an expired or self-signed certificate cannot fail it. That is the whole test: no DNS lookup of its own, no firewall probe, no cron job. If the request returns 200 the test passes, if it returns any other status the test is marked recommended, and if the HTTP client errors before a response arrives the test is marked critical.\"}}, {\"@type\": \"Question\", \"name\": \"Loopback request failed vs REST API error: are they the same problem in Site Health?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Typically they share a cause but they are two different requests. The loopback test posts to wp-cron.php; the REST API test fetches a route under wp-json with the current user's cookies and nonce. Both leave the server, resolve your domain, come back in through whatever sits in front of PHP, and boot WordPress. So a firewall, a DNS mismatch or a Cloudflare challenge usually fails both at once, while a security plugin that blocks unauthenticated REST access or a rule that only denies wp-cron.php fails exactly one. Fixing the shared layer first, then re-running Site Health, tells you which kind you have.\"}}, {\"@type\": \"Question\", \"name\": \"Why does the loopback request fail on AHosting shared hosting during a migration before DNS is switched?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Notably, the loopback request uses your public domain, not the server it is running on. While your domain's DNS still points at the old host, WordPress on our server resolves that name to the old host's address and sends the request there. Depending on what the old host does with it, Site Health reports a 404, a 403, a 200 from the wrong site, or a timeout. Nothing is broken on the new account; the test is simply being answered by the wrong server. Once the DNS change has propagated the same test passes without any change on our side, which is why we recommend running Site Health only after the switch.\"}}, {\"@type\": \"Question\", \"name\": \"Can Cloudflare Bot Fight Mode make the loopback request return a 403 on a WordPress site?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Indeed it can, and it is one of the most common causes on a domain proxied through Cloudflare. The loopback request leaves your server, resolves your domain to Cloudflare's edge, and arrives there as automated traffic from a WordPress user agent, which Bot Fight Mode is designed to challenge. Cloudflare's own documentation says the feature protects the whole domain without endpoint restrictions, may challenge API traffic, and cannot be bypassed with WAF custom rules or page rules. The practical fixes are to turn Bot Fight Mode off, or to move to Super Bot Fight Mode, which runs on the ruleset engine and does honor skip rules for wp-cron.php.\"}}, {\"@type\": \"Question\", \"name\": \"What does a 508 status on the loopback request mean on an AHosting Bronze plan?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"In fact a 508 on the loopback request is your own entry-process ceiling talking. A Bronze account allows up to 30 concurrent PHP requests, and the loopback is one more PHP request from the same account, made at the instant the test runs. When every slot is already occupied, CloudLinux refuses the new request with 508 Resource Limit Reached, and Site Health reports it as a recommended issue with that number. Because a page served from LiteSpeed's cache consumes no entry process at all, a 508 during the test means uncached requests were filling the account at that moment, and the fix is to find them rather than to retry the test.\"}}, {\"@type\": \"Question\", \"name\": \"cURL error 28 vs cURL error 7 on a loopback request: which one is a firewall?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"By contrast with what the numbers suggest, either can be a firewall, and the difference is how the firewall behaves. Error 7 means the connection was refused outright: something answered the connection attempt with a rejection, or nothing was listening at the address the domain resolved to. Error 28 means the request was sent and then waited the full ten seconds with no answer, which is what a firewall that silently drops packets produces, and also what a server that takes longer than ten seconds to start WordPress produces. So a 7 points at the address or an active refusal, while a 28 points at a silent drop or a slow bootstrap, and the test from outside the server tells you which.\"}}, {\"@type\": \"Question\", \"name\": \"Does a failed loopback request stop scheduled posts and WooCommerce emails in 2026?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Ultimately yes, when the site relies on WP-Cron, because WP-Cron itself is started by a loopback request to wp-cron.php on a visitor's page load. If that request cannot complete, scheduled posts stay in the queue and show a missed schedule, plugin update checks stall, and WooCommerce's Action Scheduler queue, which carries order emails, subscription renewals and webhook deliveries, stops draining. The Site Health warning is therefore an early signal of a problem you would otherwise discover from a customer. A server cron that calls WP-CLI directly does not depend on the loopback request and keeps those jobs running even while the test fails.\"}}, {\"@type\": \"Question\", \"name\": \"How do I test whether loopback requests are working on AHosting without waiting for Site Health?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Fortunately the test is easy to reproduce from any computer, because the loopback request is an ordinary HTTP request. Run curl against your own domain with the same shape Site Health uses: a POST to wp-cron.php with the body site-health=loopback-test, and look at the status code. A 200 with an empty body from outside the server, alongside a failure inside Site Health, means the path is fine for visitors and broken only from the server itself, which points at DNS resolution on the server or at a rule that treats the server's own address differently. If WP-CLI is available in your cPanel terminal, wp cron test performs the spawn check WordPress itself uses and reports the result in one line.\"}}, {\"@type\": \"Question\", \"name\": \"Should I disable WP-Cron to fix the loopback request warning in 2026?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"That said, disabling WP-Cron does not clear the warning, because the test still posts to wp-cron.php whether or not the constant is set, and the file still answers. What disabling WP-Cron does is remove your scheduled jobs from the loopback path, so a server cron that runs WP-CLI keeps them going while you fix the underlying block. That is a sensible first move on a store or any site with time-critical jobs, and it is the right permanent setup on shared hosting regardless. The warning itself is fixed at the layer the error code names: DNS, the firewall, a Cloudflare setting, a ModSecurity rule, a deny rule on the file, or the account's entry-process ceiling.\"}}]}<\/script>\n\n\n\n<div class=\"ah-tldr\">\n  <span class=\"ah-tldr-badge\">TL;DR<\/span>\n  <p>A failed loopback request means WordPress could not reach its own wp-cron.php with a ten-second POST. The code printed under the label is the diagnosis: a cURL error means nothing answered (DNS, firewall, network), a status code means your own server refused (Cloudflare, ModSecurity, a deny rule, or the entry-process ceiling).<\/p>\n<\/div>\n\n\n<p><!-- INSERT AIOSEO TABLE OF CONTENTS BLOCK HERE --><\/p>\n\n\n<p class=\"wp-block-paragraph\">The message sits under Critical issues in Site Health and reads like a network fault: your site could not complete a <strong>loopback request<\/strong>. Underneath it, WordPress prints one line that most guides skip past, and that line is the whole diagnosis: an error code from cURL, or an HTTP status code from your own server. This guide explains what the loopback request actually is, which features stop working when it fails, what each code means on a cPanel account behind LiteSpeed and CloudLinux, and how to fix the layer the code points at instead of switching plugins off one by one.<\/p>\n\n\n\n<figure class=\"wp-block-audio\"><audio controls src=\"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/09\/PODCAST-your-site-could-not-complete-a-loopback-request.m4a\"><\/audio><figcaption class=\"wp-element-caption\">Listen: why a critical result means nothing answered and a recommended one means your own server refused, and which layer to fix for each. By Matt Chrust, Director of Business Development, AHosting.<\/figcaption><\/figure>\n\n\n\n<h2 id=\"aioseo-what-your-site-could-not-complete-a-loopback-request-actually-tests\" class=\"wp-block-heading\">What &#8220;Your Site Could Not Complete a Loopback Request&#8221; Actually Tests<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A loopback request is WordPress making an HTTP request to its own public address, the way a visitor would, and the Site Health test checks whether that round trip completes. Core describes the purpose in one sentence: &#8220;Loopback requests are used to run scheduled events, and are also used by the built-in editors for themes and plugins to verify code stability.&#8221; The test does not check your DNS, your firewall or your CDN by name. It sends one request and reports what came back, which is why the line under the label matters more than the label.<\/p>\n\n\n\n<h3 id=\"aioseo-the-loopback-request-is-a-post-to-wp-cron-php-with-a-ten-second-clock\" class=\"wp-block-heading\">The Loopback Request Is a POST to wp-cron.php With a Ten-Second Clock<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Specifically, the <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_site_health\/can_perform_loopback\/\" target=\"_blank\" rel=\"noopener\">method behind the test<\/a> posts a small body, <code>site-health=loopback-test<\/code>, to your site&#8217;s <code>wp-cron.php<\/code>, with a ten-second timeout, a <code>Cache-Control: no-cache<\/code> header, your current cookies, and any HTTP Basic credentials you used to reach wp-admin. Certificate checking is switched off for this request, so an expired or self-signed certificate cannot fail it. And <code>wp-cron.php<\/code> exits the moment it receives a POST: core checks for a non-empty POST body and calls <code>die()<\/code> before any scheduled event runs. The request therefore does the WordPress bootstrap and nothing else. A ten-second timeout means the server took ten seconds to start WordPress, or the request never arrived; it never means a cron job was slow.<\/p>\n\n\n\n<h3 id=\"aioseo-critical-vs-recommended-two-different-loopback-request-failures\" class=\"wp-block-heading\">Critical vs Recommended: Two Different Loopback Request Failures<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Two outcomes are reported differently, and the difference is the first clue. If the HTTP client returns an error before any response arrives, the test is marked critical and prints &#8220;The loopback request to your site failed, this means features relying on them are not currently working as expected,&#8221; followed by the cURL message and its code. If a response arrives with any status other than 200, the test is only marked recommended and prints &#8220;The loopback request returned an unexpected http status code&#8221; with the number. In practice, a critical result means your server never replied, so look at DNS, the firewall or the network path; a recommended result means your server replied and refused, so look at whatever sits in front of PHP.<\/p>\n\n\n\n<div class=\"ah-infographic\">\n  <svg viewBox=\"0 0 720 380\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-label=\"The path a WordPress loopback request takes on a shared hosting account and the error each hop produces when it fails: DNS resolution, the Cloudflare edge if the domain is proxied, the server firewall, ModSecurity and .htaccess rules, the CloudLinux entry-process gate, and finally wp-cron.php answering 200.\">\n    <title>One loopback request, six places it can fail, and the code each one prints<\/title>\n    <desc>The request starts inside WordPress on the server, resolves the site&#8217;s public domain name, passes through Cloudflare&#8217;s edge if the domain is proxied, arrives at the server firewall, is inspected by ModSecurity and any .htaccess rules, is admitted or refused by the CloudLinux entry-process limit, and finally reaches wp-cron.php, which answers 200 with an empty body. A failure at DNS prints cURL error 6, at the edge prints 403, at the firewall prints cURL error 7 or 28, at the rule layer prints 403 or 405, at the entry-process gate prints 508, and a slow bootstrap prints cURL error 28.<\/desc>\n    <rect x=\"0\" y=\"0\" width=\"720\" height=\"380\" fill=\"#0f172a\"\/>\n    <text x=\"32\" y=\"40\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"19\" font-weight=\"700\">One loopback request, six places it can fail<\/text>\n    <text x=\"32\" y=\"63\" fill=\"#eef3ff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"13\">WordPress posts to its own wp-cron.php. Each hop that refuses prints a different code in Site Health.<\/text>\n    <rect x=\"32\" y=\"92\" width=\"196\" height=\"88\" fill=\"#1e293b\" stroke=\"#334155\" stroke-width=\"1\"\/>\n    <text x=\"48\" y=\"118\" fill=\"#60a5fa\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"13\" font-weight=\"700\">1. DNS lookup<\/text>\n    <text x=\"48\" y=\"140\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\">Where does my domain point?<\/text>\n    <text x=\"48\" y=\"164\" fill=\"#f59e0b\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\" font-weight=\"700\">Fails as: cURL error 6<\/text>\n    <rect x=\"262\" y=\"92\" width=\"196\" height=\"88\" fill=\"#1e293b\" stroke=\"#334155\" stroke-width=\"1\"\/>\n    <text x=\"278\" y=\"118\" fill=\"#60a5fa\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"13\" font-weight=\"700\">2. Cloudflare edge<\/text>\n    <text x=\"278\" y=\"140\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\">Only if the domain is proxied<\/text>\n    <text x=\"278\" y=\"164\" fill=\"#f59e0b\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\" font-weight=\"700\">Fails as: 403 (challenge)<\/text>\n    <rect x=\"492\" y=\"92\" width=\"196\" height=\"88\" fill=\"#1e293b\" stroke=\"#334155\" stroke-width=\"1\"\/>\n    <text x=\"508\" y=\"118\" fill=\"#60a5fa\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"13\" font-weight=\"700\">3. Server firewall<\/text>\n    <text x=\"508\" y=\"140\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\">Is the server&#8217;s own IP allowed?<\/text>\n    <text x=\"508\" y=\"164\" fill=\"#f59e0b\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\" font-weight=\"700\">Fails as: cURL error 7 or 28<\/text>\n    <rect x=\"32\" y=\"206\" width=\"196\" height=\"88\" fill=\"#1e293b\" stroke=\"#334155\" stroke-width=\"1\"\/>\n    <text x=\"48\" y=\"232\" fill=\"#60a5fa\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"13\" font-weight=\"700\">4. ModSecurity, .htaccess<\/text>\n    <text x=\"48\" y=\"254\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\">Does a rule match the POST?<\/text>\n    <text x=\"48\" y=\"278\" fill=\"#f59e0b\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\" font-weight=\"700\">Fails as: 403 or 405<\/text>\n    <rect x=\"262\" y=\"206\" width=\"196\" height=\"88\" fill=\"#1e293b\" stroke=\"#334155\" stroke-width=\"1\"\/>\n    <text x=\"278\" y=\"232\" fill=\"#60a5fa\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"13\" font-weight=\"700\">5. Entry-process gate<\/text>\n    <text x=\"278\" y=\"254\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\">Is there a free PHP slot?<\/text>\n    <text x=\"278\" y=\"278\" fill=\"#f59e0b\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\" font-weight=\"700\">Fails as: 508<\/text>\n    <rect x=\"492\" y=\"206\" width=\"196\" height=\"88\" fill=\"#1e293b\" stroke=\"#2563eb\" stroke-width=\"2\"\/>\n    <text x=\"508\" y=\"232\" fill=\"#60a5fa\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"13\" font-weight=\"700\">6. wp-cron.php<\/text>\n    <text x=\"508\" y=\"254\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\">Boots WordPress, sees a POST, exits<\/text>\n    <text x=\"508\" y=\"278\" fill=\"#60a5fa\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\" font-weight=\"700\">Passes as: 200. Slow boot: cURL 28<\/text>\n    <text x=\"32\" y=\"330\" fill=\"#ffffff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"13\" font-weight=\"700\">A cURL code means no answer came back. A status code means your own server answered and refused.<\/text>\n    <text x=\"32\" y=\"352\" fill=\"#eef3ff\" font-family=\"Helvetica, Arial, sans-serif\" font-size=\"12\">Critical is hops 1 and 3, or a ten-second boot. Recommended is hops 2, 4 and 5.<\/text>\n  <\/svg>\n<\/div>\n\n\n\n<h2 id=\"aioseo-what-stops-working-when-the-loopback-request-fails\" class=\"wp-block-heading\">What Stops Working When the Loopback Request Fails<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The features that depend on the loopback request are mostly invisible until they stop, which is why the warning deserves more attention than its wording suggests. WP-Cron starts by making exactly this kind of request to <code>wp-cron.php<\/code> during a visitor&#8217;s page load, so a site that relies on it loses its scheduler:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Scheduled posts stay in the queue and show a missed schedule instead of publishing.<\/li>\n\n\n\n<li>Plugin and theme update checks, and any automatic updates that depend on them, stall until something else runs the schedule.<\/li>\n\n\n\n<li>WooCommerce&#8217;s Action Scheduler stops draining, and with it order emails, subscription renewals and webhook deliveries; on a store this is the first symptom anyone notices, which is why the migration checklist on <a href=\"https:\/\/www.ahosting.net\/woocommerce-hosting.html\">our WooCommerce plans<\/a> reviews cron jobs before DNS changes.<\/li>\n\n\n\n<li>The built-in theme and plugin file editor cannot verify that a saved PHP change did not fatally break the site, so it refuses to keep the change.<\/li>\n\n\n\n<li>Site Health&#8217;s own page-cache test cannot run; core prints &#8220;Unable to detect page cache due to possible loopback request problem&#8221; in its place.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The REST API test that usually fails alongside it is a separate request, a GET to a route under <code>wp-json<\/code>, and it shares most of the same causes. Fixing the shared layer first, then re-running Site Health, shows which kind of failure you have.<\/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=\"Loopback Request Failed in WordPress: What the Error Means (2026)\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/RSrld2iDvrQ?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<h2 id=\"aioseo-the-ahosting-loopback-error-decoder-what-each-code-means-on-shared-hosting\" class=\"wp-block-heading\">The AHosting Loopback Error Decoder: What Each Code Means on Shared Hosting<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Read the line under the label and find it in the table. Its left column is what Site Health prints; the rest is what that code means when the site runs on a cPanel account behind LiteSpeed and CloudLinux, which is what the generic advice never says.<\/p>\n\n\n\n<h3 id=\"aioseo-the-decoder-table\" class=\"wp-block-heading\">The Decoder Table<\/h3>\n\n\n\n<figure class=\"wp-block-table ah-ladder\"><table><thead><tr><th>Site Health prints<\/th><th>What answered<\/th><th>Usual cause on a shared account<\/th><th>Who changes it<\/th><\/tr><\/thead><tbody><tr><td>cURL error 6<\/td><td>Nothing: name lookup failed<\/td><td>DNS not pointed yet (migration), expired domain, missing record<\/td><td>You, at DNS<\/td><\/tr><tr><td>cURL error 7<\/td><td>Nothing: connection refused<\/td><td>Firewall refusing the server its own address; domain pointing elsewhere<\/td><td>Host \/ you<\/td><\/tr><tr><td>cURL error 28<\/td><td>Nothing inside ten seconds<\/td><td>Silent firewall or NAT drop; bootstrap slower than ten seconds under throttling<\/td><td>Host \/ you<\/td><\/tr><tr><td>cURL error 35<\/td><td>Nothing: TLS handshake failed<\/td><td>TLS negotiation with the server&#8217;s own client, not certificate validity<\/td><td>Host<\/td><\/tr><tr><td>cURL error 52 or 56<\/td><td>A connection that died mid-reply<\/td><td>PHP killed by a memory or process ceiling; connection reset in the path<\/td><td>You \/ host<\/td><\/tr><tr><td>status 401<\/td><td>Your server, asking for a password<\/td><td>cPanel Directory Privacy covering wp-cron.php<\/td><td>You<\/td><\/tr><tr><td>status 403<\/td><td>Your server, or the edge, refusing<\/td><td>ModSecurity rule, .htaccess deny, security plugin, Cloudflare Bot Fight Mode<\/td><td>You \/ host<\/td><\/tr><tr><td>status 404<\/td><td>A document root without the file<\/td><td>wp-cron.php deleted; domain resolving to another site<\/td><td>You<\/td><\/tr><tr><td>status 405<\/td><td>Your server, rejecting POST<\/td><td>A rule allowing only GET on wp-cron.php<\/td><td>You \/ host<\/td><\/tr><tr><td>status 429<\/td><td>A rate limit<\/td><td>Plugin or edge rule counting the server as a client<\/td><td>You<\/td><\/tr><tr><td>status 500 or 503<\/td><td>PHP, or the web server on its behalf<\/td><td>Fatal error at bootstrap; memory or process limit; resource ceiling<\/td><td>You<\/td><\/tr><tr><td>status 508<\/td><td>CloudLinux: Resource Limit Reached<\/td><td>Every entry process occupied at that instant by uncached requests<\/td><td>You<\/td><\/tr><tr><td>completed successfully<\/td><td>wp-cron.php, with 200<\/td><td>Not a loopback problem: missed jobs are a cron trigger problem<\/td><td>You<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">The AHosting Loopback Error Decoder \u2014 the line Site Health prints, read against a cPanel account behind LiteSpeed and CloudLinux.<\/figcaption><\/figure>\n\n\n\n<h3 id=\"aioseo-critical-loopback-request-failures-the-curl-codes\" class=\"wp-block-heading\">Critical Loopback Request Failures: the cURL Codes<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A cURL code means the HTTP client gave up before a response arrived, and the <a href=\"https:\/\/curl.se\/libcurl\/c\/libcurl-errors.html\" target=\"_blank\" rel=\"noopener\">libcurl error list<\/a> defines each one precisely. Error 6, &#8220;Could not resolve host,&#8221; means the server could not turn your domain name into an address at all; on shared hosting that is almost always a domain whose DNS has not been pointed yet, or a domain that has expired. Next comes error 7, &#8220;Failed to connect() to host or proxy,&#8221; which means the connection was refused: a firewall rejecting the server&#8217;s own public address, or a domain resolving to a machine that is not this one. The common one is error 28, &#8220;Operation timeout,&#8221; meaning the request went out and nothing came back inside ten seconds. cPanel&#8217;s own support article on this exact WordPress message says &#8220;An incorrect NAT, firewall, or other security configuration can cause it,&#8221; and that is the usual shape: a firewall that drops rather than rejects. The other cause is a WordPress bootstrap slower than ten seconds, which happens on an account that is being throttled, and the <a href=\"https:\/\/support.cpanel.net\/hc\/en-us\/articles\/6608837988631-WordPress-error-cURL-error-28-Connection-timed-out-after-milliseconds\" target=\"_blank\" rel=\"noopener\">cPanel article<\/a> is worth reading because it names the firewall half plainly. Error 35 is a TLS handshake the server&#8217;s own client could not complete, unrelated to certificate validity since verification is off; errors 52 and 56 mean the connection opened and then produced nothing usable, which on a shared account most often means the PHP process serving the loopback was killed by a memory or process ceiling mid-request.<\/p>\n\n\n\n<h3 id=\"aioseo-recommended-loopback-request-failures-the-status-codes\" class=\"wp-block-heading\">Recommended Loopback Request Failures: the Status Codes<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A status code means something answered, and the number tells you what. The 401 is HTTP authentication: cPanel&#8217;s Directory Privacy on a staging copy covers <code>wp-cron.php<\/code> along with everything else, and while Site Health forwards the credentials you logged in with, a scheduled check has none. Next, 403 is a refusal, and it has four common sources on this stack: a ModSecurity rule that matched the POST, a deny rule on the file in <code>.htaccess<\/code>, a security plugin that treats the server&#8217;s own address as an attacker, and a Cloudflare challenge if the domain is proxied. With a 404, the document root that answered has no <code>wp-cron.php<\/code>, either because it was deleted as a hardening step or because the domain resolves to a different site. On a 405, POST is not allowed on that path, which is a rule permitting only GET. The 429 is a rate limit counting the server as a client. Then 500 or 503 is PHP failing at bootstrap or the web server refusing to run it, and on this platform a 503 can also be a resource ceiling. Finally, 508 is CloudLinux itself, and it gets its own section below.<\/p>\n\n\n\n<h2 id=\"aioseo-why-a-loopback-request-fails-on-shared-hosting-specifically\" class=\"wp-block-heading\">Why a Loopback Request Fails on Shared Hosting Specifically<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Four of the causes in the decoder are far more common on a shared account than on a server you administer yourself, because each one is a layer you do not control or a layer you share. Knowing which of the four you are looking at decides whether the fix is a setting of yours or a ticket.<\/p>\n\n\n\n<h3 id=\"aioseo-dns-during-a-migration-sends-the-loopback-request-to-the-old-host\" class=\"wp-block-heading\">DNS During a Migration Sends the Loopback Request to the Old Host<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The loopback request goes to your public domain name, not to the server it runs on. While your DNS still points at the previous host, WordPress on the new account resolves that name to the old address and sends the request there, and whatever the old host returns becomes your Site Health result: a 404, a 403, a 200 from the wrong site, or a timeout. Nothing is wrong with the new account. This is the single most common way the warning appears the day a site moves, and our guide to <a href=\"https:\/\/www.ahosting.net\/blog\/migrate-wordpress-to-a-new-host\/\">moving a WordPress site without downtime<\/a> puts the Site Health check after the DNS switch for this reason. On a shared account there is no per-site hosts file to force the name to resolve locally before the switch; that control is one of the things a <a href=\"https:\/\/www.ahosting.net\/vps-hosting.html\">VPS with root access<\/a> gives you, and it matters most to agencies that migrate sites every week.<\/p>\n\n\n\n<h3 id=\"aioseo-cloudflare-bot-fight-mode-challenges-your-own-servers-loopback-request\" class=\"wp-block-heading\">Cloudflare Bot Fight Mode Challenges Your Own Server&#8217;s Loopback Request<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When the domain is proxied through Cloudflare, the loopback request leaves your server, resolves your domain to Cloudflare&#8217;s edge, and arrives there as automated traffic carrying a WordPress user agent. That is precisely what <a href=\"https:\/\/developers.cloudflare.com\/bots\/get-started\/bot-fight-mode\/\" target=\"_blank\" rel=\"noopener\">Bot Fight Mode<\/a> exists to challenge, and Cloudflare&#8217;s documentation is direct about the consequences: the feature protects entire domains &#8220;without endpoint restrictions,&#8221; it &#8220;may challenge API or mobile app traffic,&#8221; and &#8220;You cannot bypass or skip Bot Fight Mode using WAF custom rules or Page Rules.&#8221; The same page gives the way out: Super Bot Fight Mode &#8220;runs on the Ruleset Engine and supports Skip rules,&#8221; so a skip for <code>wp-cron.php<\/code> becomes possible there, or the feature is turned off. Our write-up of <a href=\"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/\">running LiteSpeed Cache behind Cloudflare<\/a> covers the rest of what the proxy changes on this stack.<\/p>\n\n\n\n<h3 id=\"aioseo-modsecurity-rules-and-htaccess-denies-on-wp-cron-php\" class=\"wp-block-heading\">ModSecurity Rules and .htaccess Denies on wp-cron.php<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A web application firewall in front of PHP inspects the loopback POST like any other request, and a rule can match it. The OWASP Core Rule Set documentation calls this a false positive, &#8220;When a genuine transaction causes a rule from CRS to match in error,&#8221; and notes that false positives &#8220;need to be tuned away by writing rule exclusions.&#8221; Its <a href=\"https:\/\/coreruleset.org\/docs\/2-how-crs-works\/2-3-false-positives-and-tuning\/\" target=\"_blank\" rel=\"noopener\">worked example<\/a> is a WordPress request. If your cPanel shows a ModSecurity item under Security, it lists every hit with its rule ID and lets you switch the engine off per domain to confirm the diagnosis; if it does not, the rule log is readable only on our side, and a ticket with the timestamp is how it gets read. Either way the durable fix is an exclusion for that rule ID, which is a ticket. Separately, a hardening guide from years ago may have left a deny rule on <code>wp-cron.php<\/code> in <code>.htaccess<\/code>, or a rule that allows only GET, and those produce the 403 and 405 rows respectively. Search the file for the filename before looking anywhere else.<\/p>\n\n\n\n<h3 id=\"aioseo-the-entry-process-ceiling-when-the-loopback-request-gets-a-508\" class=\"wp-block-heading\">The Entry-Process Ceiling: When the Loopback Request Gets a 508<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The loopback request is one more PHP request from your own account, made at the instant the test runs. CloudLinux caps the number of those that can run at once, and its <a href=\"https:\/\/cloudlinux.zendesk.com\/hc\/en-us\/articles\/115004581329-A-client-is-getting-508-Service-Temporary-Unavailable-error-on-his-site\" target=\"_blank\" rel=\"noopener\">own knowledge base<\/a> states what happens at the cap: &#8220;Once the number of entry processes (Apache\/HTTP requests is reached), a user will get a 508 &#8220;Resource Limit Reached&#8221; error message.&#8221; So a 508 in Site Health means every slot was occupied when the test fired. Two facts about our platform make that easier to read. A page served from LiteSpeed&#8217;s cache consumes no entry process at all, so the slots are filled only by uncached requests: wp-admin, logged-in views, carts, checkouts, AJAX and bots. And the ceilings are published per plan on <a href=\"https:\/\/www.ahosting.net\/web-hosting.html\">our shared hosting plans<\/a>, so the arithmetic can be stated rather than guessed:<\/p>\n\n\n\n<figure class=\"wp-block-table ah-ladder\"><table><thead><tr><th>Plan<\/th><th>Entry processes<\/th><th>Slots one Site Health loopback test holds<\/th><th>Uncached requests in flight before the test sees a 508<\/th><\/tr><\/thead><tbody><tr><td>Bronze<\/td><td>Up to 30<\/td><td>2 (the test request and its loopback)<\/td><td>28<\/td><\/tr><tr><td>Silver<\/td><td>Up to 40<\/td><td>2<\/td><td>38<\/td><\/tr><tr><td>Gold<\/td><td>Up to 50<\/td><td>2<\/td><td>48<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Entry-process slots and the loopback request, per AHosting shared plan \u2014 ceilings from the published plan page; the test holds one slot for the request running the check and one for the loopback it makes. Cached pages hold none.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A 508 during the test is therefore a load reading, not a network fault, and our guide to <a href=\"https:\/\/www.ahosting.net\/blog\/508-resource-limit-reached-wordpress\/\">the 508 Resource Limit Reached error<\/a> explains how to find what was uncached at that moment. The same ceiling is why WP-Cron itself competes with visitors for a slot; the <a href=\"https:\/\/www.ahosting.net\/blog\/disable-wp-cron-measured\/\">measured case for a server cron<\/a> shows what that costs and how to move the schedule off the loopback path entirely.<\/p>\n\n\n\n<h2 id=\"aioseo-how-to-fix-a-failed-loopback-request-in-order\" class=\"wp-block-heading\">How to Fix a Failed Loopback Request, in Order<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Work in this order and stop when Site Health passes. The first step costs a minute and usually names the layer; the second is the fix for that layer; the third confirms the features that depend on the loopback request are actually working again.<\/p>\n\n\n\n<h3 id=\"aioseo-first-step-reproduce-the-loopback-request-from-outside-the-server\" class=\"wp-block-heading\">First Step: Reproduce the Loopback Request From Outside the Server<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The test is an ordinary HTTP request, so you can make the same one from your own computer and compare. From a terminal, run <code>curl -s -o \/dev\/null -w \"%{http_code} %{time_total}\\n\" -X POST -d \"site-health=loopback-test\" https:\/\/yourdomain.com\/wp-cron.php<\/code>. Beside it, run <code>dig yourdomain.com<\/code>, the DNS lookup utility documented in the <a href=\"https:\/\/bind9.readthedocs.io\/en\/latest\/manpages.html#dig-dns-lookup-utility\" target=\"_blank\" rel=\"noopener\">ISC BIND manual pages<\/a>, so you know which address the request would have reached. A 200 in well under a second from outside, beside a failure inside Site Health, means the path works for visitors and is broken only from the server itself, which points at DNS resolution on the server or at a rule that treats the server&#8217;s own address differently. Getting a 403 from outside as well means the block is in front of everyone, and seeing a slow result from outside as well means the account is slow to boot WordPress, which is a throttling question.<\/p>\n\n\n\n<h3 id=\"aioseo-second-step-fix-the-layer-the-loopback-request-code-names\" class=\"wp-block-heading\">Second Step: Fix the Layer the Loopback Request Code Names<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>DNS (error 6, or the wrong site answering): confirm the domain resolves to this server from your own computer. If it does not, the record is the fix; if you are mid-migration, wait for propagation and test again.<\/li>\n\n\n\n<li>Cloudflare (403 with the proxy on): open Security, then Analytics, and look for the request labeled Bot Fight Mode at the time of the test. Turn it off, or move to Super Bot Fight Mode and add a skip rule for wp-cron.php.<\/li>\n\n\n\n<li>ModSecurity (403 with nothing else to explain it): if cPanel shows a ModSecurity item under Security, note the rule ID of the hit, switch the engine off for the domain, re-run the test, then switch it back on and ask for an exclusion for that rule ID; if it does not, open a ticket with the timestamp and the rule log gets read on our side.<\/li>\n\n\n\n<li>Rules of your own (403, 405): search .htaccess for wp-cron.php and remove any deny or method restriction; check security plugins for a block on your server&#8217;s own IP or on unauthenticated requests to the file.<\/li>\n\n\n\n<li>Directory Privacy (401): remove the protection or exclude wp-cron.php from it.<\/li>\n\n\n\n<li>Firewall (error 7 or 28 from Site Health, 200 from outside): open a ticket with the exact line. This is a server-side path and only the host can see it.<\/li>\n\n\n\n<li>Entry processes (508): open the resource usage page, find the entry-process faults at the time of the test, and reduce what is uncached before retrying.<\/li>\n<\/ol>\n\n\n\n<h3 id=\"aioseo-third-step-re-run-site-health-then-test-cron-directly\" class=\"wp-block-heading\">Third Step: Re-run Site Health, Then Test Cron Directly<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Go to Tools, then Site Health, and re-run the Status tab; the loopback test runs asynchronously, so give it a moment. Then test the feature that matters rather than the test that flagged it: if WP-CLI is available in your cPanel terminal, <code>wp cron test<\/code> performs the spawn check WordPress itself uses, and <code>wp cron event list<\/code> shows whether events are still overdue. If the loopback request now passes and events still miss, the schedule trigger is the problem and a server cron is the answer. If the test still times out from inside the server after the firewall has been ruled out, the bootstrap itself is slow, and <a href=\"https:\/\/www.ahosting.net\/blog\/disk-io-throttling-shared-hosting\/\">disk I\/O throttling<\/a> is the cause that produces exactly that symptom without printing an error anywhere.<\/p>\n\n\n\n<h2 id=\"aioseo-decode-your-loopback-request-error\" class=\"wp-block-heading\">Decode Your Loopback Request Error<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pick the line Site Health printed, say whether the domain is proxied through Cloudflare, and pick your plan. The decoder tells you which layer answered, what most often causes it on this stack, who can change it, and the first thing to do.<\/p>\n\n\n\n<style>\n.ahlb-tool{background:#0f172a;border-radius:10px;padding:22px;margin:26px 0;color:#fff;font-size:.95rem}\n.ahlb-tool h3{color:#fff;margin:0 0 6px;font-size:1.15rem}\n.ahlb-tool p.ahlb-sub{color:#eef3ff;margin:0 0 18px;font-size:.88rem}\n.ahlb-row{display:flex;flex-wrap:wrap;gap:14px;margin-bottom:14px}\n.ahlb-f{flex:1 1 180px}\n.ahlb-f label{display:block;color:#eef3ff;font-size:.8rem;margin-bottom:5px}\n.ahlb-f select{width:100%;padding:8px;border:1px solid #334155;border-radius:6px;background:#1e293b;color:#fff;font-size:.9rem}\n.ahlb-btn{background:#2563eb;color:#fff;border:0;border-radius:6px;padding:10px 20px;font-size:.92rem;cursor:pointer;text-decoration:none;display:inline-block}\n.ahlb-out{margin-top:18px;padding:16px;background:#1e293b;border-left:4px solid #2563eb;border-radius:6px;display:none}\n.ahlb-out.ahlb-on{display:block}\n.ahlb-num{font-size:1.25rem;font-weight:700;color:#60a5fa;display:block;margin-bottom:8px}\n.ahlb-out p{margin:0 0 10px;color:#fff}\n.ahlb-out p strong{color:#93c5fd}\n.ahlb-note{color:#94a3b8;font-size:.78rem;margin-top:12px}\n<\/style>\n<div class=\"ahlb-tool\" data-ahlb=\"decoder\">\n  <h3>Loopback Error Decoder<\/h3>\n  <p class=\"ahlb-sub\">Pick the line Site Health printed under the label, say whether your domain is proxied through Cloudflare, and pick your plan. It tells you which layer answered, what most often causes it on a cPanel account behind LiteSpeed and CloudLinux, who can change it, and the first thing to do.<\/p>\n  <div class=\"ahlb-row\">\n    <div class=\"ahlb-f\">\n      <label for=\"ahlb-code\">The line under the label<\/label>\n      <select id=\"ahlb-code\">\n        <option value=\"6\">cURL error 6: Could not resolve host<\/option>\n        <option value=\"7\">cURL error 7: Failed to connect<\/option>\n        <option value=\"28\" selected>cURL error 28: Operation timed out after 10001 milliseconds<\/option>\n        <option value=\"35\">cURL error 35: SSL connect error<\/option>\n        <option value=\"52\">cURL error 52 or 56: empty reply, or failure receiving data<\/option>\n        <option value=\"401\">unexpected http status code, 401<\/option>\n        <option value=\"403\">unexpected http status code, 403<\/option>\n        <option value=\"404\">unexpected http status code, 404<\/option>\n        <option value=\"405\">unexpected http status code, 405<\/option>\n        <option value=\"429\">unexpected http status code, 429<\/option>\n        <option value=\"500\">unexpected http status code, 500 or 503<\/option>\n        <option value=\"508\">unexpected http status code, 508<\/option>\n        <option value=\"ok\">completed successfully, but scheduled jobs still miss<\/option>\n      <\/select>\n    <\/div>\n    <div class=\"ahlb-f\">\n      <label for=\"ahlb-cf\">Is the domain proxied through Cloudflare?<\/label>\n      <select id=\"ahlb-cf\">\n        <option value=\"no\">No, or I am not sure<\/option>\n        <option value=\"yes\">Yes, the orange cloud is on<\/option>\n      <\/select>\n    <\/div>\n    <div class=\"ahlb-f\">\n      <label for=\"ahlb-plan\">Your plan<\/label>\n      <select id=\"ahlb-plan\">\n        <option value=\"30\">Bronze &#8212; up to 30 entry processes<\/option>\n        <option value=\"40\">Silver &#8212; up to 40 entry processes<\/option>\n        <option value=\"50\">Gold &#8212; up to 50 entry processes<\/option>\n      <\/select>\n    <\/div>\n  <\/div>\n  <button class=\"ahlb-btn wp-element-button\" id=\"ahlb-go\" type=\"button\">Decode it<\/button>\n  <div class=\"ahlb-out\" id=\"ahlb-out\">\n    <span class=\"ahlb-num\" id=\"ahlb-num\">&#8212;<\/span>\n    <p><strong>Which layer answered:<\/strong> <span id=\"ahlb-layer\"><\/span><\/p>\n    <p><strong>Most likely on a shared account:<\/strong> <span id=\"ahlb-cause\"><\/span><\/p>\n    <p><strong>Who can change it:<\/strong> <span id=\"ahlb-who\"><\/span><\/p>\n    <p><strong>Do this first:<\/strong> <span id=\"ahlb-first\"><\/span><\/p>\n    <p class=\"ahlb-note\">The decoder reads the code the way the Site Health test produces it: a cURL code means no HTTP response arrived inside ten seconds; a status code means a response arrived and was not 200. It cannot see your logs, so treat the cause as the first thing to rule out, not a verdict.<\/p>\n  <\/div>\n<\/div>\n<script>\n(function(){\n  document.addEventListener('DOMContentLoaded', function(){\n    var tool = document.querySelector('[data-ahlb]');\n    if (!tool) { return; }\n    var mode = tool.getAttribute('data-ahlb');\n    if (mode !== 'decoder') { return; }\n    var go = document.getElementById('ahlb-go');\n    if (!go) { return; }\n    var out = document.getElementById('ahlb-out');\n    if (!out) { return; }\n    var num = document.getElementById('ahlb-num');\n    if (!num) { return; }\n    var layer = document.getElementById('ahlb-layer');\n    if (!layer) { return; }\n    var cause = document.getElementById('ahlb-cause');\n    if (!cause) { return; }\n    var who = document.getElementById('ahlb-who');\n    if (!who) { return; }\n    var first = document.getElementById('ahlb-first');\n    if (!first) { return; }\n    var M = {};\n    M['6'] = ['Critical: no response. The server could not turn your domain name into an address.',\n      'Nothing answered, because the lookup itself failed.',\n      'The domain is not resolving from the server: DNS not yet pointed after a migration, an expired domain, a missing A record, or the server resolver not answering.',\n      'You, at your DNS provider, for the record; the host, for the resolver.',\n      'Run a DNS lookup for the domain from your own computer. If it resolves there and not from the server, open a ticket and say so; if it resolves nowhere, fix the record.'];\n    M['7'] = ['Critical: no response. The connection was refused or nothing was listening.',\n      'Nothing answered, because the connection attempt was rejected.',\n      'A firewall refusing the server its own public address, or the domain resolving to an address that is not this server.',\n      'The host for the firewall; you, if the domain points at the wrong address.',\n      'Confirm the domain resolves to this server. If it does, this is a server firewall question: open a ticket with the exact line.'];\n    M['28'] = ['Critical: no response inside ten seconds.',\n      'Nothing answered in time. wp-cron.php exits immediately on a POST, so no cron job was involved.',\n      'A firewall or NAT rule dropping the request silently, or a WordPress bootstrap that takes longer than ten seconds because the account is CPU or I\/O throttled.',\n      'The host for a silent drop; you, for a slow bootstrap.',\n      'Time a POST to wp-cron.php from your own computer. Fast from outside and slow from Site Health means a server-side path; slow from both means the account is throttled and the cause is load, not the loopback.'];\n    M['35'] = ['Critical: no response. The TLS handshake with your own server failed.',\n      'Nothing answered, because encryption could not be negotiated. Certificate validity is not checked by this test, so an expired certificate is not the cause.',\n      'A TLS configuration on the server or an intermediate device that the server\\'s own HTTP client cannot negotiate with, or a proxy that terminates TLS differently for the server\\'s address.',\n      'The host.',\n      'Open a ticket with the exact line. This one is rarely a WordPress setting.'];\n    M['52'] = ['Critical: the connection opened and then produced nothing usable.',\n      'A response started or was expected and the connection was cut before it completed.',\n      'The PHP process handling the loopback was killed mid-request, most often by a process or memory ceiling, or a device in the path reset the connection.',\n      'You, if it is a memory or process limit reached by your own site; the host, if the path resets.',\n      'Check the account\\'s resource usage page for memory and process faults at the time of the test. If there are none, open a ticket with the line.'];\n    M['401'] = ['Recommended: your server answered and asked for credentials.',\n      'A response arrived: HTTP authentication is in front of the file.',\n      'Password protection on the site directory, usually cPanel Directory Privacy on a staging copy, applied to wp-cron.php as well as the pages.',\n      'You, in cPanel.',\n      'Remove the protection from the directory, or exclude wp-cron.php from it, then re-run Site Health.'];\n    M['403'] = ['Recommended: your server answered and refused.',\n      'A response arrived: something in front of PHP declined the request.',\n      'A ModSecurity rule matching the POST, a deny rule on wp-cron.php in .htaccess, a security plugin blocking the server\\'s own address, or a Cloudflare challenge if the domain is proxied.',\n      'You, for .htaccess, plugins and Cloudflare; you or the host, for ModSecurity.',\n      'Check cPanel for a ModSecurity item under Security and look for a hit at the time of the test, then search .htaccess for wp-cron.php. If the domain is proxied, look at Cloudflare\\'s security events for a challenge on the same request.'];\n    M['404'] = ['Recommended: your server answered, and the file was not there.',\n      'A response arrived from a document root that has no wp-cron.php at that path.',\n      'wp-cron.php deleted as a hardening step, or the domain resolving to a different server or a different site on the same server.',\n      'You.',\n      'Check that wp-cron.php exists next to wp-config.php, then check that the domain resolves to this account and not to a previous host.'];\n    M['405'] = ['Recommended: your server answered and rejected the method.',\n      'A response arrived: POST is not allowed on that path.',\n      'A rule that permits only GET on wp-cron.php, in .htaccess, in a security plugin, or in a web application firewall rule.',\n      'You, for .htaccess and plugins; the host, for a server-level rule.',\n      'Search .htaccess and any security plugin settings for a method restriction on wp-cron.php, and remove POST from it.'];\n    M['429'] = ['Recommended: your server answered and asked the client to slow down.',\n      'A response arrived: a rate limit fired.',\n      'A security plugin or an edge rate rule counting the server\\'s own address as a client and limiting it.',\n      'You.',\n      'Allow the server\\'s own IP address in the plugin or rule that rate-limits, then re-run the test.'];\n    M['500'] = ['Recommended: your server answered with a server error.',\n      'A response arrived: PHP started and failed, or the web server could not run it.',\n      'A fatal error in the WordPress bootstrap, a memory or process limit, or on this platform a 503 produced when the account is at a resource ceiling.',\n      'You.',\n      'Read the PHP error log in cPanel for the timestamp of the test, and check the resource usage page for faults at the same time.'];\n    M['508'] = ['Recommended: the account had no free entry process.',\n      'A response arrived from CloudLinux, not from WordPress: Resource Limit Reached.',\n      'Every one of the account\\'s concurrent PHP slots was occupied when the test ran. Cached pages consume none, so uncached requests were filling it.',\n      'You, by reducing uncached concurrency, or by moving to a plan with more slots.',\n      'Open the resource usage page and look for entry-process faults at the time of the test. Then find what is uncached: a bot flood, admin-ajax traffic, or a checkout.'];\n    M['ok'] = ['The loopback request passes. The missing jobs are a cron problem, not a loopback problem.',\n      'WordPress reaches itself fine.',\n      'WP-Cron only runs when a visitor triggers it, so a quiet site or a cached site runs it rarely; or DISABLE_WP_CRON is set with no server cron behind it.',\n      'You.',\n      'Set up a server cron in cPanel that runs WP-CLI on a fixed interval, and confirm it with wp cron event list.'];\n    go.addEventListener('click', function(){\n      var codeEl = document.getElementById('ahlb-code');\n      if (!codeEl) { return; }\n      var cfEl = document.getElementById('ahlb-cf');\n      if (!cfEl) { return; }\n      var planEl = document.getElementById('ahlb-plan');\n      if (!planEl) { return; }\n      var key = codeEl.value;\n      var row = M[key];\n      if (!row) { return; }\n      var ep = parseInt(planEl.value, 10);\n      var head = row[0];\n      var layerText = row[1];\n      var causeText = row[2];\n      var whoText = row[3];\n      var firstText = row[4];\n      var proxied = false;\n      if (cfEl.value === 'yes') { proxied = true; }\n      if (proxied) {\n        if (key === '403') {\n          causeText = 'With the domain proxied, the first suspect is Cloudflare: Bot Fight Mode challenges automated traffic across the whole domain and cannot be skipped with WAF custom rules. ' + causeText;\n          firstText = 'Open Cloudflare, Security, then Analytics, and look for the request labeled Bot Fight Mode at the time of the test. Turn the feature off, or move to Super Bot Fight Mode and add a skip rule for wp-cron.php. Then ' + firstText.charAt(0).toLowerCase() + firstText.slice(1);\n        }\n        if (key === '6') {\n          causeText = 'With the domain proxied, the server resolves your domain to a Cloudflare address, so a resolution failure here is the server\\'s resolver, not your zone. ' + causeText;\n        }\n        if (key === '28') {\n          causeText = 'With the domain proxied, the request goes out to Cloudflare and back in; a firewall that blocks Cloudflare\\'s address ranges produces this. ' + causeText;\n        }\n      }\n      if (key === '508') {\n        if (!isNaN(ep)) {\n          causeText = causeText + ' On your plan that ceiling is ' + ep + ' concurrent PHP requests, and the test itself holds two of them while it runs, so ' + (ep - 2) + ' other uncached requests were in flight at that moment.';\n        }\n      }\n      num.textContent = head;\n      layer.textContent = layerText;\n      cause.textContent = causeText;\n      who.textContent = whoText;\n      first.textContent = firstText;\n      out.className = 'ahlb-out ahlb-on';\n    });\n  });\n})();\n<\/script>\n\n\n\n<h2 id=\"aioseo-when-the-loopback-request-is-not-the-problem\" class=\"wp-block-heading\">When the Loopback Request Is Not the Problem<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Two situations look like this warning and are not. The first is a loopback request that passes while scheduled jobs still miss: that is WP-Cron&#8217;s page-load trigger on a quiet or fully cached site, or a <code>DISABLE_WP_CRON<\/code> constant with no server cron behind it, and the fix is a cron job in cPanel that runs WP-CLI on a fixed interval. The second is a REST API failure with the loopback passing, which is almost always a security plugin or a rule that blocks unauthenticated access to <code>wp-json<\/code>, not a network path.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That column in the decoder, &#8220;who changes it,&#8221; is honest about where the line falls. DNS records, Cloudflare settings, <code>.htaccess<\/code>, plugins and Directory Privacy are yours; the server firewall, a ModSecurity exclusion and the TLS layer are ours, and a ticket carrying the exact line from Site Health is what our support works from, around the clock. What takes the loopback request out of the picture for good is on every plan we sell: cron jobs in cPanel, so the schedule runs from the server rather than from a page load, and on <a href=\"https:\/\/www.ahosting.net\/wordpress-hosting.html\">our managed WordPress plans<\/a> a jailed shell with WP-CLI to run it and to test it in one line. The reading above is what we would do on the ticket; the server cron is what you can set up tonight, and the reason the warning stops mattering even before it is cleared.<\/p>\n\n\n\n<h2 id=\"aioseo-a-practical-checklist-for-a-failed-loopback-request\" class=\"wp-block-heading\">A Practical Checklist for a Failed Loopback Request<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The line under the label has been read and written down, code and all, before anything was changed.<\/li>\n\n\n\n<li>The same POST to wp-cron.php has been made from outside the server, and its status code and time were compared with Site Health&#8217;s result.<\/li>\n\n\n\n<li>The domain has been confirmed to resolve to this server from your own computer, and if a migration is in progress, the test has been deferred until after the DNS switch.<\/li>\n\n\n\n<li>If the domain is proxied through Cloudflare, Security Analytics has been checked for a Bot Fight Mode challenge on the request.<\/li>\n\n\n\n<li>cPanel has been checked for a ModSecurity item under Security, and any hit at the time of the test has had its rule ID noted for an exclusion.<\/li>\n\n\n\n<li><code>.htaccess<\/code> has been searched for wp-cron.php, and any deny or method restriction removed.<\/li>\n\n\n\n<li>Directory Privacy is not covering the WordPress directory, or wp-cron.php has been excluded from it.<\/li>\n\n\n\n<li>For a 508, the resource usage page has been checked for entry-process faults at the time of the test, and the uncached traffic filling the slots has been identified.<\/li>\n\n\n\n<li>For a critical result that passes from outside, a ticket has been opened with the exact line, because the remaining causes are server-side.<\/li>\n\n\n\n<li>Scheduled jobs have been moved to a server cron running WP-CLI, so they no longer depend on the loopback request at all.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"faq-your-site-could-not-complete-a-loopback-request\" class=\"wp-block-heading\">Frequently Asked Questions About the Loopback Request Error<\/h2>\n\n\n\n<h3 id=\"faq-loopback-request-error-mean\" class=\"wp-block-heading\">What does the &#8220;WordPress could not complete loopback request&#8221; error mean?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Specifically, it means WordPress tried to make an HTTP request to its own public address, the way a visitor would, and that request either never got an answer or got an answer other than 200. The test behind the message posts a tiny body to your site&#8217;s wp-cron.php and gives it ten seconds. Because wp-cron.php exits the moment it sees a POST, the request only exercises DNS, the network path, whatever sits in front of PHP, and the WordPress bootstrap itself. The line printed underneath the label carries the actual diagnosis: a cURL error code when nothing came back, or an HTTP status code when your own server refused.<\/p>\n\n\n\n<h3 id=\"faq-site-health-loopback-request-test-sends-2026\" class=\"wp-block-heading\">What does the Site Health loopback request test actually send in 2026?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In practice it sends one POST request to your site&#8217;s wp-cron.php with the body site-health=loopback-test, a Cache-Control no-cache header, your current cookies, any HTTP Basic credentials you used to reach wp-admin, and a ten-second timeout. Certificate verification is switched off for this request, so an expired or self-signed certificate cannot fail it. That is the whole test: no DNS lookup of its own, no firewall probe, no cron job. If the request returns 200 the test passes, if it returns any other status the test is marked recommended, and if the HTTP client errors before a response arrives the test is marked critical.<\/p>\n\n\n\n<h3 id=\"faq-loopback-request-vs-rest-api-error\" class=\"wp-block-heading\">Loopback request failed vs REST API error: are they the same problem in Site Health?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Typically they share a cause but they are two different requests. The loopback test posts to wp-cron.php; the REST API test fetches a route under wp-json with the current user&#8217;s cookies and nonce. Both leave the server, resolve your domain, come back in through whatever sits in front of PHP, and boot WordPress. So a firewall, a DNS mismatch or a Cloudflare challenge usually fails both at once, while a security plugin that blocks unauthenticated REST access or a rule that only denies wp-cron.php fails exactly one. Fixing the shared layer first, then re-running Site Health, tells you which kind you have.<\/p>\n\n\n\n<h3 id=\"faq-loopback-request-ahosting-migration-dns\" class=\"wp-block-heading\">Why does the loopback request fail on AHosting shared hosting during a migration before DNS is switched?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Notably, the loopback request uses your public domain, not the server it is running on. While your domain&#8217;s DNS still points at the old host, WordPress on our server resolves that name to the old host&#8217;s address and sends the request there. Depending on what the old host does with it, Site Health reports a 404, a 403, a 200 from the wrong site, or a timeout. Nothing is broken on the new account; the test is simply being answered by the wrong server. Once the DNS change has propagated the same test passes without any change on our side, which is why we recommend running Site Health only after the switch.<\/p>\n\n\n\n<h3 id=\"faq-cloudflare-bot-fight-mode-loopback-request-403\" class=\"wp-block-heading\">Can Cloudflare Bot Fight Mode make the loopback request return a 403 on a WordPress site?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Indeed it can, and it is one of the most common causes on a domain proxied through Cloudflare. The loopback request leaves your server, resolves your domain to Cloudflare&#8217;s edge, and arrives there as automated traffic from a WordPress user agent, which Bot Fight Mode is designed to challenge. Cloudflare&#8217;s own documentation says the feature protects the whole domain without endpoint restrictions, may challenge API traffic, and cannot be bypassed with WAF custom rules or page rules. The practical fixes are to turn Bot Fight Mode off, or to move to Super Bot Fight Mode, which runs on the ruleset engine and does honor skip rules for wp-cron.php.<\/p>\n\n\n\n<h3 id=\"faq-508-loopback-request-ahosting-bronze\" class=\"wp-block-heading\">What does a 508 status on the loopback request mean on an AHosting Bronze plan?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In fact a 508 on the loopback request is your own entry-process ceiling talking. A Bronze account allows up to 30 concurrent PHP requests, and the loopback is one more PHP request from the same account, made at the instant the test runs. When every slot is already occupied, CloudLinux refuses the new request with 508 Resource Limit Reached, and Site Health reports it as a recommended issue with that number. Because a page served from LiteSpeed&#8217;s cache consumes no entry process at all, a 508 during the test means uncached requests were filling the account at that moment, and the fix is to find them rather than to retry the test.<\/p>\n\n\n\n<h3 id=\"faq-curl-error-28-vs-curl-error-7-loopback-request\" class=\"wp-block-heading\">cURL error 28 vs cURL error 7 on a loopback request: which one is a firewall?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">By contrast with what the numbers suggest, either can be a firewall, and the difference is how the firewall behaves. Error 7 means the connection was refused outright: something answered the connection attempt with a rejection, or nothing was listening at the address the domain resolved to. Error 28 means the request was sent and then waited the full ten seconds with no answer, which is what a firewall that silently drops packets produces, and also what a server that takes longer than ten seconds to start WordPress produces. So a 7 points at the address or an active refusal, while a 28 points at a silent drop or a slow bootstrap, and the test from outside the server tells you which.<\/p>\n\n\n\n<h3 id=\"faq-failed-loopback-request-scheduled-posts-woocommerce-2026\" class=\"wp-block-heading\">Does a failed loopback request stop scheduled posts and WooCommerce emails in 2026?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ultimately yes, when the site relies on WP-Cron, because WP-Cron itself is started by a loopback request to wp-cron.php on a visitor&#8217;s page load. If that request cannot complete, scheduled posts stay in the queue and show a missed schedule, plugin update checks stall, and WooCommerce&#8217;s Action Scheduler queue, which carries order emails, subscription renewals and webhook deliveries, stops draining. The Site Health warning is therefore an early signal of a problem you would otherwise discover from a customer. A server cron that calls WP-CLI directly does not depend on the loopback request and keeps those jobs running even while the test fails.<\/p>\n\n\n\n<h3 id=\"faq-test-loopback-requests-working-ahosting\" class=\"wp-block-heading\">How do I test whether loopback requests are working on AHosting without waiting for Site Health?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Fortunately the test is easy to reproduce from any computer, because the loopback request is an ordinary HTTP request. Run curl against your own domain with the same shape Site Health uses: a POST to wp-cron.php with the body site-health=loopback-test, and look at the status code. A 200 with an empty body from outside the server, alongside a failure inside Site Health, means the path is fine for visitors and broken only from the server itself, which points at DNS resolution on the server or at a rule that treats the server&#8217;s own address differently. If WP-CLI is available in your cPanel terminal, wp cron test performs the spawn check WordPress itself uses and reports the result in one line.<\/p>\n\n\n\n<h3 id=\"faq-disable-wp-cron-loopback-request-warning-2026\" class=\"wp-block-heading\">Should I disable WP-Cron to fix the loopback request warning in 2026?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">That said, disabling WP-Cron does not clear the warning, because the test still posts to wp-cron.php whether or not the constant is set, and the file still answers. What disabling WP-Cron does is remove your scheduled jobs from the loopback path, so a server cron that runs WP-CLI keeps them going while you fix the underlying block. That is a sensible first move on a store or any site with time-critical jobs, and it is the right permanent setup on shared hosting regardless. The warning itself is fixed at the layer the error code names: DNS, the firewall, a Cloudflare setting, a ModSecurity rule, a deny rule on the file, or the account&#8217;s entry-process ceiling.<\/p>\n\n\n\n<script>\n(function(){\n  document.addEventListener('DOMContentLoaded', function(){\n    var allH3s = document.querySelectorAll('h3.wp-block-heading');\n    var inFaq = false;\n    for (var i = 0; i < allH3s.length; i++) {\n      var h3 = allH3s[i];\n      var prev = h3.previousElementSibling;\n      if (prev) {\n        if (prev.tagName === 'H2') {\n          var prevId = prev.getAttribute('id');\n          if (prevId) {\n            if (prevId.indexOf('faq-') === 0) {\n              inFaq = true;\n            } else {\n              inFaq = false;\n            }\n          }\n        }\n      }\n      if (inFaq) {\n        initToggle(h3);\n      }\n    }\n    function initToggle(h3) {\n      var answer = h3.nextElementSibling;\n      if (!answer) { return; }\n      if (answer.tagName !== 'P') { return; }\n      var chev = document.createElement('span');\n      chev.className = 'ahfaq-chev ahfaq-chev-closed';\n      chev.setAttribute('aria-hidden', 'true');\n      h3.appendChild(chev);\n      h3.setAttribute('tabindex', '0');\n      h3.setAttribute('aria-expanded', 'false');\n      answer.classList.add('ahfaq-collapsed');\n      h3.addEventListener('click', function(){ doToggle(h3, answer, chev); });\n      h3.addEventListener('keydown', function(e){\n        if (e.key === 'Enter') { e.preventDefault(); doToggle(h3, answer, chev); }\n        if (e.key === ' ') { e.preventDefault(); doToggle(h3, answer, chev); }\n      });\n    }\n    function doToggle(h3, answer, chev) {\n      var isOpen = h3.getAttribute('aria-expanded') === 'true';\n      if (isOpen) {\n        answer.classList.remove('ahfaq-open');\n        answer.classList.add('ahfaq-collapsed');\n        h3.setAttribute('aria-expanded', 'false');\n        chev.classList.add('ahfaq-chev-closed');\n        chev.classList.remove('ahfaq-chev-open');\n      } else {\n        answer.classList.remove('ahfaq-collapsed');\n        answer.classList.add('ahfaq-open');\n        h3.setAttribute('aria-expanded', 'true');\n        chev.classList.remove('ahfaq-chev-closed');\n        chev.classList.add('ahfaq-chev-open');\n      }\n    }\n  });\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>TL;DR A failed loopback request means WordPress could not reach its own wp-cron.php with a ten-second POST. The code printed under the label is the diagnosis: a cURL error means nothing answered (DNS, firewall, network), a status code means your own server refused (Cloudflare, ModSecurity, a deny rule, or the entry-process ceiling). The message sits [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":1265,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[8],"tags":[286,285,84,282,284,110,276,65,283],"class_list":["post-1263","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress","tag-cloudflare-bot-fight-mode","tag-curl-error-28","tag-entry-processes","tag-loopback-request","tag-modsecurity","tag-shared-hosting","tag-site-health","tag-wp-cron","tag-wp-cron-php"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"The AHosting Loopback Error Decoder: What Each Code Means on Shared Hosting Read the line under the label and find it in the table. Its left column is what Site Health prints; the rest is what that code means when the site runs on a cPanel account behind LiteSpeed and CloudLinux, which is what the\" \/>\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\/your-site-could-not-complete-a-loopback-request\/\" \/>\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=\"Your Site Could Not Complete a Loopback Request: How to Read the Error and Fix It on Shared Hosting | Blog Home\" \/>\n\t\t<meta property=\"og:description\" content=\"The AHosting Loopback Error Decoder: What Each Code Means on Shared Hosting Read the line under the label and find it in the table. Its left column is what Site Health prints; the rest is what that code means when the site runs on a cPanel account behind LiteSpeed and CloudLinux, which is what the\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.ahosting.net\/blog\/your-site-could-not-complete-a-loopback-request\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/09\/your-site-could-not-complete-a-loopback-request-ahosting.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/09\/your-site-could-not-complete-a-loopback-request-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-11T20:59:21+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-09-11T22:17:37+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=\"Your Site Could Not Complete a Loopback Request: How to Read the Error and Fix It on Shared Hosting | Blog Home\" \/>\n\t\t<meta name=\"twitter:description\" content=\"The AHosting Loopback Error Decoder: What Each Code Means on Shared Hosting Read the line under the label and find it in the table. Its left column is what Site Health prints; the rest is what that code means when the site runs on a cPanel account behind LiteSpeed and CloudLinux, which is what the\" \/>\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\/your-site-could-not-complete-a-loopback-request-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\\\/your-site-could-not-complete-a-loopback-request\\\/#article\",\"name\":\"Your Site Could Not Complete a Loopback Request: How to Read the Error and Fix It on Shared Hosting | Blog Home\",\"headline\":\"Your Site Could Not Complete a Loopback Request: How to Read the Error 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\\\/your-site-could-not-complete-a-loopback-request-ahosting.jpg\",\"width\":1200,\"height\":675,\"caption\":\"A cURL code means nothing answered. A status code means your own server refused. The line under the label is the diagnosis. By Matt Chrust, Director of Business Development, AHosting.\"},\"datePublished\":\"2026-09-11T20:59:21+00:00\",\"dateModified\":\"2026-09-11T22:17:37+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/your-site-could-not-complete-a-loopback-request\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/your-site-could-not-complete-a-loopback-request\\\/#webpage\"},\"articleSection\":\"WordPress, Cloudflare Bot Fight Mode, cURL error 28, entry processes, loopback request, ModSecurity, Shared Hosting, Site Health, WP-Cron, wp-cron.php\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/your-site-could-not-complete-a-loopback-request\\\/#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\\\/your-site-could-not-complete-a-loopback-request\\\/#listItem\",\"name\":\"Your Site Could Not Complete a Loopback Request: How to Read the Error 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\\\/your-site-could-not-complete-a-loopback-request\\\/#listItem\",\"position\":3,\"name\":\"Your Site Could Not Complete a Loopback Request: How to Read the Error 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\\\/your-site-could-not-complete-a-loopback-request\\\/\"}]},{\"@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\\\/your-site-could-not-complete-a-loopback-request\\\/#organizationLogo\"},\"image\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/your-site-could-not-complete-a-loopback-request\\\/#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\\\/your-site-could-not-complete-a-loopback-request\\\/#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\\\/your-site-could-not-complete-a-loopback-request\\\/#webpage\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/your-site-could-not-complete-a-loopback-request\\\/\",\"name\":\"Your Site Could Not Complete a Loopback Request: How to Read the Error and Fix It on Shared Hosting | Blog Home\",\"description\":\"The AHosting Loopback Error Decoder: What Each Code Means on Shared Hosting Read the line under the label and find it in the table. Its left column is what Site Health prints; the rest is what that code means when the site runs on a cPanel account behind LiteSpeed and CloudLinux, which is what the\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/your-site-could-not-complete-a-loopback-request\\\/#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\\\/your-site-could-not-complete-a-loopback-request-ahosting.jpg\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/your-site-could-not-complete-a-loopback-request\\\/#mainImage\",\"width\":1200,\"height\":675,\"caption\":\"A cURL code means nothing answered. A status code means your own server refused. The line under the label is the diagnosis. By Matt Chrust, Director of Business Development, AHosting.\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/your-site-could-not-complete-a-loopback-request\\\/#mainImage\"},\"datePublished\":\"2026-09-11T20:59:21+00:00\",\"dateModified\":\"2026-09-11T22:17:37+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":"Your Site Could Not Complete a Loopback Request: How to Read the Error and Fix It on Shared Hosting | Blog Home","description":"The AHosting Loopback Error Decoder: What Each Code Means on Shared Hosting Read the line under the label and find it in the table. Its left column is what Site Health prints; the rest is what that code means when the site runs on a cPanel account behind LiteSpeed and CloudLinux, which is what the","canonical_url":"https:\/\/www.ahosting.net\/blog\/your-site-could-not-complete-a-loopback-request\/","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\/your-site-could-not-complete-a-loopback-request\/#article","name":"Your Site Could Not Complete a Loopback Request: How to Read the Error and Fix It on Shared Hosting | Blog Home","headline":"Your Site Could Not Complete a Loopback Request: How to Read the Error 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\/your-site-could-not-complete-a-loopback-request-ahosting.jpg","width":1200,"height":675,"caption":"A cURL code means nothing answered. A status code means your own server refused. The line under the label is the diagnosis. By Matt Chrust, Director of Business Development, AHosting."},"datePublished":"2026-09-11T20:59:21+00:00","dateModified":"2026-09-11T22:17:37+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.ahosting.net\/blog\/your-site-could-not-complete-a-loopback-request\/#webpage"},"isPartOf":{"@id":"https:\/\/www.ahosting.net\/blog\/your-site-could-not-complete-a-loopback-request\/#webpage"},"articleSection":"WordPress, Cloudflare Bot Fight Mode, cURL error 28, entry processes, loopback request, ModSecurity, Shared Hosting, Site Health, WP-Cron, wp-cron.php"},{"@type":"BreadcrumbList","@id":"https:\/\/www.ahosting.net\/blog\/your-site-could-not-complete-a-loopback-request\/#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\/your-site-could-not-complete-a-loopback-request\/#listItem","name":"Your Site Could Not Complete a Loopback Request: How to Read the Error 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\/your-site-could-not-complete-a-loopback-request\/#listItem","position":3,"name":"Your Site Could Not Complete a Loopback Request: How to Read the Error 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\/your-site-could-not-complete-a-loopback-request\/"}]},{"@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\/your-site-could-not-complete-a-loopback-request\/#organizationLogo"},"image":{"@id":"https:\/\/www.ahosting.net\/blog\/your-site-could-not-complete-a-loopback-request\/#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\/your-site-could-not-complete-a-loopback-request\/#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\/your-site-could-not-complete-a-loopback-request\/#webpage","url":"https:\/\/www.ahosting.net\/blog\/your-site-could-not-complete-a-loopback-request\/","name":"Your Site Could Not Complete a Loopback Request: How to Read the Error and Fix It on Shared Hosting | Blog Home","description":"The AHosting Loopback Error Decoder: What Each Code Means on Shared Hosting Read the line under the label and find it in the table. Its left column is what Site Health prints; the rest is what that code means when the site runs on a cPanel account behind LiteSpeed and CloudLinux, which is what the","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.ahosting.net\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.ahosting.net\/blog\/your-site-could-not-complete-a-loopback-request\/#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\/your-site-could-not-complete-a-loopback-request-ahosting.jpg","@id":"https:\/\/www.ahosting.net\/blog\/your-site-could-not-complete-a-loopback-request\/#mainImage","width":1200,"height":675,"caption":"A cURL code means nothing answered. A status code means your own server refused. The line under the label is the diagnosis. By Matt Chrust, Director of Business Development, AHosting."},"primaryImageOfPage":{"@id":"https:\/\/www.ahosting.net\/blog\/your-site-could-not-complete-a-loopback-request\/#mainImage"},"datePublished":"2026-09-11T20:59:21+00:00","dateModified":"2026-09-11T22:17:37+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":"Your Site Could Not Complete a Loopback Request: How to Read the Error and Fix It on Shared Hosting | Blog Home","og:description":"The AHosting Loopback Error Decoder: What Each Code Means on Shared Hosting Read the line under the label and find it in the table. Its left column is what Site Health prints; the rest is what that code means when the site runs on a cPanel account behind LiteSpeed and CloudLinux, which is what the","og:url":"https:\/\/www.ahosting.net\/blog\/your-site-could-not-complete-a-loopback-request\/","og:image":"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/09\/your-site-could-not-complete-a-loopback-request-ahosting.jpg","og:image:secure_url":"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/09\/your-site-could-not-complete-a-loopback-request-ahosting.jpg","og:image:width":1200,"og:image:height":675,"article:published_time":"2026-09-11T20:59:21+00:00","article:modified_time":"2026-09-11T22:17:37+00:00","twitter:card":"summary_large_image","twitter:site":"@ahostingdotnet","twitter:title":"Your Site Could Not Complete a Loopback Request: How to Read the Error and Fix It on Shared Hosting | Blog Home","twitter:description":"The AHosting Loopback Error Decoder: What Each Code Means on Shared Hosting Read the line under the label and find it in the table. Its left column is what Site Health prints; the rest is what that code means when the site runs on a cPanel account behind LiteSpeed and CloudLinux, which is what the","twitter:creator":"@ahostingdotnet","twitter:image":"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/09\/your-site-could-not-complete-a-loopback-request-ahosting.jpg"},"aioseo_meta_data":{"post_id":"1263","title":null,"description":null,"keywords":null,"keyphrases":{"focus":[],"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":null,"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":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2026-09-11 20:54:50","updated":"2026-09-11 22:17:38","seo_analyzer_scan_date":null,"focus_keyword":null,"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\tYour Site Could Not Complete a Loopback Request: How to Read the Error 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":"Your Site Could Not Complete a Loopback Request: How to Read the Error and Fix It on Shared Hosting","link":"https:\/\/www.ahosting.net\/blog\/your-site-could-not-complete-a-loopback-request\/"}],"_links":{"self":[{"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/posts\/1263","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=1263"}],"version-history":[{"count":3,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/posts\/1263\/revisions"}],"predecessor-version":[{"id":1272,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/posts\/1263\/revisions\/1272"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/media\/1265"}],"wp:attachment":[{"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/media?parent=1263"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/categories?post=1263"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/tags?post=1263"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}