Files
ALwrity/docs/WIX_SEO_METADATA_COMPLETE.md

5.6 KiB

Complete Wix SEO Metadata Implementation

📊 SEO Metadata Generated vs Posted

FULLY POSTED TO WIX

1. SEO Keywords (in seoData.settings.keywords)

  • focus_keyword → Main keyword (isMain: true)
  • blog_tags → Additional keywords (isMain: false)
  • social_hashtags → Additional keywords (isMain: false)

2. Meta Tags (in seoData.tags)

  • meta_description<meta name="description">
  • seo_title<meta name="title">

3. Open Graph Tags (in seoData.tags)

  • open_graph.titleog:title
  • open_graph.descriptionog:description
  • open_graph.imageog:image (HTTP/HTTPS URLs only)
  • og:type → Always set to article
  • open_graph.url or canonical_urlog:url

4. Twitter Card Tags (in seoData.tags)

  • twitter_card.titletwitter:title
  • twitter_card.descriptiontwitter:description
  • twitter_card.imagetwitter:image (HTTP/HTTPS URLs only)
  • twitter_card.cardtwitter:card (default: summary_large_image)

5. Canonical URL (in seoData.tags)

  • canonical_url<link rel="canonical">

6. Blog Categories (in draftPost.categoryIds)

  • blog_categories → Lookup/create categories → categoryIds (UUIDs)
  • Implementation: lookup_or_create_categories() method
  • Behavior: Case-insensitive lookup, auto-create if missing

7. Blog Tags (in draftPost.tagIds)

  • blog_tags → Lookup/create tags → tagIds (UUIDs)
  • Implementation: lookup_or_create_tags() method
  • Behavior: Case-insensitive lookup, auto-create if missing
  • Note: blog_tags are also used in SEO keywords, but separately as post tags

NOT POSTED (Optional/Future)

  1. JSON-LD Structured Data (json_ld_schema)

    • Reason: Wix doesn't support JSON-LD in backend API
    • Solution: Would require frontend implementation using @wix/site-seo package
    • Status: Not implemented (would need to be added to Wix site code)
  2. URL Slug (url_slug)

    • Reason: Wix auto-generates URLs from title
    • Status: Could be implemented if Wix API supports custom slugs
  3. Reading Time (reading_time)

    • Reason: Metadata only, not part of Wix blog post structure
    • Status: Not applicable
  4. Optimization Score (optimization_score)

    • Reason: Internal metadata for ALwrity, not Wix field
    • Status: Not applicable

🔄 Conversion Methods

Markdown to Ricos Conversion

Primary Method: Wix Official Ricos Documents API

  • Endpoint: Tries multiple paths to find correct endpoint
  • Benefits: Official conversion, handles all edge cases
  • Fallback: Custom parser if API unavailable

Fallback Method: Custom Markdown Parser

  • Location: backend/services/integrations/wix/content.py
  • Supports: Headings, paragraphs, lists, bold, italic, links, images, blockquotes

📋 Complete Post Structure

When publishing to Wix, the blog post includes:

{
  "draftPost": {
    "title": "SEO optimized title",
    "memberId": "author-member-id",
    "richContent": { /* Ricos JSON document */ },
    "excerpt": "First 200 chars of content",
    "categoryIds": ["uuid1", "uuid2"],  // From blog_categories
    "tagIds": ["uuid1", "uuid2"],        // From blog_tags
    "media": { /* Cover image if provided */ },
    "seoData": {
      "settings": {
        "keywords": [
          { "term": "main keyword", "isMain": true },
          { "term": "tag1", "isMain": false },
          { "term": "tag2", "isMain": false }
        ]
      },
      "tags": [
        { "type": "meta", "props": { "name": "description", "content": "..." } },
        { "type": "meta", "props": { "name": "title", "content": "..." } },
        { "type": "meta", "props": { "property": "og:title", "content": "..." } },
        { "type": "meta", "props": { "property": "og:description", "content": "..." } },
        { "type": "meta", "props": { "property": "og:image", "content": "..." } },
        { "type": "meta", "props": { "property": "og:type", "content": "article" } },
        { "type": "meta", "props": { "property": "og:url", "content": "..." } },
        { "type": "meta", "props": { "name": "twitter:title", "content": "..." } },
        { "type": "meta", "props": { "name": "twitter:description", "content": "..." } },
        { "type": "meta", "props": { "name": "twitter:image", "content": "..." } },
        { "type": "meta", "props": { "name": "twitter:card", "content": "summary_large_image" } },
        { "type": "link", "props": { "rel": "canonical", "href": "..." } }
      ]
    }
  },
  "publish": true
}

Implementation Status

Fully Implemented

  • SEO keywords (main + additional)
  • Meta description and title
  • Open Graph tags (all standard fields)
  • Twitter Card tags (all standard fields)
  • Canonical URL
  • Blog categories (lookup/create)
  • Blog tags (lookup/create)
  • Wix Ricos API integration (with fallback)

Partially Implemented ⚠️

  • Image handling (only HTTP/HTTPS URLs, base64 skipped)

Not Implemented

  • JSON-LD structured data (requires frontend)
  • URL slug customization
  • Reading time (not applicable)
  • Optimization score (not applicable)

🎯 Summary

All major SEO metadata fields are now being posted to Wix:

  • Keywords
  • Meta tags
  • Open Graph
  • Twitter Cards
  • Canonical URL
  • Categories (auto-lookup/create)
  • Tags (auto-lookup/create)

The only missing piece is JSON-LD structured data, which requires frontend implementation in the Wix site code using the @wix/site-seo package.