Why WeChat turns whitespace into empty list items
This guide explains why WeChat Official Account drafts can show alternating empty list items, how the new editor reinterprets structural whitespace, and how to fix the issue before publishing.
Here is the short answer first: if a WeChat Official Account draft suddenly shows alternating blank bullets or numbered items, the root cause is often not the visible text at all. It is structural whitespace between tags that the new WeChat editor re-imports as if it were part of the list. Once those whitespace nodes sit near ol, ul, or li elements, the editor can rebuild them into empty list entries.
This matters because the failure often hides everywhere except the WeChat backend. Your website preview may look fine. A normal browser render may look fine. Even another publishing platform may look fine. Then the WeChat draft view shows “every odd item is blank” or “the list suddenly contains empty rows.” In a multi-platform workflow, that means “valid Markdown” is not the same thing as “safe WeChat input.” OmniGoAI's OmniPost is useful here not only because it distributes content, but because it helps teams catch platform-specific breakage before a final send.
Why does WeChat create empty list items from whitespace?
Because the new WeChat editor is not a passive browser renderer. It behaves more like an import pipeline that reads incoming content, normalizes it, and reconstructs blocks inside its own editor model.
In a browser, whitespace between tags is often harmless formatting. In an editor import pipeline, though, that same whitespace can survive as text nodes long enough to be misinterpreted during list reconstruction. When that happens near list markup, the editor may count the whitespace as a placeholder item.
That is why the visible symptom is so specific:
- item 1 is blank;
- item 2 is normal;
- item 3 is blank;
- item 4 is normal.
The pattern is a clue that the editor is rebuilding the list from a structure that still contains whitespace nodes it should have ignored.
Why does this show up in WeChat but not on a website?
Because most website and Markdown previews only render the final HTML. They do not import the content into a second editor model.
WeChat, by contrast, behaves like a second-stage editor. The content is not only displayed. It is re-read, normalized, and converted into WeChat's own internal structure. That is why this class of issue often follows the same pattern:
- website preview looks correct;
- generic HTML preview looks correct;
- WeChat draft view looks wrong;
- manual cleanup inside the backend appears to fix it temporarily.
This is also consistent with other WeChat-specific workflow problems. Our earlier article on WeChat Official Account API drafts explains why draft creation depends on account eligibility, IP allowlists, cover handling, and final-send boundaries. Our guide to WeChat Official Account link policy shows why WeChat should be treated as a higher-risk review environment rather than just another output channel. The empty-list issue belongs to the same family: the WeChat backend has its own import boundary, and normal web output is not enough proof of safety.
Which authoring patterns are most likely to trigger alternating blank items?
Three patterns are especially risky.
1. Nicely formatted HTML with preserved indentation
A generator may output something like this:
<ol>
<li>Step one</li>
<li>Step two</li>
</ol>
That looks harmless, and in most renderers it is. But once another cleanup stage preserves or expands the spacing between tags, the WeChat editor may treat the leftover whitespace as meaningful input.
2. Mixed Markdown and rich-text fragments
If a list contains stray <p>, <div>, styled spans, or content pasted from a rich editor, the exported structure becomes more fragile than it looks. That makes it easier for redundant whitespace to remain around li boundaries.
3. Sanitizers that preserve structural whitespace too generously
A sanitizer may try to be conservative and keep formatting whitespace so it does not damage visible text. That is often acceptable for websites, but it can become bad input for an editor that reinterprets structure.
What is the most reliable fix?
Compact the list structure so real list items sit directly next to each other, without meaningless whitespace nodes in between. In practice, that usually means:
- inspect list-related HTML before sending content into WeChat;
- remove structural whitespace between
ol/ulandliwhere it is not semantically needed; - avoid mixing rich-text fragments into otherwise simple Markdown lists;
- verify the result in the WeChat draft view, not only in a browser preview.
The key engineering lesson is simple: inside the WeChat pipeline, whitespace is sometimes no longer “just formatting.” It can become data.
What does this mean for a multi-platform content workflow?
It means a single Markdown artifact is not the whole story. Your website, developer platforms, and the WeChat editor all accept different kinds of input safely.
A more durable workflow looks like this:
- keep the canonical website article semantically clean and structurally simple;
- apply extra cleanup for WeChat-like editor imports;
- verify with a platform draft or preview stage;
- only then decide whether direct publish is appropriate.
That is exactly why content teams separate website publishing, indexing, and platform distribution instead of forcing one HTML output into every channel unchanged. For WeChat, importability is its own acceptance test.
If your team synchronizes one article across website, Zhihu, CSDN, Juejin, and WeChat, a local-first orchestration layer like OmniPost is useful not only because it sends content outward, but because it helps preserve per-platform variants, drafts, and debugging clues before the problem lands on an editor or operator.
A quick pre-publish checklist
Use this short checklist before sending a WeChat version:
- Was the list authored as clean Markdown instead of Markdown mixed with pasted rich text?
- After cleanup, is there still large whitespace between
ol/ulandlitags? - Does the WeChat draft view show alternating blank list items?
- Can you make the issue disappear by compacting list structure alone?
- After that fix, have you also checked the cover, summary, and link compliance?
FAQ
FAQ 1: Why is the website preview correct while the WeChat draft is broken?
Because the website only renders output, while the WeChat backend re-imports and reconstructs it. Whitespace that a browser ignores can still matter during WeChat's import step.
FAQ 2: Is this a Markdown problem or a WeChat problem?
More precisely, it is a boundary mismatch. Output that is valid for normal web rendering is not automatically safe for the WeChat editor's import logic.
FAQ 3: Is manually deleting blank items in the backend good enough?
It can rescue one draft, but it is not durable. If the import path stays the same, the next article can break the same way. It is safer to compact the structure before the content ever reaches WeChat.
FAQ 4: Do Zhihu, CSDN, or Juejin behave the same way?
Usually not this aggressively. Those platforms behave more like display-oriented publishing environments, while WeChat is much more sensitive as an editor-import environment.
FAQ 5: If I publish one article to my site, Zhihu, CSDN, Juejin, and WeChat, what order makes sense?
Publish the canonical website version first, then prepare platform-specific variants and treat WeChat as the higher-risk branch that needs its own check. If you want one workflow to manage those variants and publish states, download OmniPost here: <https://omnigoai.com/en/download/omnipost/>.