Article Schema Missing Required Field author.name

Search Console warns "Missing field author.name" on hundreds of Article pages. The byline string is set, but the JSON-LD shape is wrong — and the rich result quietly disappeared.

Search Console → Enhancements → Articles starts flagging “Missing field ‘author.name’” on a few pages. Days later it is 200 pages. A week later your articles stop getting the byline chip in SERP. The frustrating part: you DO have an author. The byline reads “By Jane Lee” right under the title. Open the JSON-LD and you see why Google is unhappy — the author field is a bare string or an object missing the inner name property. Google’s Article schema is picky: author must be a structured object with at least @type and name. A plain string fails validation even though the human reads it as a name.

Common causes

Ordered by frequency in production templates.

1. author is a string, not an object

Template emits "author": "Jane Lee". Schema.org accepts a string for many fields but Google specifically requires author to be a Person or Organization object for Article rich results.

How to spot it: View source on JSON-LD. If "author" is a quoted string, this is the bug.

2. author is { "name": null } because the data field is empty

CMS has an author field that is sometimes null. The generator emits { "@type": "Person", "name": null }. Google reads this as “name field present but empty.”

How to spot it: Some articles have valid author objects, others have null or empty string in the name slot.

3. author object has givenName and familyName but no name

The generator splits the name properly but never emits the combined name field. Schema.org allows the split form but Google’s Article rich result requires name specifically.

How to spot it: JSON-LD has "givenName": "Jane", "familyName": "Lee" but no "name".

4. author is an array of strings instead of objects

Multi-author articles emit "author": ["Jane Lee", "Sam Park"]. The array shape is correct but each entry must be an object.

How to spot it: View source on a co-authored article and inspect the array contents.

5. author nested under the wrong parent

Generator puts author inside publisher or mainEntityOfPage instead of at the Article root.

How to spot it: Search the JSON-LD for "author" and confirm its parent key is the top-level Article object.

6. CMS migration dropped the structured author data

After a CMS migration, the new system stores authors as text only. The schema generator falls back to the team byline or “Editorial Team” as a string.

How to spot it: All recent articles share the same generic author string; older articles have varied authors.

Before you start

  • Pull the list of affected URLs from Search Console → Enhancements → Articles → “Missing field ‘author.name’”. Save the list — you will measure cleanup against it.
  • Identify the template or generator that emits the JSON-LD.
  • Decide on your data model: do you have a real authors table, or only freeform strings?
  • Confirm whether author should be a Person (typical) or Organization (for editorial team content).

Information to collect

  • Raw HTML for 5-10 affected pages, focusing on the JSON-LD block.
  • The template code that builds author.
  • The CMS / data source: structured author records or freeform strings.
  • Whether your site has both Article and BlogPosting types, or only one.
  • Sample data for typical authors (single, co-authored, anonymous editorial).

Step-by-step fix

Cheapest first.

Step 1: Confirm the shape with a Rich Results Test

Run any affected URL through Google’s Rich Results Test. The error message will quote the exact field path: author[0].name is missing or author is a string, expected object. That tells you which variant of the bug you have.

Step 2: Fix the schema generator

Minimum valid shape:

{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "How to bake sourdough",
  "datePublished": "2026-05-10",
  "author": {
    "@type": "Person",
    "name": "Jane Lee"
  }
}

In template code:

function authorBlock(article) {
  if (!article.author?.name) {
    // No reliable author — omit the field entirely rather than fake it
    return undefined;
  }
  return {
    "@type": "Person",
    "name": article.author.name,
    ...(article.author.url && { url: article.author.url }),
  };
}

const jsonLd = {
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": article.title,
  "datePublished": article.publishedAt,
  ...(authorBlock(article) && { author: authorBlock(article) }),
};

Step 3: Handle multi-author articles correctly

Each author must be its own object:

"author": [
  { "@type": "Person", "name": "Jane Lee", "url": "https://example.com/team/jane" },
  { "@type": "Person", "name": "Sam Park", "url": "https://example.com/team/sam" }
]

In code:

