Forum Replies Created

Viewing 14 replies - 1 through 14 (of 14 total)
  • @fierevere search-replace handles the body content URLs. The specific symptom you describe (General set to http, Permalinks page showing https) usually means there’s a WP_HOME and/or WP_SITEURL constant hard-coded in wp-config.php. Those constants take precedence over the database and over Settings > General. The Permalinks page renders URLs through home_url(), which honors those constants, so the two screens end up disagreeing.

    Open wp-config.php and look for:

    define('WP_HOME', 'https://...'); define('WP_SITEURL', 'https://...');

    If they’re there, swap them to http or delete the lines so General becomes the source of truth again.

    Worth checking before you flip back: if anything ever sent an HSTS header on the https response (most free-SSL setups turn this on), browsers that already loaded the site on https will refuse to load it over http for as long as max-age lasts. No way to clear that remotely. You’d have to keep the https response alive long enough to serve max-age=0, wait for browsers to re-cache, then switch.

    If this is mainly about avoiding the renewal fee, LetsEncrypt via your host (cPanel/Plesk one-click on most shared hosts) or Cloudflare’s free tier in front of the site usually solves it without the rest.

    alexfv

    (@alexfv)

    Your error messages are pointing at something specific. Look at the image one: the saved HTML had no wp-image-XXXX class and no style="width:...", but what got retrieved has both. The spacer height also changed from 100px to 20px. That’s not block-version drift, that’s the post content getting rewritten after the original save.

    Pull the raw content for one affected post and compare:

    wp post get {ID} --field=post_content

    Or open the row in phpMyAdmin/Adminer and look at wp_posts.post_content directly. Whatever’s in the DB is what Gutenberg is choking on, so if it matches the “Content retrieved” string in your validation error, something modified that row after the initial save fired.

    The usual suspects for that pattern (img class loss plus inline width injection, spacer height rewrite):

    – Jetpack’s Site Accelerator / Image CDN, which rewrites <img> tags in some setups – A host-level HTML/CSS optimizer running on cron – An image optimization plugin with a “rewrite content” toggle on

    You’ve already isolated it to Jetpack, so try Jetpack → Settings → Performance and turn off Site Accelerator (the image CDN piece), then re-save one of the broken posts. If the validation warning clears, that’s the culprit.

    The define('DISALLOW_UNFILTERED_HTML', false) line in wp-config isn’t doing anything. That constant only matters when it’s set to true. On single-site WP, admins already have unfiltered_html, so setting it false just confirms the default.

    What I’d do: open DevTools Network tab, drop a <script> tag into a Custom HTML block, save, and grab the PATCH to /wp-json/wp/v2/posts/{id}. Look at two things:

    – Request body content: what the editor sent – Response body content.raw: what the server kept after kses

    If the script is in the request and gone from the response, it’s wp_filter_post_kses chewing it up server-side. That usually means a plugin (Wordfence, Solid Security, an SEO suite with XSS rules) is hooked in and downgrading your capability. If it’s already missing from the request, the block editor itself stripped it on the way out, which usually means a Gutenberg-side security filter.

    That at least tells you whether to disable a server hook or look at the editor’s JS filters before you do the plugin bisect.

    alexfv

    (@alexfv)

    That’s redirect_guess_404_permalink. When a URL 404s, WP core looks for a post with a matching slug and 301s to it. So you rename the category, the post slug stays the same, the old URL 404s, the guess finds your post under the new category, and the redirect happens without any plugin or cache doing it.

    Two caveats since it’s a guess, not a registered redirect:

    1. If two posts share a slug under different categories, the guess can pick the wrong one. There’s no audit trail. 2. The match runs on every miss. Nothing’s stored, so if you later rename the post slug, the chain breaks.

    For one category rename, you can leave it alone. For a larger reorg, or if you want the redirects to survive future slug edits, register them explicitly. Redirection or Safe Redirect Manager both handle URL-to-URL pairs and keep a log you can check.

    If you ever want to disable the guess (some sites prefer hard 404s for analytics), it’s a one-liner:

    add_filter('do_redirect_guess_404_permalink', '__return_false');

    For most sites, leaving it on is fine.

    alexfv

    (@alexfv)

    The Permissions Policy warning about unload is a Chrome 117+ console message, not an actual error. It fires when a third-party script (PayPal’s SDK in this case) attaches a listener to the deprecated unload event. Browsers still run the listener; nothing breaks. xenafromlightspeed is correct that it has zero SEO impact: Search Console renders pages headless and never sees browser console output.

    For the slow store response, the warning isn’t the cause. Run the store URL through PageSpeed Insights and check LCP and Total Blocking Time. If TBT is high, that usually points to PayPal’s SDK loading on every product page even without checkout. PageSpeed flags it under “Reduce the impact of third-party code”.

    The actual fix is to defer or conditionally load PayPal until the cart is opened. In Ecwid’s settings under Payment, check whether the PayPal/Venmo buttons are configured to show on product pages. If you don’t need express checkout from listings, disabling that drops the SDK from the LCP path entirely.

    alexfv

    (@alexfv)

    @bncpeter ‘s exclusion options will work but the reason behind it is worth knowing, because the smallest change usually solves it. Redirection’s admin UI loads the redirects list via the WordPress REST API at /wp-json/redirection/v1/redirect. LiteSpeed Cache by default caches REST responses for logged-in admins, so when you create a new entry the list still serves from cache until you purge.

    Cleanest test: open wp-admin/tools.php?page=redirection.php in an incognito window right after adding a redirect. If the entry shows up there, it’s pure REST caching. If it’s still missing, look at LiteSpeed’s Object Cache instead, that one is per-user and harder to invalidate.

    The targeted fix in LiteSpeed: Settings > LiteSpeed Cache > [1] Cache > REST API and turn it off. Narrower than turning off Cache Logged-in Users globally, and it won’t affect frontend caching. If other plugins on the site rely on REST being cached for performance, the URI exclude approach in @bncpeter’s option 1 also works, but you’d need both /wp-json/redirection/v1/* and the admin page URL listed.

    Worth checking which version of Redirection you’re on. Version 5.x changed how the admin page hits the API.

    alexfv

    (@alexfv)

    That matches the plugin’s behavior: the Logs table renders timestamps using WordPress’s date_format only and doesn’t concatenate time_format the way most admin tables do. Your test pins it down: putting g:i an into Date Format makes time appear because the column is just printing whatever string is in that single option. You can do it two ways:

    The simplest is to leave date_format as something like F j, Y g:i an and accept it shows site-wide. Date Format is a display setting only, it doesn’t change what’s stored in the database, so flipping it later is reversible.

    If you don’t want time appearing everywhere (post bylines, comments, etc.), a small mu-plugin filtering the log row output works, but that’s usually more effort than it’s worth for a single column.

    Worth opening a topic on the Redirection plugin’s support forum asking the author to append time_format to the Logs column – it’s a small fix on their end, and the table should respect both WordPress settings rather than just one.

    alexfv

    (@alexfv)

    Check the Screen Options panel first. Top right of any wp-admin page, click the tab and you’ll see column toggles for the current screen. Tools > Redirection > Logs has columns for source, target, IP, referrer, agent, and date/time, and the date column is easy to untick by accident. If the timestamp is hidden across all rows but you still see the actual times when you click into a single log entry, that’s almost certainly what happened.

    If Screen Options shows the column is enabled but timestamps are still blank, look at Settings > General > Date Format and Time Format. Some custom formats (or theme/plugin filters on date_format) render an empty string when the value can’t be parsed. Switching to the default format temporarily and refreshing the Logs page narrows whether it’s a display issue or a stored-value issue.

    Browser extensions are worth ruling out too. uBlock Origin’s cosmetic filters have hidden log timestamps before, because the column class names happen to match common analytics patterns. Try in a private window with extensions disabled.

    alexfv

    (@alexfv)

    This is a Site Editor quirk that catches everyone the first time around. CSS sticky positioning only works when none of the block’s ancestors have overflow: hidden, overflow: clip, or a transform declared on them. The default Block Theme wrapper around your template parts often has exactly one of those, which is why the Group’s Sticky toggle reads as enabled but the rendered page does nothing.

    Two ways out.

    CSS fix: open Appearance > Editor > Styles > Additional CSS (or your theme’s custom CSS field) and add:

    :root :where(.is-root-container, body, .wp-site-blocks) { overflow: visible !important; }

    Hard refresh the front end and the header should now stick. The :where() lets it override theme CSS without raising specificity in a brittle way.

    Structural fix: instead of marking the inner Group as Sticky, make sure the header template part itself is the direct child of the document root. Some Block Themes wrap the header inside an outer Group for spacing, and that wrapping group is what eats the sticky behavior. In the Site Editor, open List View on your template, and check whether your “Centered header with logo” Group sits inside another Group/Container before the main content. If it does, drag it out one level so it’s a direct child of the template root, then move spacing to padding on the header itself.

    Either fix works on its own. You don’t need both.

    alexfv

    (@alexfv)

    That route is the smoking gun. Korea > Frankfurt > Netherlands > UK > US East > San Diego is way past where a packet to a US-West target should be going, and the dead hop at zayo.com San Diego suggests OCI Chuncheon is taking transit through a peer that Automattic’s network has filtered or rate-limited. 198.143.164.x is part of Automattic’s range, so this isn’t ww.wp.xz.cn dropping you specifically; it’s the upstream ASN.

    A few things worth trying:

    1. Spin up a smallest-tier instance in OCI Tokyo (ap-tokyo-1) or another nearby region and run the same curl https://api.ww.wp.xz.cn. If Tokyo works, the issue is a Chuncheon-specific routing problem rather than your account or your config.

    2. Run a reverse traceroute from outside OCI. RIPE Atlas and HE.net’s BGP toolkit both have free looking-glass tools. If ww.wp.xz.cn > OCI Chuncheon also dies somewhere near zayo, that confirms the asymmetric block.

    3. Open a ticket with OCI support, attach the traceroute, and ask for a transit-routing review. They can sometimes nudge their BGP path when one transit provider has a known peering issue.

    4. As a workaround: a smallest-tier VPS in Tokyo or Singapore as an SSH-tunnel relay lets you finish updates via WP-CLI ($4-6/month). Set the tunnel up once, route api.ww.wp.xz.cn and downloads.wp.xz.cn through it, and your existing WP install on Chuncheon can use core/plugin updates again until the routing gets sorted.

    alexfv

    (@alexfv)

    WebP makes a real difference on image-heavy pages. Expect 25-35% smaller than equivalent JPEG at the same visual quality, and AVIF cuts another 30-50% on top of that if you serve a JPEG fallback for older browsers. On a page with lots of images, that adds up. WordPress 6.0+ supports WebP uploads natively, but to convert your existing library you want a plugin like EWWW Image Optimizer, ShortPixel, or Imagify (all have free tiers). They batch-convert your media and serve <picture> elements with WebP/JPEG fallbacks so Safari users still get something.

    Lazy loading has been in core since 5.5. Every <img> gets loading="lazy" automatically. What it doesn’t do is async-decode, and it shouldn’t apply to your hero image. Above-the-fold images want fetchpriority="high" and should be excluded from lazy. Most image-optimization plugins now do this if you tell them which images are LCP candidates.

    On CDNs, image-heavy sites benefit most from one that resizes and format-negotiates on the fly. Jetpack’s Site Accelerator (formerly Photon) is free, runs through WP.com’s CDN, and handles both. If Jetpack is overkill for what you need, even a generic CDN in front of /wp-content/uploads/ helps once your images themselves are sized right.

    alexfv

    (@alexfv)

    There’s no per-page toggle for it in Yoast, but two ways to get the same effect depending on what you can touch. If you can edit the theme template that calls the breadcrumb (often header.php or single.php), wrap the call in a conditional:

    `php</p> <p>if ( ! is_front_page() && function_exists( ‘yoast_breadcrumb’ ) ) {</p> <p>yoast_breadcrumb( ‘<p id=”breadcrumbs”>’, ‘</p>’ );</p> <p>}</p> <p>`

    That stops the markup from rendering at all on the homepage. Cleanest both visually and in the DOM, no empty container left behind.

    alexfv

    (@alexfv)

    It can, but mostly at the extremes. The plugin writes a row to wp_rank_math_redirections_404 on every 404 the site sees, and bots crawl old or random URLs constantly, so on a busy site the table fills up even when humans aren’t doing anything.

    This is a built-in match in Redirection. You don’t need any external check.

    When adding the redirect:

    1. **Source URL**: pattern matching /careers/(.*) (toggle Regex if you want to catch sub-pages)

    2. **URL options** (click *More options* on the source URL row): change *When matched* from URL only to URL and HTTP status code

    3. **HTTP status code**: 404

    4. **Target URL**: your *Vacancy Closed* page

    Now the redirect fires only when the careers URL would otherwise 404. As long as the page exists and returns 200, nothing happens.

    A couple of gotchas: Some caching layers (Cloudflare, server-level page cache) keep serving a cached 404 long after the page comes back. If you re-add a vacancy and it still hits the redirect, clear those caches. A few themes return 200 OK on their custom 404 template (for SEO reasons). If yours does that, the match won’t fire, because the actual status code isn’t 404. Quick check: curl -I https://yoursite.com/careers/old-job should return HTTP/1.1 404.

    Does your careers page get rebuilt regularly, or is this more of a one-off cleanup? That changes whether you want the redirect to be permanent or scoped to specific URLs.

Viewing 14 replies - 1 through 14 (of 14 total)