Wix
Limited · Tier 2 (multiple caveats)The hardest mainstream CMS we support. Wix’s Velo/Site APIs publish content fine, but everything else — head injection, per-post canonical URLs, native scheduling — is either absent or requires custom Velo code on your side. Connect it if you must, but expect a lower verification score and plan for manual SEO touch-ups.
How it works
Wix exposes blog posts via its /blog/v3/draft-postsendpoint. We POST title, slug, RICOS-converted content (Wix’s rich-text format), SEO meta tags, and a memberId for the author. After draft creation we POST again to /draft-posts/{id}/publish to flip to live.
JSON-LD has no API surface — we ship it inside the body content. Many SEO validators (Google’s Rich Results Test, Bing) parse body-level JSON-LD fine, but it’s noisier than the standard head placement.
What we support
| Feature | Supported | Notes |
|---|---|---|
| Publish + update + unpublish | Yes | Via /blog/v3/draft-posts + /publish endpoint. |
| Native scheduling | — No | Wix Blog v3 doesn't expose scheduled-publish. SEORAV holds the post until the time then publishes. |
| Draft mode | Yes | Default state; flip to live with /publish call. Visible in Wix Editor → Blog → Drafts. |
| Featured image | Partial | Image must be uploaded to Wix Media first via /site-media/v1/files; then referenced by wix:image URI. |
| Tags & categories | Partial | Resolved by name; must already exist in your Wix site (no auto-creation). |
| Author | Partial | memberId — must already exist as a Wix Member. We don't auto-create. |
| Meta title + description | Yes | seoData.tags array; Wix renders these into <head>. |
| Canonical URL | — No | No per-post canonical via API. Wix sites have a site-level canonical only. |
| JSON-LD in <head> | — No | Inline in body only, OR install the Wix SEO app and use Velo to inject. |
| OpenGraph fields | Partial | Twitter/OG meta tags via seoData. og:image inherited from featured image automatically. |
| RICOS body conversion | Yes | We convert HTML → RICOS structured document. Some advanced HTML (custom CSS classes) is dropped. |
| Articles + FAQ pages | Partial | Wix Blog v3 hosts articles cleanly. FAQ / answer-engine pages can also flow through this adapter, but Wix has no native FAQ collection — pair the second (answer-page-scoped) connection with a Velo hook that routes those posts to a dedicated FAQ section of your site. |
Setup
- 1
Create an OAuth Headless app
Go to Wix Dev Center → My Apps and click Create New App. Choose Headless as the app type.
Wix has multiple API authentication models. Pick OAuth Headless— it’s the only one that gives stable long-lived tokens for programmatic publishing. - 2
Grant the right permissions
On the Permissions tab, add:
BLOG.MANAGE— read + write posts, tags, categoriesSITE-MEDIA.MANAGE— upload featured imagesMEMBERS.READ— resolve author memberIds
- 3
Install the app on your site
Install the OAuth Headless app on your specific Wix site. Wix issues an
access_token+refresh_tokenscoped to that site only.In SEORAV, you’ll paste:
- App ID + App Secret (from Wix Dev Center)
- Refresh token (we manage access-token refresh internally)
- Site ID
- 4
Probe runs
We refresh the access token, list one draft post, list tags, list members. Any 401/403 fails the connect with a remediation pointing at the missing scope.
What we send to Wix
POST https://www.wixapis.com/blog/v3/draft-posts
Authorization: <wix-jwt>
Content-Type: application/json
wix-account-id: {account_id}
wix-site-id: {site_id}
{
"draftPost": {
"title": "How to choose a reverse-osmosis system in 2026",
"slug": "how-to-choose-reverse-osmosis-system-2026",
"excerpt": "Membrane stages, recovery rate, remineralisation — three specs that matter.",
"richContent": { /* Wix RICOS document — converted from our HTML */ },
"memberId": "{member-id-of-the-author}",
"tagIds": ["xxx", "yyy"],
"categoryIds": ["zzz"],
"media": {
"wixMedia": { "image": { "url": "wix:image://v1/..." } },
"displayed": true
},
"seoData": {
"tags": [
{ "type": "title", "children": "Reverse osmosis · the 3 specs that matter (2026)" },
{ "type": "meta", "props": { "name": "description" }, "children": "Membrane stages, recovery rate, remineralisation. …" }
]
}
}
}Note the richContent field — Wix uses RICOS, a structured rich-text JSON format unique to their platform. We convert from our HTML to RICOS using @wix/draft-content-converters. The conversion handles paragraphs, headings, links, lists, images inline, and code blocks. Custom HTML (inline styles, classes, embedded scripts) is dropped — RICOS has no equivalent representation.
Publishing options
Auto-publish
We POST the draft, then immediately POST /publish. Live in two round-trips, usually under 2 seconds total.
Scheduled (server-side hold)
Wix has no native scheduling. SEORAV holds the article in our queue until the scheduled minute, then publishes. Latency from scheduled-time to live: usually under 30 seconds.
Draft
We create the draft and skip the /publish call. Open in Wix Editor → Blog → Drafts to review and publish manually.
Activity timeline · what you’ll see
- job_queuedidempotency_key=8b3c…
- adapter_requestPOST/site-media/v1/files (upload featured image)
- adapter_response2001.6s
- adapter_requestPOST/blog/v3/draft-posts
- adapter_response200743msdraft_post_id=abc-123
- adapter_requestPOST/blog/v3/draft-posts/abc-123/publish
- adapter_response200512ms
- verify_startGET https://yoursite.com/post/how-to-…
- verify_complete200521msscore 67/100 · canonical missing, JSON-LD in body
- job_succeededsee Wix optimisation guide for next steps
After publishing — make it shine
Install the Wix SEO app
The Wix SEO app (free) gives per-page meta-title and meta-description controls in the editor. SEORAV-published posts will have these set via API, but the app makes them editable in the UI later.
Add Velo code for canonical URL injection
In Wix Editor → Dev Mode → Pages → Blog post template → site code, add: import wixWindow from 'wix-window'; $w.onReady(() => { wixWindow.SEO.setSeoTags([{type:'link', props:{rel:'canonical', href: window.location.href.split('?')[0]}}]); }); — this stamps a canonical on every blog page.
Inject JSON-LD via Velo
Same Velo file, fetch the post’s SEORAV metadata via a Velo backend function and inject as script tag using wixWindow.SEO.setSeoTags. Bumps the verifier score from ~67 to ~85.
Verify in Wix Editor “SEO Setup Checklist”
Editor → Marketing & SEO → SEO Setup Checklist. Run through it once after first publish — Wix flags missing alt text, broken links, redirects to fix.
Submit URL to Bing IndexNow
Wix doesn’t auto-submit to IndexNow. Use Bing’s manual URL submission tool or build a small Velo backend job that hits IndexNow on every onPostPublished webhook.
Watch the Wix Analytics organic-search dashboard
Wix surfaces Google Search Console data inside the editor (paid plans only). Compare clicks + impressions across SEORAV-published posts vs. manually-written ones — informs whether the verifier score gap is hurting traffic.
Troubleshooting
401 / token refresh failed
Refresh tokens for OAuth Headless apps are valid until the user uninstalls the app from the site. If a refresh fails, the user uninstalled. Reinstall from Wix Dev Center → My Apps → Install on Site, get a new refresh token, update the SEORAV connection.
Body content rendering is wrong
RICOS conversion drops unsupported HTML. Common culprits: nested tables, custom style= attributes, embedded iframes (other than YouTube / Twitter / Instagram, which RICOS supports natively). If your articles rely on these, we can help map them — open a support thread.
Featured image broken
Wix Media expects a wix:image:// URI, not a public URL. We upload the image first via /site-media/v1/files, then reference the returned URI. If you see a broken image icon, the upload failed silently — check the activity log for the upload step.
Tags appearing as “Untagged”
Wix doesn’t auto-create tags via the API. The tag must exist on your site first. Add the tags you want under Wix Editor → Blog → Manage Posts → Tags before publishing — SEORAV will then resolve names to IDs correctly.
Security & best practices
- Treat the OAuth Headless app as dedicated to SEORAV. Don’t reuse the same app for other integrations.
- Watch Wix Dev Center → My Apps → SEORAV → Analytics for unexpected request volume — could indicate a compromised refresh token.
- If your Wix plan downgrades, some scopes silently start returning 403. Re-run a healthcheck after plan changes.