Open a page-builder post in the code editor and you may find a wall of gibberish where your headings and paragraphs should be: JTIwJTNDaDIlM0U.... That’s your content, base64-encoded inside a shortcode. It looks like obfuscation for its own sake. It isn’t – but the reasons it exists are also the reasons it causes trouble later.
Text and CSS survive shortcode parsing. Quotes, commas and HTML don't break it. Complex data fits in one attribute. The visual editor won't mangle markup.
Opaque to search-and-replace tools. Domain migrations miss encoded URLs. Hidden from SEO and cleanup audits. ~33% larger; obfuscation, not encryption.
Table of Contents
What base64 actually is (and isn’t)
Base64 is an encoding, not encryption. It maps arbitrary bytes onto 64 safe ASCII characters (A-Z, a-z, 0-9, +, /), so any text – including quotes, HTML tags, and line breaks – becomes a single unbroken string with no characters that need escaping. Anyone can decode it in one line; there is no key and no secret. Its whole job is safe transport, not confidentiality.
That distinction matters: base64 in your post_content protects nothing and hides nothing from an attacker. It only hides content from tools that don’t decode it – which turns out to include several tools you rely on.
Why page builders do it: parsing safety
A page builder stores a block as a WordPress shortcode: [block attr="value" ...]. That syntax is fragile. Put a double quote, a ], or a stray newline inside value and the shortcode parser breaks – it can’t tell where the attribute ends. Now imagine the value is a full paragraph of formatted HTML, or a block of custom CSS with braces and semicolons. There is no way to store that safely as a raw attribute.
Base64 solves it cleanly:
- Every character becomes parser-safe. Quotes, commas, brackets, and HTML collapse into the 64-symbol alphabet, so nothing inside the value can confuse the shortcode syntax.
- Complex content fits one attribute. A whole rich-text block or CSS rule set travels as a single token instead of being split or escaped.
- The visual editor leaves it alone. WordPress’s editor and content filters happily rewrite raw HTML (stripping tags, “fixing” markup, adding paragraphs). An opaque token survives that round-trip intact.
Base64 inside a shortcode is a shipping container: it doesn’t change what’s inside, it just stops the contents spilling on the way through the parser.
For the builder’s authors, this is a defensible choice. It is far simpler than inventing an escaping scheme for every awkward character, and it makes the stored block robust.
What it costs you later
The same opacity that protects the content from the parser hides it from everything else – and that is where site owners get hurt:
- Search-and-replace can’t see it. A find-and-replace across
post_content– the everyday way to fix a typo, a brand name, or a URL across a site – silently skips anything encoded. The text is there; your tool just can’t read it. - Migrations miss encoded URLs. Moving from a staging domain to production, you run a database search-replace for the old host. Any URL baked into a base64 block is invisible to it, so it stays pointing at staging – a classic “half the site still links to dev” bug. (Serialized data has the same hazard, which is why migration tools handle serialization specially – but they don’t decode base64.)
- SEO and audit tools can’t read it. Anything scanning rendered-or-stored content for keywords, headings, or links may not see text locked in an encoded attribute, so your real content is undercounted.
- Launch cleanup can’t find demo strings. Leftover theme-demo text and demo ad blocks are often base64-encoded, so a plain marker scan misses them – a real gap when stripping demo content before launch. An audit has to decode the block bodies first.
- It’s bigger. Base64 inflates data by about a third, so encoded content makes each post row larger for no rendered benefit – a small drag on the database and on anything that ships that content. (Payload discipline matters; see WordPress speed optimization.)
The encoding that saved the parser is the encoding that blindsides your migration. Base64 hides content from your tools far more effectively than from any attacker.
Working with it instead of fighting it
You rarely get to turn base64 off – it’s how the builder stores blocks. So work with it:
- Edit in the builder, not the raw code editor, so encoding and decoding happen for you.
- Decode before you audit. When you need to search, migrate, or clean up, base64-decode the block bodies first, then run your search-replace or marker scan on the decoded text. This is exactly why reaching a page builder’s own store takes a decoding step – and once decoded, match the exact form the builder stored, because the text is JSON-escaped inside and a naive replace can silently change nothing.
- Change one value, not the whole string. Some builders store per-device settings as base64-encoded JSON; decode one, edit only the value you need and re-encode it.
- Re-check after a domain move. Because migrations miss encoded URLs, load key pages after a move and look for links still pointing at the old host – which URLs a migration reaches, and which it silently misses.
The short version
Page-builder themes base64-encode text and CSS so it survives shortcode parsing: encoding turns quotes, HTML, and newlines into one parser-safe token the visual editor won’t mangle. It is encoding, not encryption, so it protects nothing – but it does hide content from search-and-replace, database migrations (encoded URLs get missed), SEO tools, and launch-cleanup scans, and it’s about a third larger. Edit blocks in the builder, decode block bodies before you audit or migrate, and re-check links after a domain move.
Frequently Asked Questions
Is base64 encoding the same as encryption?
No. Base64 is a reversible encoding onto 64 safe ASCII characters, with no key and no secret – anyone can decode it instantly. It protects content from parsers and editors, not from people. It provides no security or confidentiality whatsoever.
Why is my page-builder content stored as gibberish?
Because the builder base64-encoded it inside a shortcode attribute. Raw text with quotes, HTML, or line breaks would break the shortcode parser, so the builder encodes it into one safe token. Open the post in the builder rather than the code editor and it displays normally.
Does base64-encoded content hurt SEO?
Not directly – the front end still renders decoded, readable HTML for crawlers. The risk is indirect: audit and search tools that scan stored content may not decode it, so they can undercount your text or miss internal links, and you can mistakenly think content is missing when it’s only encoded.
Can I stop the theme from base64-encoding?
Usually not – it’s how the builder stores blocks, and turning it off (if that’s even possible) would risk breaking the parser it protects. The practical approach is to work with it: edit inside the builder, and decode block bodies whenever you need to search, audit, or migrate the content.