Skip to content

Vell SEO Score for Marketplaces™

Overview

The Vell SEO Score for Marketplaces™ is a proprietary 0-100 scoring system that measures how "discoverable and persuasive" a specific cloud marketplace listing is. Unlike traditional domain-level SEO metrics, this is explicitly a page-level score supporting:

  • AWS Marketplace: https://aws.amazon.com/marketplace/pp/<listing-id>
  • Google Cloud Marketplace: https://cloud.google.com/marketplace/product/<publisher>/<product> (coming soon)
  • Azure Marketplace: https://azuremarketplace.microsoft.com/en-us/marketplace/apps/<listing-id> (coming soon)

The score combines three key components: - Listing Quality (LQ) - Internal PDP analysis - Backlink Authority (BA) - DataForSEO Backlinks API - AI Visibility (AIV) - DataForSEO LLM Mentions API


Score Components

Component Weights

Component Weight Description
Listing Quality (LQ) 40% Content completeness, copy quality, differentiation
Backlink Authority (BA) 25% Referring domains, link quality, trends
AI Visibility (AIV) 35% LLM mentions, AI search visibility, positioning

Overall Score Formula

MSS = (0.40 × LQ) + (0.25 × BA) + (0.35 × AIV)

Dynamic Weight Redistribution (Confidence-Based)

When DataForSEO APIs are unavailable, the system uses a confidence-based weight adjustment powered by the DynamicWeightCalculator. Rather than treating all data sources as equal, each component's weight is scaled by a confidence multiplier that reflects how reliable the underlying data is.

Data Source Confidence Tiers

Tier Multiplier Description Example
Measured 1.00x Real API data from DataForSEO Backlinks API returns actual referring domain counts
Estimated 0.70x Proxy score from Bedrock/Claude analysis Claude analyzes listing content to estimate backlink authority
Unavailable 0.00x No data available Neither DataForSEO nor Bedrock can score this component

The estimated multiplier (default 0.70) is configurable via the seo_weight_multiplier_estimated setting.

How It Works

  1. Each scoring component is classified as measured, estimated, or unavailable
  2. The ideal weight is multiplied by the confidence multiplier
  3. All raw weights are normalized to sum to 1.0

Weight Scenarios

Scenario LQ Source BA Source AIV Source LQ Weight BA Weight AIV Weight Confidence
All APIs active measured measured measured 40% 25% 35% High
APIs down, Bedrock active measured estimated estimated ~49% ~21% ~30% Medium
Only backlinks API active measured measured estimated ~44% ~28% ~28% Medium
Only Bedrock, no APIs measured estimated estimated ~49% ~21% ~30% Medium
Nothing available measured unavailable unavailable 100% 0% 0% Low

Formula

// DynamicWeightCalculator applies confidence multipliers per component
$rawWeights = [];
foreach ($idealWeights as $component => $idealWeight) {
    $source = $componentSources[$component]; // measured | estimated | unavailable
    $multiplier = $confidenceMultipliers[$source]; // 1.0 | 0.70 | 0.0
    $rawWeights[$component] = $idealWeight * $multiplier;
}

// Normalize to sum to 1.0
$total = array_sum($rawWeights);
foreach ($rawWeights as $component => $raw) {
    $normalizedWeights[$component] = $raw / $total;
}

Example: DataForSEO Down, Bedrock Fallback Active

When both Backlinks and LLM Mentions APIs are unavailable but Bedrock provides proxy scores:

Raw weights:
  LQ:  0.40 x 1.00 (measured)  = 0.400
  BA:  0.25 x 0.70 (estimated) = 0.175
  AIV: 0.35 x 0.70 (estimated) = 0.245
  Total = 0.820

Normalized weights:
  LQ:  0.400 / 0.820 = 48.8%
  BA:  0.175 / 0.820 = 21.3%
  AIV: 0.245 / 0.820 = 29.9%

MSS = (0.488 x LQ) + (0.213 x BA) + (0.299 x AIV)

Result: Listing Quality (always measured internally) naturally gets more influence, while Bedrock-estimated components still contribute meaningfully but at reduced weight.

UI Indicators

The UI reflects confidence levels: - "DataForSEO" badge (green) for measured components - "AI estimated" badge (blue) with adjusted % for estimated components - "Unavailable" badge (amber) for components without data - Confidence indicator ("Medium confidence" / "Low confidence") in the results header

API Response

The API response now includes weight adjustments and scoring confidence:

