Skip to main content

Author bios on blog posts

Issue No: 70

Category: Content & Readability

Issue type: Warning

Priority: IMPORTANT

Description

Verifies if blog post pages contain a discoverable author biography or associated author structured data to establish content authority and trust (E-E-A-T).

How do we capture it

The crawler issues an HTTP GET request to the target page, following redirect rules, and inspects the raw HTML response.

  1. Blog Detection: The crawler parses the HTML to confirm if the page is a blog post or informational article by checking for the presence of JSON-LD or Microdata specifying @type: "BlogPosting", "NewsArticle", or "Article", or via semantic URL paths containing segments like /blog/, /article/, /posts/, or /news/.
  2. Author Extraction: If the page is classified as a blog post, the crawler parses the HTML text to look for structured author markup: Extract JSON-LD or Microdata blocks. Inspect the author property within the main article schema block. If found, verify if it contains a Person object with a populated description or sameAs array.
  3. Semantic HTML Analysis: Scan the raw HTML for tag classes or IDs matching author patterns (e.g., class="author-bio", class="author-profile", id="about-author", or class="biography").
  4. Text-Length Parsing: If a biographical block or author description schema property is found, extract the plain text, strip HTML tags, normalize whitespace, and count the word and character lengths.
  5. Constraint: The crawler does not execute JavaScript. If the blog post's author block or schema data is rendered client-side (e.g., via single-page application hydration), it will not be detected. This behavior is expected and recorded as a lack of static author markup.

What to store

FieldTypeComment
is_blog_postBOOLEANIndicates whether the crawled URL is classified as a blog post or informational article.
has_author_nameBOOLEANTrue if an author name is explicitly declared in the HTML or structured metadata.
has_author_schemaBOOLEANTrue if schema.org metadata includes a valid author block under the Article or BlogPosting definition.
has_author_bio_textBOOLEANTrue if a text description or bio is found inside either schema or marked-up HTML containers.
author_name_stringVARCHAR(255)The extracted plain-text name of the author, sanitized and normalized.
author_bio_word_countINTEGERThe total word count of the detected author biography block.

Condition for trigger

The following trigger rules evaluate whether a crawled blog post lacks the necessary credibility and authority markers.

  • Trigger Rule 1: Missing Author Bio

    • Target Field: has_author_bio_text
    • Evaluation Logic: is_blog_post = TRUE AND has_author_bio_text = FALSE
    • Severity: WARNING
    • Diagnostic Message: "This blog post lacks a detectable author biography block in the HTML, missing a crucial credibility signal for search engines."
  • Trigger Rule 2: Missing Author Metadata

    • Target Field: has_author_schema
    • Evaluation Logic: is_blog_post = TRUE AND has_author_schema = FALSE
    • Severity: SUGGESTION
    • Diagnostic Message: "No structured metadata (Schema.org Author) was detected on this blog post. Adding JSON-LD author entities helps explicitly define authority."

Sources

Long description

Search engine ranking algorithms, particularly Google's, place heavy emphasis on E-E-A-T (Experience, Expertise, Authoritativeness, and Trustworthiness). To establish trust, search engines must easily determine who wrote a piece of content, what their qualifications are, and where else their expertise is demonstrated.

When a blog post fails to provide an author biography, it functions as a critical negative quality signal. Users and search crawlers cannot verify the author's credentials, which is especially damaging for "Your Money Your Life" (YMYL) content covering health, finance, or legal topics.

Common failure scenarios checked by the crawler include:

  • Anonymous Authorship: The post is attributed to generic handles like "admin", "staff", or the organization name itself without an accompanying bios.
  • Inaccessible Rendering: The author bio is dynamically loaded or fetched via an API client-side, leaving the search bot with a blank container in the raw HTML payload.
  • Incomplete Schema: An author name exists in the text, but the structured metadata (JSON-LD) completely omits the author field, preventing search engines from mapping the author node to external entities (such as social profiles).

How to Fix

  1. Embed a Static Bio Block: Implement a dedicated author biography section (e.g., at the end of the blog post) containing the author's full name, headshot, a brief professional summary explaining their expertise, and links to their personal website or professional networks (like LinkedIn). Ensure this section is rendered directly in the initial server-side HTML payload.
  2. Implement JSON-LD Metadata: Inject valid Schema.org metadata (inside <script type="application/ld+json">) within the document. Link the main BlogPosting or Article node to an author object of type Person.
  3. Populate Identity Fields: Within the JSON-LD Person block, include: "name" (The author's full professional name), "jobTitle" (Their professional title or role), "description" (A brief background narrative demonstrating expertise), and "sameAs" (An array of URLs containing links to their active social profiles, personal websites, or other verified columns).