Skip to content
Worix
BrowsePublish
Log inSign Up

writer-facebook

Facebook post FORMAT rules — length, hook, hashtags, links and image aspect. Read this ONLY when you are writing a Facebook post inside a task — `task-content-publish`'s `compose` node or `task-calendar-plan`'s `generate` node. It has no entry of its own and must never be entered directly.

0 downloads
Free
Reviewed
internal
marketing

name: writer-facebook description: Facebook post FORMAT rules — length, hook, hashtags, links and image aspect. Read this ONLY when you are writing a Facebook post inside a task — task-content-publish's compose node or task-calendar-plan's generate node. It has no entry of its own and must never be entered directly. tags: [internal, marketing] license: MIT-0

Facebook copy rules

Governs FORMAT only — how a Facebook post is shaped. What the brand sounds like comes from Brand IQ; product truth (only what the product tools returned) and the anti-AI-slop check (humanizer) belong to the task you are writing in — compose in task-content-publish or generate in task-calendar-plan. Apply this on top of both; you never need to read the other task to apply it.

Spec

fieldrule
length80–2200 chars; sweet spot 125–600. Facebook tolerates a longer paragraph than Instagram does — use it only when the extra words earn their place
hookfirst ~125 chars must stand alone (they show before "See more") — lead with the payoff, not a windup. The payoff is concrete: a feature or use the product truth actually states, or the attached campaign's offer — never a line about choosing, exploring, or what "feels right", which says nothing about this product. Before you submit, count three things: that concrete opening, at least one more concrete selling point after it, and a closing call to action that names the product and carries its link — except when the merchant asked for a piece that does not sell: then no call to action
hashtagsExactly the ones the merchant picked — you choose none of them. Print that set and no more — with ONE carve-out: a pre-filled default the merchant never typed that the products cannot honestly carry stays on the card and OUT of the post (the task you are writing in owns that call); a tag they typed themselves always prints. Do not add, top up, infer one from the copy, the products or the season, or borrow one from another channel's row — a blog's SEO term is not a hashtag. In a trailing block on their own line, never sprinkled inline; each starts with a literal #. No picks means no hashtag block at all — on Facebook that is the common case and a perfectly good post
emoji≤5, purposeful; not as bullet decoration
formattingplain text, and the finished post contains NOT ONE asterisk (*) — Facebook renders no markdown, so any markup publishes as literal characters in front of the merchant's followers (ruled 2026-10-22: zero * in the post, full stop). The ONE markup exception is the product HANDLE link from the links row below (brackets and parentheses only — no asterisks), which the server converts before publishing. Emphasis comes from word choice and line breaks, never from markup. Before the draft call, scan the post: an asterisk anywhere means rewrite that line
discount codeWhen the piece carries a campaign, print THIS channel's variant code — {CODE}-FB, from the campaign's variant_codes map — never the campaign's main code. The link carries UTM and the code carries the rest: a shopper who saw it here and bought later without clicking is only attributable by the code that came off this post. One code per post, in capitals Only ever print a code that came from a tool or the card — the campaign object names the codes that exist in Shopify. Never compose one, never adapt one you have seen, and if the piece carries no campaign then it carries no code: a code that does not exist is refused at checkout for every shopper who types it, and the draft tool refuses the piece rather than publishing it (measured on dev 2026-08-28 — an Instagram post advertised WINTERSALE10 on a store that has never had that code). Urgency is only ever the campaign's own. Say the offer ends on a date only when the campaign carries one — ends_at, or the end of the card's "Runs: X to Y" line — and quote that date as given — never a count of days left; a campaign with no end date gets no "limited time", "last chance", "ends soon" or "while it lasts"; and never say stock is running out. A deadline that is not real is a lie to the shopper, and a code that never expires next to "last chance" is exactly that.
productsat most THREE per post — the merchant's picker stops there and the draft tool refuses a fourth. A caption has no room to sell more than that
linksa product link in the body is fine and clickable — write it as a HANDLE: the link text [Shop the Complete Snowboard] followed immediately, with no space, by the target (product:the-complete-snowboard), the handle copied from the product's handle field. The server turns it into the real tracked URL and spells it out in full, since a caption renders no markdown. Never write a https:// link to this store yourself, and never a label like product_url. The phrase "link in bio" is BANNED here too (2026-08-28): a Facebook post carries its real link, so that line is an Instagram-ism that reads as a mistake
imagerequired; JPEG, landscape 1536×1024. Keep files ≤8MB

Image

A Facebook post ALWAYS ships with a visual, and the copy is written assuming the reader already sees it. The picture is not yours to make here: the server draws it WITH the draft, from the hero_scene you pass to CREATE_CONTENT_DRAFT, and attaches it to the card (the result answers hero_image: "drawn"; illustrate only ever CHANGES a picture that already exists). Do not call GENERATE_IMAGE from this skill, and do not describe a specific picture in the copy as if you had seen it — write for the scene the piece is about. What this skill governs is the shape the picture has to fit: landscape 1536×1024, JPEG, ≤8MB.

No [[IMAGE: …]] markers here. Those belong to a blog article's body only. This post carries exactly one picture, the piece's hero, and it is attached to the card rather than written into the copy — a marker in a caption is stripped and draws nothing.

Voice & structure

  • The post extends the image, it doesn't restate it — assume the reader already sees the photo.
  • Relaxed and human but with a point of view: one idea per post, one CTA.
  • Short lines / line breaks over dense paragraphs; must scan on a phone.
  • Do: open on the payoff, benefit, or a concrete detail; end with one clear CTA carrying the real link.
  • Don't: long-form multi-paragraph essays; fake intimacy ("Hey friends!!"); press-release voice ("We are thrilled to announce"); walls of inline hashtags.
  • Price appears ONLY when it is the message — an attached campaign's discount anchor, or the merchant's brief names affordability as the selling point. Otherwise leave it out: the linked product page owns the price, and published copy cannot be re-priced — a stale number becomes misinformation with the merchant's name on it. Never "DM for price".

These rules are constraints on you, not a bulletin for the merchant

Everything above shapes what you write. None of it is something to read out. Measured on 2026-08-21: the caption-cannot-hold-a-clickable-link rule was relayed to the merchant as a "Note:" paragraph in the chat, alongside a restatement of the whole draft — the merchant did not ask how the channel works and the draft card already showed the result. Apply the rule silently: the card shows what they are getting, and the turn a draft lands carries no text of yours.

Download

ZIP package — ready to use

Skill Info

Creator
Yepai
License
MIT-0
Downloads
0
Published
Oct 26, 2026
Updated
Oct 29, 2026