50 "when": "Use for SEO fields, author/profile metadata, or source-only fields not represented by Blog APIs."
51 }
52 ],
53 "reliability": {
54 "status": "partially-reliable",
55 "flags": [
56 "IMPORT_UNRELIABLE"
57 ]
58 },
59 "pitfalls": [
60 {
61 "code": "slug-url-rewrite",
62 "severity": "blocker",
63 "summary": "Exact original URL or slug preservation is not reliable through public Blog Draft Posts."
64 },
65 {
66 "code": "publish-side-effects",
67 "severity": "warning",
68 "summary": "Publishing imported posts may trigger public publish behavior."
69 },
70 {
71 "code": "wordpress-percent-encoded-slug",
72 "severity": "blocker",
73 "summary": "WordPress stores a non-Latin (e.g. Hebrew) post slug/post_name percent-encoded and wp/v2 returns it undecoded; Wix's slug validation strips/rejects literal '%' characters rather than erroring, so passing the raw value through as the post slug produces a garbled hex-with-dashes URL instead of the real slug. Decode with decodeURIComponent before writing (guarded in a try/catch: a slug that was never percent-encoded must pass through unchanged, not throw). Confirmed live 2026-09-27 on a Hebrew WordPress source. See rp-source-wordpress/SKILL.md and rp-import-codegen/SKILL.md's 'Never hand-write slug sanitizing' section."
78 "summary": "draftPost.memberId is required and Wix Blog has no 'unauthored' option, but attributing every imported post to the site owner is NOT an acceptable default -- confirmed live: a migration that defaulted every post to the site owner gave all imported posts the same owner memberId while the WordPress source (_embedded.author) named distinct authors, all discarded. Real author attribution requires resolving a per-post Wix member: create one member per distinct source author (never per post -- crosswalk by sourceAuthorId so repeat posts and resumed runs reuse it) via rp-target-wix/lib/blog-author-attribution.js's resolveBlogAuthorMemberId, which follows Wix's own 'How to Create Blog Posts' skill doc (dev.wix.com/docs/api-reference/business-solutions/blog/skills/how-to-create-blog-posts, Part 0: Get an Author/Member ID) -- Create Member with profile.nickname/contact.firstName set to the real source author name (the sanctioned, silent -- no email sent, no signup-automation trigger -- pattern for this exact situation). Fall back to owner attribution only when the source gives no author info for a post at all."
79 }
80 ],
81 "mappingGuidance": [
82 "Create categories, tags, media, and author/member references before posts."
83 ],
84 "setupRequirements": [
85 "Wix Blog app",
86 "Fallback member decision for author attribution."