{
  "score": 78,
  "grade": "B",
  "components": {
    "listing_quality": 84,
    "backlink_authority": 62,
    "ai_visibility": 73
  },
  "weights": {
    "listing_quality": 0.488,
    "backlink_authority": 0.213,
    "ai_visibility": 0.299
  },
  "scoring_confidence": "medium",
  "weight_adjustments": {
    "weights": { "listing_quality": 0.488, "backlink_authority": 0.213, "ai_visibility": 0.299 },
    "adjustments": {
      "backlink_authority": {
        "ideal_weight": 0.25,
        "data_source": "estimated",
        "confidence_multiplier": 0.70,
        "normalized_weight": 0.213
      }
    },
    "overall_confidence": "medium"
  }
}

Configuration

Setting Default Description
dataforseo_backlinks_enabled false Enable Backlinks API (requires subscription)
dataforseo_llm_mentions_enabled false Enable LLM Mentions API ($100/month minimum)
seo_weight_multiplier_measured 1.00 Weight multiplier for measured (real API) data
seo_weight_multiplier_estimated 0.70 Weight multiplier for estimated (Bedrock) data
seo_use_bedrock true Enable Bedrock fallback when APIs unavailable

Confidence Levels

Level Meaning When
High All components use real API data All DataForSEO subscriptions active
Medium Some components use AI estimates Bedrock filling in for missing APIs
Low Some components entirely missing Neither API nor Bedrock available for a component

1. Listing Quality (LQ) — 0-100

Source: Internal PDP/Launch Readiness Analyzer

Subscore Weights

Subscore Weight Description
Completeness 35% Field presence and content adequacy
Copy Quality 35% Length, readability, structure
Differentiation 15% Unique value proposition signals
Conversion Hygiene 15% CTAs, pricing clarity, compliance

LQ Formula

LQ = (completeness_score × 0.35) + (copy_quality_score × 0.35)
   + (differentiation_score × 0.15) + (conversion_hygiene_score × 0.15)

Field Completeness Requirements

Field Points Description
Title 10 Product title (20-80 chars recommended)
Short Description 15 Brief summary (100-200 chars)
Long Description 20 Detailed description (500-3000 chars)
Highlights 15 Key features (3-10 items recommended)
Categories 10 Marketplace categories
Use Cases 15 Target use cases
Pricing 10 Pricing information
Support Info 5 Support details

Copy Quality Checks

  • Title length validation (min: 20, max: 80, ideal: 60)
  • Short description completeness (min: 100 chars)
  • Long description depth (min: 500, max: 3000 chars)
  • Paragraph structure and bullet points
  • Highlight count (min: 3, ideal: 5)

Differentiation Signals

Keywords that boost differentiation score: - "only", "unique", "first", "leading", "exclusive" - "patented", "proprietary", "innovative", "breakthrough"

Conversion Hygiene Checks

  • Clear CTA presence ("get started", "try", "demo", "free trial")
  • Pricing information visibility
  • Support information availability
  • Off-platform CTA spam detection

Source: DataForSEO Backlinks API

Raw Metrics Collected

Metric API Endpoint
Referring Domains /backlinks/summary/live
Total Backlinks /backlinks/summary/live
Dofollow Backlinks /backlinks/summary/live
New/Lost Backlinks (30d) /backlinks/summary/live

BA Subscore Weights

Subscore Weight Description
RD Normalized 50% Referring domains vs category median
Dofollow Ratio 30% Percentage of dofollow links
Trend 20% Net backlink change direction

BA Formula

RD_norm = min(listing_ref_domains / category_median_ref_domains, 2.0)
DF_ratio = dofollow_backlinks / total_backlinks
Trend = (new_backlinks - lost_backlinks) / max(1, total_backlinks / 10)

BA = (0.50 × scale_0_100(RD_norm / 2.0))
   + (0.30 × scale_0_100(DF_ratio))
   + (0.20 × scale_0_100((Trend + 1) / 2))

Category Benchmarks

Benchmarks are stored per category and include: - median_referring_domains - median_backlinks - p75_referring_domains - p90_referring_domains

Default benchmarks (when no category data): - Median referring domains: 50 - Median backlinks: 200


3. AI Visibility (AIV) — 0-100

Source: DataForSEO LLM Mentions API

Raw Metrics Collected

