Fix Article Schema Missing Field author.name in Search Console

Search Console warns "Missing field author.name" on Article pages. The byline string is set, but the JSON-LD shape is wrong. Here is the exact fix, the minimum valid shape, and how to verify it.

Fastest fix: Google’s Article rich result wants author to be a Person or Organization object that contains a name string. If your JSON-LD emits "author": "Jane Lee" (a bare string) or { "@type": "Person", "name": null }, change it to { "@type": "Person", "name": "Jane Lee" } in your schema generator, then click Validate Fix in Search Console. Validation typically takes up to two weeks while Google re-crawls.

Search Console’s Article rich result report (under Enhancements → Articles, also reachable from the per-URL inspection panel) starts flagging Missing field "author" (name) on a few pages. Days later it is 200 pages. A week later your articles lose the byline 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.

One clarification that saves a lot of confusion: per Google’s Article structured data docs (as of June 2026), author is technically a recommended property, not a hard requirement, so the page will still be indexed. But when you DO supply author, Google requires it to be a structured Person/Organization object with a name. A bare string is treated as malformed, the warning fires, and the byline enhancement drops out. So “recommended” does not mean “ignore this” — a half-supplied author is worse than none.

Which bucket are you in

The warning text is identical for several different bugs. Find your exact JSON-LD shape in this table first, then jump to the matching fix in Step 2.

What your JSON-LD looks likeRoot causeFix
"author": "Jane Lee"String, not objectWrap in { "@type": "Person", "name": ... }
{ "@type": "Person", "name": null }Data field emptyBackfill name or omit the block
{ "givenName": "Jane", "familyName": "Lee" }Split name, no nameAdd combined name
"author": ["Jane Lee", "Sam Park"]Array of stringsArray of objects
author nested in publisher/mainEntityOfPageWrong parentMove to Article root
Same generic string on every recent postCMS migration dropped dataRe-map authors, use Organization for editorial

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 the Article report (Search Console → Enhancements → Articles) by opening the Missing field "author" (name) issue and exporting its examples. 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 the Rich Results Test

Run any affected URL through Google’s Rich Results Test. The detected-items panel quotes the field path of the problem (for example author flagged with “Missing field ‘name’”). That tells you which variant of the bug you have. If the Rich Results Test does not even detect an Article item, your JSON-LD probably has a syntax error first — check Search Console’s separate Unparsable structured data report.

For a pure schema check (no Google-eligibility opinion), the Schema Markup Validator shows every property exactly as parsed, which makes a null or misnested author obvious. Use the Rich Results Test to judge Google eligibility, and the Schema Markup Validator to read the raw tree.

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"
  }
}

Keep author.name to the name itself. Per Google’s June 2026 author best-practices, the name field must NOT include honorifics, job titles, or publisher words. Write "name": "Jane Lee", not "name": "Dr. Jane Lee, Senior Editor at Acme". Put any disambiguating link in author.url instead.

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: Click Validate Fix, then confirm the re-crawl

Once the fix is deployed, open the Missing field "author" (name) issue in the Article report and click Validate Fix. Google immediately checks a sample; if those pass, the rest of the affected URLs are queued for re-crawling and progress is logged in the validation history. The official guidance is that validation can take two weeks or more, depending on your crawl frequency — do not re-click Validate Fix in a panic, as that restarts the clock.

To nudge a handful of high-value pages faster, run them through URL Inspection → Request indexing. The issue stays “open” in the report until 90 days pass with no new instances, so a count that lingers near zero for a while is normal.

How to confirm it’s fixed

  • Rich Results Test on five fixed URLs detects an Article item with a populated author.name and reports zero author warnings.
  • Schema Markup Validator shows author as a Person (or Organization) node with a non-empty name, parented directly under the Article.
  • Search Console’s Article report shows the Missing field "author" (name) count trending toward zero after a re-crawl, and the validation history reads “Passed.”
  • The byline reappears for affected URLs (note: Google has been trimming some Article enhancements through 2026, so treat the byline as a bonus, not a guarantee — the real win is removing the warning and the eligibility block).
  • CI assertion (Step 6) runs green on every PR, so 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. Once you supply an author object, name is the property Google actually checks.
  • Listing the author’s URL as https://x.com/handle and assuming it counts as a name. url and name are separate fields; a URL never substitutes for the name.

FAQ

Q: Is author actually required, or just recommended?

As of June 2026, Google lists author as recommended for Article, not required, so the page still indexes without it. But if you supply author in a broken shape (string or empty name), Search Console flags it and the byline enhancement is suppressed. The warning is about a malformed property you already added, not a missing page requirement. Fix the shape or omit the field cleanly; do not leave it half-set.

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

Use an inline Person/Organization object that contains name, and put the page link in author.url. A bare URL where Google expects an object does not satisfy name. The url property is for disambiguation, not a substitute for the name.

Q: Do anonymous editorials qualify for Article rich results?

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

Q: Should author.name include the author’s title, like “Dr.” or “Senior Editor”?

No. Google’s author best-practices say name should be the name only — no honorifics, job titles, or publisher words. Write "name": "Jane Lee". Surface the title in your visible byline if you want, but keep it out of the schema name.

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 the byline in SERPs?

Not always. The byline also depends on broader trust signals, and Google has been pruning some Article enhancements through 2026. But clearing the warning is a prerequisite — without a valid author.name, the byline is not even a candidate.

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