Structured Data Warning in Search Console

JSON-LD warnings — typically missing required fields, wrong type, or out-of-spec fields.

Search Console’s “Enhancements” report shows red structured-data warnings like “Missing field ‘image’”, “Invalid value in field ‘datePublished’”, “Either ‘author’ or ‘publisher’ must be specified.” These don’t directly hurt indexing, but you lose rich snippets — no author card, no star ratings, no FAQ expansion. CTR typically drops 10-30%.

The fix is field-by-field validation against Schema.org and Google’s structured data requirements.

Common causes

1. Required field missing

Most-commonly missed:

TypeRequired (Google)Often omitted
Article / BlogPostingheadline, image, datePublished, authorimage, author
Productname, image, offers (with price + priceCurrency)offers.priceCurrency
Recipename, image, recipeIngredient, recipeInstructionsrecipeInstructions
FAQPagemainEntity array, each with name and acceptedAnswer.textacceptedAnswer.text
Eventname, startDate, locationlocation format

How to confirm: Rich Results Test names the exact field.

2. Wrong type (Article vs BlogPosting vs NewsArticle)

Article is the base; BlogPosting is for blog posts; NewsArticle is for news. Declaring two on one page conflicts. News sites need NewsArticle to qualify for Google News; personal blogs use BlogPosting; general technical guides use Article.

3. Date format wrong

Google wants ISO 8601:

"datePublished": "2026-05-21T10:00:00Z"      // OK, with timezone
"datePublished": "2026-05-21"                 // also OK
"datePublished": "2026/05/21"                 // wrong
"datePublished": "May 21, 2026"               // wrong
"datePublished": "2026-05-21T10:00:00"        // wrong, no timezone

4. image field format

image can’t always be just a string URL (depends on type). Prefer ImageObject:

// Simple (works in some contexts)
"image": "https://yourdomain.com/cover.jpg"

// Full recommended
"image": {
  "@type": "ImageObject",
  "url": "https://yourdomain.com/cover.jpg",
  "width": 1200,
  "height": 630
}

The image URL must be absolute (include https://), not /cover.jpg.

5. author as bare string

// Wrong
"author": "Jane Doe"

// Right
"author": {
  "@type": "Person",
  "name": "Jane Doe",
  "url": "https://yourdomain.com/about"
}

6. JSON-LD syntax errors (trailing commas, mismatched quotes)

JSON-LD must be valid JSON. A trailing comma invalidates the whole block. Schema.org validator and Rich Results Test both report “Parsing error.”

Shortest path to fix

Step 1: Get the specific error from Rich Results Test

https://search.google.com/test/rich-results

Paste the live URL. You’ll see:

  • Which schema types were detected
  • Each field’s value
  • Red warnings = required field missing or invalid value
  • Yellow notices = recommended field missing

Note the flagged field names.

Step 2: Cross-reference Schema.org

For example, an Article image warning:

https://schema.org/Article  (Article)
https://developers.google.com/search/docs/appearance/structured-data/article  (Google's extra requirements)

Confirm whether the field is required / recommended, or whether your type is wrong.

Step 3: Generate JSON-LD from one helper

// src/lib/jsonld.js
export function articleJsonLd({ title, slug, image, publishedAt, modifiedAt, author }) {
  const url = `https://yourdomain.com/articles/${slug}/`;
  return {
    "@context": "https://schema.org",
    "@type": "BlogPosting",
    "headline": title,
    "image": {
      "@type": "ImageObject",
      "url": image.startsWith("http") ? image : `https://yourdomain.com${image}`,
      "width": 1200,
      "height": 630
    },
    "datePublished": new Date(publishedAt).toISOString(),
    "dateModified": new Date(modifiedAt || publishedAt).toISOString(),
    "author": {
      "@type": "Person",
      "name": author?.name || "AI Productivity Guide Team",
      "url": author?.url || "https://yourdomain.com/about"
    },
    "publisher": {
      "@type": "Organization",
      "name": "Your Site",
      "logo": {
        "@type": "ImageObject",
        "url": "https://yourdomain.com/logo.png",
        "width": 600,
        "height": 60
      }
    },
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": url
    }
  };
}

In the layout:

---
import { articleJsonLd } from "../lib/jsonld.js";
const ld = articleJsonLd(Astro.props);
---
<script type="application/ld+json" set:html={JSON.stringify(ld)} />

Step 4: Add CI validation

// scripts/check-jsonld.mjs
import fg from "fast-glob";
import fs from "node:fs";

const issues = [];
for (const f of fg.sync("dist/**/*.html")) {
  const html = fs.readFileSync(f, "utf8");
  const blocks = [...html.matchAll(/<script[^>]+ld\+json[^>]*>([\s\S]+?)<\/script>/g)];
  if (blocks.length === 0) { issues.push(`NO JSON-LD: ${f}`); continue; }
  for (const [, body] of blocks) {
    try {
      const data = JSON.parse(body);
      if (!data["@type"]) issues.push(`MISSING @type: ${f}`);
      if (data["@type"] === "BlogPosting") {
        if (!data.headline) issues.push(`MISSING headline: ${f}`);
        if (!data.image) issues.push(`MISSING image: ${f}`);
        if (!data.datePublished) issues.push(`MISSING datePublished: ${f}`);
        if (!data.author) issues.push(`MISSING author: ${f}`);
      }
    } catch (e) {
      issues.push(`INVALID JSON: ${f} — ${e.message}`);
    }
  }
}
if (issues.length) { console.error(issues.join("\n")); process.exit(1); }

Step 5: Search Console “Validate fix” after deploy

Go to the specific enhancement report → click “Validate fix.” Google re-evaluates in 7-14 days.

You can speed it up: pick 5-10 most important URLs and Request indexing in URL Inspection.

Prevention

  • JSON-LD is always generated from one helper — no hand-writing
  • One schema type per page; never declare Article + BlogPosting together
  • Dates always new Date(...).toISOString() — no string concatenation
  • Every URL field (image url, author url, publisher logo) must be absolute with https://
  • Rich Results Test required for green status before merging
  • CI parses every HTML’s JSON-LD; missing required fields fail the build

Tags: #SEO #Google #Search Console #Indexing