Metric API Endpoint
AI Visibility Score /ai_optimization/llm_mentions/aggregated_metrics/live
Total Mentions /ai_optimization/llm_mentions/aggregated_metrics/live
AI Search Volume /ai_optimization/llm_mentions/aggregated_metrics/live
Position in Mentions /ai_optimization/llm_mentions/top_domains/live

AIV Subscore Weights

Subscore Weight Description
Visibility Normalized 60% AI visibility vs category median
Position Score 20% Ranking in mentioned domains
Trend 20% Change from previous snapshot

Position Score Mapping

Position Score
#1 100
#2-5 80
#6-10 60
#11-20 40
>20 20

AIV Formula

visibility_norm = min(ai_visibility_score / category_visibility_median, 2.0)

AIV = (0.60 × scale_0_100(visibility_norm / 2.0))
    + (0.20 × position_score)
    + (0.20 × visibility_trend)

Grade Bands

Score Range Grade Label Description
90-100 A Market-Leading Excellent discoverability and persuasion
80-89 B+ Strong Above average performance
70-79 B Solid, Needs Push Good foundation, room for improvement
60-69 C+ Under-leveraged Missing optimization opportunities
50-59 C At Risk Significant gaps in visibility
<50 D/F Invisible / Broken Critical issues requiring immediate attention

Weakness Detection

Listing Quality Weaknesses

Code Trigger Description
INCOMPLETE_FIELDS Missing required fields Listing has incomplete sections
POOR_COPY_QUALITY Copy score < 70 Low quality or unclear product copy
WEAK_DIFFERENTIATION Diff score < 60 Missing unique value proposition
POOR_CONVERSION_HYGIENE Hygiene score < 70 Missing CTAs or compliance issues
Code Trigger Description
FEW_REFERRING_DOMAINS RD < category median Below average referring domains
LOW_DOFOLLOW_RATIO DF ratio < 50% Too many nofollow links
DECLINING_BACKLINKS Lost > New (30d) Negative link trend
BELOW_CATEGORY_MEDIAN BA < benchmark Underperforming vs peers

AI Visibility Weaknesses

Code Trigger Description
LOW_LLM_MENTIONS Mentions < 10 Few AI/LLM mentions
LOW_AI_VISIBILITY_SCORE Score < median Below category average
NOT_IN_TOP_MENTIONS Position > 20 or null Not ranking in AI results
BELOW_CATEGORY_VISIBILITY AIV < benchmark Underperforming vs peers

Each weakness maps to recommended actions with AgentCore capability links:

For Listing Quality Issues

Action ID Priority Capability Description
improve_listing_completeness High generate_text_content Fill in missing fields
improve_listing_copy High refine_content Rewrite product descriptions
enhance_differentiation Medium competitor_analysis Strengthen value proposition
optimize_ctas Medium conversion_optimization Improve calls-to-action
Action ID Priority Capability Description
create_linkable_assets Medium generate_content_series Create blog posts, guides
improve_link_quality Low outreach_campaign Pursue quality backlinks
backlink_recovery High link_reclamation Recover lost links

For AI Visibility Issues

Action ID Priority Capability Description
llm_seeding_campaign High generate_content_series Create AI-optimized content
boost_ai_visibility High ai_optimization Improve AI discoverability
improve_mention_ranking Medium content_authority Build topical authority

API Reference

Dashboard Routes

GET  /dashboard/user/marketplace-seo-score         # Dashboard view
POST /dashboard/user/marketplace-seo-score/analyze # Calculate new score
GET  /dashboard/user/marketplace-seo-score/recent  # Recent analyses
GET  /dashboard/user/marketplace-seo-score/trend/{listingId}  # Score history
GET  /dashboard/user/marketplace-seo-score/top-performers     # High performers
GET  /dashboard/user/marketplace-seo-score/at-risk            # At-risk listings

API Endpoint

GET /api/marketplace/listings/{listingId}/seo-score

Parameters: - listingId (path) - AWS Marketplace listing ID - refresh (query, optional) - Force recalculation if true - category (query, optional) - Category code for benchmarking - brand_keyword (query, optional) - Brand name for AI visibility

Response:

{
  "listing_id": "pp-123456",
  "url": "https://aws.amazon.com/marketplace/pp/pp-123456",
  "score": 78,
  "grade": "B",
  "components": {
    "listing_quality": 84,
    "backlink_authority": 62,
    "ai_visibility": 73
  },
  "weaknesses": [
    { "component": "backlink_authority", "code": "FEW_REFERRING_DOMAINS" },
    { "component": "ai_visibility", "code": "LOW_LLM_MENTIONS" }
  ],
  "recommended_actions": [
    { "id": "improve_listing_copy", "priority": "high", "capability": "refine_content" },
    { "id": "create_linkable_assets", "priority": "medium", "capability": "generate_content_series" },
    { "id": "llm_seeding_campaign", "priority": "medium", "capability": "generate_content_series" }
  ],
  "snapshot": {
    "taken_at": "2025-12-08T15:30:00Z",
    "previous_score": 70,
    "change": 8
  },
  "details": {
    "listing_quality_breakdown": {
      "completeness_score": 90,
      "copy_quality_score": 85,
      "differentiation_score": 70,
      "conversion_hygiene_score": 80
    },
    "backlink_metrics": {
      "referring_domains": 45,
      "total_backlinks": 120,
      "dofollow_backlinks": 80,
      "new_backlinks_30d": 5,
      "lost_backlinks_30d": 2
    },
    "ai_visibility_metrics": {
      "raw_score": 42,
      "total_mentions": 18,
      "position_in_mentions": 12,
      "ai_search_volume": 250
    }
  }
}

AgentCore Integration

MarketplaceSeoInsightCapability

A dedicated AgentCore capability for retrieving and analyzing MSS scores.

Parameters:

Parameter Required Default Description
listing_url Yes - AWS Marketplace listing URL
category_code No "default" Category for benchmarking
brand_keyword No "" Brand name for AI visibility
include_raw_data No false Include detailed metrics
include_recommendations No true Include action recommendations
force_refresh No false Force recalculation

Output Schema:

{
  "type": "marketplace_seo_insight",
  "score": 78,
  "grade": "B",
  "components": { ... },
  "weaknesses": [ ... ],
  "recommended_actions": [ ... ],
  "summary": "Your listing is strong overall but underleveraged in backlinks...",
  "suggested_playbooks": [
    "improve_listing_copy",
    "llm_seeding_campaign"
  ]
}

Playbook Mapping

Weaknesses automatically map to AgentCore playbooks:

Component Weakness Playbook
Listing Quality Low LQ improve_listing_content
Backlink Authority Low BA create_linkable_assets
AI Visibility Low AIV llm_seeding_campaign

Database Schema

marketplace_seo_scores

CREATE TABLE marketplace_seo_scores (
    id BIGINT PRIMARY KEY,
    team_id BIGINT,
    user_id BIGINT,
    listing_id BIGINT,

    -- Listing identification
    aws_listing_id VARCHAR(100),
    listing_url VARCHAR(500),
    category_code VARCHAR(100),

    -- Overall score
    score TINYINT UNSIGNED DEFAULT 0,
    grade VARCHAR(3) DEFAULT 'F',

    -- Component scores (0-100)
    listing_quality DECIMAL(5,2) DEFAULT 0,
    backlink_authority DECIMAL(5,2) DEFAULT 0,
    ai_visibility DECIMAL(5,2) DEFAULT 0,

    -- Listing Quality breakdown
    listing_quality_breakdown JSON,

    -- Backlink metrics
    referring_domains INT UNSIGNED DEFAULT 0,
    total_backlinks INT UNSIGNED DEFAULT 0,
    dofollow_backlinks INT UNSIGNED DEFAULT 0,
    new_backlinks_30d INT UNSIGNED DEFAULT 0,
    lost_backlinks_30d INT UNSIGNED DEFAULT 0,
    category_median_ref_domains DECIMAL(10,2),

    -- AI Visibility metrics
    ai_visibility_raw_score INT UNSIGNED DEFAULT 0,
    total_llm_mentions INT UNSIGNED DEFAULT 0,
    position_in_mentions SMALLINT UNSIGNED,
    ai_search_volume INT UNSIGNED DEFAULT 0,
    category_visibility_median DECIMAL(10,2),

    -- Analysis results
    weaknesses JSON,
    recommended_actions JSON,
    raw_data JSON,

    -- Snapshot tracking
    previous_score TINYINT UNSIGNED,
    score_change TINYINT,
    previous_snapshot_at TIMESTAMP,

    -- Cost tracking
    api_cost DECIMAL(8,4) DEFAULT 0,

    created_at TIMESTAMP,
    updated_at TIMESTAMP,

    INDEX (aws_listing_id, created_at),
    INDEX (team_id, created_at),
    INDEX (score, created_at)
);

marketplace_seo_category_benchmarks