const authorArr = article.authors
  .filter(a => a?.name)
  .map(a => ({ "@type": "Person", "name": a.name, ...(a.url && { url: a.url }) }));

if (authorArr.length === 1) jsonLd.author = authorArr[0];
else if (authorArr.length > 1) jsonLd.author = authorArr;
// else: omit

Step 4: Editorial-team content uses Organization

For content without a named individual:

"author": {
  "@type": "Organization",
  "name": "Acme Editorial",
  "url": "https://example.com/about/editorial"
}

Resist the temptation to invent a fake person.

Step 5: Backfill missing author data in CMS

For affected URLs:

# Find articles with missing author.name in JSON-LD
for url in $(cat affected.txt); do
  curl -s "$url" | grep -q '"author":\s*"' && echo "STRING_AUTHOR: $url"
  curl -s "$url" | grep -q '"name":\s*null' && echo "NULL_NAME: $url"
done

Either edit each one or write a one-off script to set a sensible default (real author for legacy posts, editorial Org for anonymous).

Step 6: Add CI assertion for required schema fields

// scripts/validate-schema.mjs
import { parse } from 'node-html-parser';

for (const url of sampleUrls) {
  const html = await fetch(url).then(r => r.text());
  const root = parse(html);
  const ld = root.querySelectorAll('script[type="application/ld+json"]');
  for (const node of ld) {
    const data = JSON.parse(node.text);
    if (data['@type'] !== 'Article' && data['@type'] !== 'BlogPosting') continue;
    if (typeof data.author === 'string') throw new Error(`String author: ${url}`);
    if (!data.author?.name && !Array.isArray(data.author)) throw new Error(`Missing author.name: ${url}`);
  }
}

Run on every deploy. Catches regressions before users see them.

Step 7: Re-request indexing

URL Inspection → Request indexing on a sample of fixed URLs. Watch Search Console → Enhancements → Articles for the warning count to fall over 1-3 weeks.

Verify

  • Rich Results Test on five fixed URLs reports zero warnings on author.
  • Search Console → Enhancements → Articles shows “Missing field ‘author.name’” count trending toward zero.
  • Byline chips reappear in SERP for affected URLs.
  • CI assertion runs green on every PR.
  • New articles never ship without a structured author object.

Long-term prevention

  • Treat schema fields as part of the content contract: validate them as you would required form inputs.
  • Use TypeScript types for your JSON-LD generators so missing fields fail at compile time.
  • Document the canonical author shape in your repo README or schema-registry doc.
  • Establish a rule: if there is no real human author, use Organization; never fall back to a string.
  • Quarterly audit of Search Console enhancement warnings to catch slow drifts.

Common pitfalls

  • Setting "author": "" (empty string) instead of omitting the field. Google flags empty values as worse than missing.
  • Using @type: "Thing" for author. It is a valid type but not what Google’s Article rich result expects.
  • Including author only in microdata or RDFa but not JSON-LD. Pick one format; Google’s documentation focuses on JSON-LD.
  • Adding author.image or author.sameAs but forgetting author.name. Name is the only field that is actually required.
  • Listing the author’s URL as https://twitter.com/handle and assuming it counts as a name. URL and name are separate fields.

FAQ

Q: Can author be a URL pointing to an author page instead of an inline object?

Schema.org allows that pattern but Google’s rich results documentation recommends inline Person objects with name. Use inline objects for safety.

Q: Do anonymous editorials qualify for Article rich results?

Yes, but the author must be a named Organization. “Editorial Team” or your publication’s name is fine. “Anonymous” or empty does not satisfy the requirement.

Q: What if the author has a pen name? Should I expose the legal name?

Use whatever name appears in the byline on the page. Schema must mirror visible content. If the visible byline is “J. Doe,” the schema name is “J. Doe.”

Q: Will fixing this immediately bring back byline chips in SERPs?

Not always — byline chips also depend on broader trust signals. But fixing the warning is a prerequisite. Without a valid author.name, the chip will not even be considered.

Tags: #SEO #Troubleshooting #Structured data #article-schema #author