LinkedIn Test Record — 2026-08-24
Verdict
LinkedIn's standard post composer is a plain-text destination with media and structured-post attachments, not a Markdown or rich-text renderer. Raw Markdown markers remain visible. A Markdown link such as [OpenAI](https://openai.com) remained literal and did not create a link preview, while a bare https://openai.com in cleaned plain text generated LinkedIn's normal preview card.
The correct first-version LinkedIn handoff is cleaned plain text with stable paragraph spacing, readable bullets, visible URLs and explicit labels for code or quotes. Long Markdown should be condensed into a focused post or redirected into a separately designed LinkedIn Article workflow; it should not be mechanically truncated at 3,000 characters.
Environment and safety boundary
- Authenticated account: existing personal LinkedIn account.
- Surface: desktop
Create postmodal opened fromhttps://www.linkedin.com/feed/. - No post, comment, article, event, poll, document or scheduled item was submitted.
- No media or document was uploaded.
- All test text was removed and the empty composer was dismissed at the end.
- Visible post tools: emoji, media, event, celebration, hiring, poll, document, expert request and scheduling.
- No visible heading, bold, italic, quote, code, table, footnote, math or HTML formatting control was found.
Mode-level result
| Mode | Result | Measured evidence |
|---|---|---|
| Raw Markdown | Fail for formatting; readable as source text | Heading, emphasis, list, link, inline-code and quote markers remained literal |
| Cleaned plain text | Preferred | Plain heading, paragraphs, • bullets, visible URL, Code: label and Quote: label remained readable |
| Markdown link | Fail | [label](URL) remained literal and did not create a link preview |
| Bare URL | Pass with destination behavior | The visible URL generated LinkedIn's normal preview card after a short delay |
| GFM table | Fail | Pipes and separator row remained literal text |
| Markdown image | Fail |  remained literal; no image or preview was created |
| Standard character limit | Verified | 3,000 ASCII characters enabled Post; 3,001 disabled it and displayed -1 |
| Long URL counting | Verified | A 114-character URL consumed its full raw length rather than X-style 23-character weighting |
| Emoji/CJK counting | Verified for tested characters | 1,500 emoji were accepted and 1,501 rejected as -2; 3,000 CJK characters were accepted and 3,001 rejected |
Raw Markdown and fragile syntax
The first focused fixture contained a heading, emphasis, two list items, a Markdown link, inline code and a quote. LinkedIn placed the lines into editor paragraphs but did not parse any Markdown semantics.
| Construct | Observed behavior | Required output rule |
|---|---|---|
| Heading | # Markdown Test remained literal |
Remove heading markers; preserve a standalone opening line |
| Bold/italic | **Bold** and _italic_ remained literal |
Strip markers; Unicode mathematical alphabets must remain optional and off by default |
| Lists | Hyphen markers remained ordinary characters | Normalize to •, – or numbered lines |
| Markdown link | Full bracket/parenthesis syntax remained literal; no preview appeared | Emit label: URL or a bare URL |
| Inline code | Backticks remained literal | Remove fences and use a short Code: label or indentation |
| Quote | > remained literal |
Replace with a Quote: label or typographic quotation marks |
| GFM table | All pipes and separator characters remained visible | Convert compact tables to labeled rows; consider a separately uploaded document/image for complex tables |
| Markdown image | Full  syntax remained visible |
Remove syntax and create a media-upload/alt-text checklist |
Evidence: raw Markdown composer, table and image syntax.
Paragraphs, links and clean output
The cleaned test used a plain title, blank paragraph separators, • bullets, a bare URL, Code: label and Quote: label. The visual composer preserved the intended spacing and bullet characters.
The bare URL generated a preview card for OpenAI. Preview generation is destination-controlled and may fail for other URLs, so the tool must keep the visible URL even when a preview is expected.
Evidence: clean plain-text composer.
Character counting
LinkedIn Help currently documents a 3,000-character limit for standard posts. The live composer matched that limit and behaved like UTF-16 code-unit counting for the tested input:
| Input | UTF-16 length | Code points | Composer state |
|---|---|---|---|
| 3,000 ASCII characters | 3,000 | 3,000 | Posting enabled |
| 3,001 ASCII characters | 3,001 | 3,001 | Posting disabled; -1 displayed |
| Prefix + space + 114-character URL | 3,000 | 3,000 | Posting enabled |
| Same URL input + one ASCII character | 3,001 | 3,001 | Posting disabled |
1,500 😀 emoji |
3,000 | 1,500 | Posting enabled |
1,501 😀 emoji |
3,002 | 1,501 | Posting disabled; -2 displayed |
3,000 中 characters |
3,000 | 3,000 | Posting enabled |
3,001 中 characters |
3,001 | 3,001 | Posting disabled; -1 displayed |
This should be implemented and regression-tested against live fixtures rather than described generically as “3,000 visible characters.” Complex grapheme clusters and normalization were not separately tested.
Evidence: 3,001-character rejection, https://www.linkedin.com/help/linkedin/answer/a528176.
Native controls and adjacent formats
The current modal exposed media, event, celebration and scheduling controls. Its expanded menu exposed hiring, poll, document and expert-request actions. It exposed no text-formatting toolbar.
The feed also offered a separate Write article destination. LinkedIn Help says standard posts are limited to 3,000 characters and recommends the Publishing Platform for longer content. Article conversion remains outside this test because it is a different editor and output contract.
LinkedIn's current Posts API documentation supports text, images, videos, documents, articles, multi-image posts and polls. Media requires separate asset upload flows. These API facts demonstrate future technical possibilities but do not change the static first-version handoff.
Sources:
- https://www.linkedin.com/help/linkedin/answer/a528176
- https://www.linkedin.com/help/linkedin/answer/a525301
- https://learn.microsoft.com/en-us/linkedin/marketing/community-management/shares/posts-api?view=li-lms-2026-04
Not separately live-tested
The following constructs were not individually pasted during this focused post test: Markdown footnotes, math, Mermaid, Obsidian wiki links/transclusions, raw HTML and heading anchors. The safe initial rule is to resolve or flatten them before LinkedIn output, but their matrix cells should remain U until a focused fixture verifies the exact editor behavior.
Development contract
| Rule ID | Trigger | Required transformation | Warning/check |
|---|---|---|---|
LI-HEAD-01 |
Markdown heading | Remove #; keep a standalone opening line |
Flag more than one headline-like opening |
LI-EMPH-01 |
Bold/italic/strike | Remove Markdown markers | Unicode styling off by default; warn about accessibility/search |
LI-LIST-01 |
Ordered/unordered/task list | Normalize to readable numbered or • lines |
Convert task state to Done: / To do: when meaningful |
LI-LINK-01 |
Markdown link | Emit label plus visible absolute URL | Preserve URL even when a preview card may appear |
LI-CODE-01 |
Inline/fenced code | Remove fences; retain short readable code with label/indent | Warn or summarize long code |
LI-TABLE-01 |
Small table | Convert rows to compact labeled lines | Show before/after preview |
LI-TABLE-02 |
Wide/complex table | Do not flatten silently | Suggest document/image plus accessible text summary |
LI-IMAGE-01 |
Markdown image | Remove syntax; extract source, caption and alt text | Produce separate media-upload checklist |
LI-LIMIT-01 |
Output near/over limit | Count tested UTF-16 length and display remaining value | Block copy-as-ready above 3,000; offer condensation |
LI-PARA-01 |
Paragraphs/hard breaks | Normalize excessive blank lines while preserving readable rhythm | Preview exact plain-text output |
LI-LONG-01 |
Source cannot fit a focused post | Condense around one idea | Offer separate article workflow only after article-editor testing |
Product implications
- The LinkedIn output must use
text/plain; raw Markdown and generic rich HTML are the wrong contract. - The first lines deserve special treatment because LinkedIn posts are feed content; the product should preserve a clear opening, not a document-style H1 hierarchy.
- The character counter must match observed LinkedIn behavior, including emoji surrogate pairs and raw URL length.
- Bare URLs are preferable to Markdown link syntax and may produce preview cards.
- Tables, diagrams and Markdown images should become attachment plans with captions and alt text rather than broken inline syntax.
- The tool should prepare content for direct paste or later handoff to Buffer/Typefully; scheduling and analytics are not the differentiated job.
Cleanup
All test text was removed. The empty Create post modal was dismissed and the feed returned to its normal Start a post state. No post, draft, article, comment, schedule, poll, document or uploaded media was created.