CREATE TABLE marketplace_seo_category_benchmarks (
    id BIGINT PRIMARY KEY,
    category_code VARCHAR(100) UNIQUE,
    category_name VARCHAR(255),

    -- Backlink benchmarks
    median_referring_domains DECIMAL(10,2) DEFAULT 0,
    median_backlinks DECIMAL(10,2) DEFAULT 0,
    p75_referring_domains DECIMAL(10,2) DEFAULT 0,
    p90_referring_domains DECIMAL(10,2) DEFAULT 0,

    -- AI visibility benchmarks
    median_ai_visibility DECIMAL(10,2) DEFAULT 0,
    median_llm_mentions DECIMAL(10,2) DEFAULT 0,
    p75_ai_visibility DECIMAL(10,2) DEFAULT 0,
    p90_ai_visibility DECIMAL(10,2) DEFAULT 0,

    -- Metadata
    sample_size INT UNSIGNED DEFAULT 0,
    last_calculated_at TIMESTAMP,

    created_at TIMESTAMP,
    updated_at TIMESTAMP
);

UI Components

Score Gauge

  • Circular progress indicator (0-100)
  • Color-coded by grade (green → red)
  • Animated fill on load
  • Shows grade letter in center

Component Bars

Three horizontal progress bars showing: - Listing Quality (blue, 40% label) - Backlink Authority (green, 25% label) - AI Visibility (purple, 35% label)

Weaknesses Panel

  • Grouped by component
  • Color-coded badges
  • Human-readable descriptions

Actions Panel

  • Sorted by priority (High → Low)
  • Priority badges (red/yellow/blue)
  • Links to AgentCore capabilities

End-to-End Flow

  1. User opens listing in Vell and clicks "Run Marketplace SEO Score"

  2. Backend processes:

  3. Calls DataForSEO Backlinks API for backlink metrics
  4. Calls DataForSEO LLM Mentions API for AI visibility
  5. Runs ListingQualityAnalyzer on listing content
  6. Computes MSS using weighted formula
  7. Saves snapshot to database

  8. UI displays:

  9. Overall score (78) with grade (B)
  10. Component breakdown bars
  11. Top 3 weaknesses
  12. Recommended action buttons

  13. User clicks action (e.g., "Boost AI Visibility")

  14. AgentCore executes:

  15. Runs MarketplaceSeoInsightCapability
  16. Planner maps LOW_LLM_MENTIONSllm_seeding_campaign playbook
  17. Multi-step workflow generates content pack

  18. 30-60 days later:

  19. User reruns score
  20. MSS improves from 78 → 86
  21. Trend chart shows improvement

Configuration

Admin Settings

Setting Default Description
dataforseo_enabled false Enable DataForSEO integration
dataforseo_backlinks_enabled false Enable Backlinks API
dataforseo_llm_mentions_enabled false Enable LLM Mentions API
marketplace_seo_cache_ttl 60 Cache TTL in minutes
seo_weight_multiplier_measured 1.00 Confidence multiplier for measured (API) data
seo_weight_multiplier_estimated 0.70 Confidence multiplier for estimated (Bedrock) data
seo_use_bedrock true Enable Bedrock fallback when APIs unavailable

API Costs (DataForSEO)

API Call Cost
Backlinks Summary $0.002
LLM Aggregated Metrics $0.10
LLM Top Domains $0.10

Estimated cost per full analysis: ~$0.22


Files Reference

File Purpose
app/Models/MarketplaceSeoScore.php Score snapshot model
app/Models/MarketplaceSeoCategoryBenchmark.php Benchmark model
app/Services/DataForSEO/MarketplaceSeoScoringService.php Core scoring logic
app/Services/DataForSEO/DynamicWeightCalculator.php Confidence-based weight adjustment
app/Services/DataForSEO/DynamicWeightResult.php Weight adjustment result DTO
app/Services/DataForSEO/BedrockListingAnalyzer.php Bedrock fallback proxy scoring
app/Services/DataForSEO/ListingQualityAnalyzer.php LQ component analyzer
app/Services/DataForSEO/MarketplaceSeoScoreDTO.php Data transfer object
app/Http/Controllers/Dashboard/User/MarketplaceSeoScoreController.php HTTP controller
app/Extensions/ContentManager/System/Services/Capabilities/MarketplaceSeoInsightCapability.php AgentCore capability
resources/views/default/panel/user/marketplace-seo-score/index.blade.php Dashboard view
database/migrations/2025_12_08_150000_create_marketplace_seo_scores_table.php Database migration

See Also