Articles published without an author
What Is This Issue
This issue checks whether blog post pages include an author biography or author information to establish content credibility and trust (E-E-A-T: Experience, Expertise, Authoritativeness, Trustworthiness).
A page passes this check if:
- It’s a blog post or article page
- It has a visible author biography section (author name, bio text, or credentials)
- OR it has structured data (Schema.org) that identifies the author with a name and description
Example of passing implementation
<article>
<h1>How to Improve Your SEO</h1>
<p>By <strong>Jane Smith</strong></p>
<div class="author-bio">
<p>Jane Smith is a Senior SEO Specialist with 10 years of experience...</p>
</div>
</article>
<!-- With Schema.org markup -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"author": {
"@type": "Person",
"name": "Jane Smith",
"description": "Senior SEO Specialist with 10 years of experience"
}
}
</script>Example of failing implementation
<article>
<h1>How to Improve Your SEO</h1>
<p>Posted on January 1, 2024</p>
<!-- No author information -->
</article>Important note
This check only applies to blog posts and articles, not to homepage, contact pages, or product pages.
Why Is This Important
Having author information matters for:
- Rankings: Google’s E-E-A-T guidelines emphasize author expertise as a ranking factor, especially for “Your Money Your Life” (YMYL) content (health, finance, legal topics)
- Trust: Users trust content more when they know who wrote it and their qualifications
- Indexability: Search engines use author information to understand content credibility and authority
- User experience: Readers can evaluate whether the author is qualified to write on the topic
Impact on SEO health score
Resolving this issue improves your SEO health score by establishing content credibility and demonstrating expertise to both users and search engines.
How XeoPix Detects This
XeoPix checks for author information on blog posts through these steps:
Detection process
-
Identify blog posts: The crawler first determines if the page is a blog post or article by checking:
- URL patterns (contains
/blog/,/article/,/posts/,/news/) - Schema.org markup with
@type: "BlogPosting","Article", or"NewsArticle"
- URL patterns (contains
-
Look for author information:
- Structured data: Checks JSON-LD or Microdata for an
authorproperty with aPersonobject containingnameanddescription - HTML markup: Scans for elements with class or ID names like
author-bio,author-profile,about-author, orbiography
- Structured data: Checks JSON-LD or Microdata for an
-
Extract author details: If author information is found, XeoPix extracts:
- Author name
- Author biography text
- Word count of the biography
-
Flag issues: The page is flagged if:
- It’s a blog post but has no author bio text → WARNING
- It’s a blog post but has no author schema markup → SUGGESTION
Important limitations
- XeoPix only checks static HTML—not author information loaded by JavaScript
- If author bios are added dynamically, they won’t be detected
- Generic author names like “admin” or “staff” are considered insufficient
How To Fix
Step 1: Add an author bio section
Add an author bio section to your blog posts:
- Place it at the end of the article or near the byline
- Include the author’s full name
- Write a brief professional biography (2-3 sentences minimum)
- Add links to their professional profiles (LinkedIn, personal website)
- Use semantic class names like
class="author-bio"orid="author-biography"
Step 2: Add structured data (Schema.org)
Add structured data to your blog posts:
- Include author information in your JSON-LD markup
- Link your
BlogPostingorArticleschema to aPersonobject - Include
name,description, andsameAs(links to profiles) properties
Step 3: Ensure content is visible to search engines
Make sure author information is accessible:
- Don’t load author bios via JavaScript after page load
- Make sure the author information is in the initial HTML response
- Use server-side rendering (SSR) if using JavaScript frameworks
Example fix
<!-- Before: No author info -->
<article>
<h1>SEO Tips</h1>
<p>Tips for better SEO...</p>
</article>
<!-- After: With author bio -->
<article>
<h1>SEO Tips</h1>
<p>By <strong>John Doe</strong></p>
<p>Tips for better SEO...</p>
<div class="author-bio">
<h3>About the Author</h3>
<p>
<strong>John Doe</strong> is a certified SEO professional with 8 years of
experience helping businesses improve their search rankings.
</p>
</div>
</article>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "SEO Tips",
"author": {
"@type": "Person",
"name": "John Doe",
"description": "Certified SEO professional with 8 years of experience",
"sameAs": ["https://www.linkedin.com/in/johndoe"]
}
}
</script>What We Store
Storage Level
Page Level — This issue is evaluated for each individual page crawled.
Database Table / Prisma Model
ContentReadabilityData
Stored Fields
| Field | Type | Description |
|---|---|---|
| articleAuthorName | String? | The name of the article author |
| articleAuthorProfileUrl | String? | URL to the author’s profile page |
Detection Dependencies
- The following data sources are required to evaluate this issue:
- HTML Document — The crawled page is analyzed for author information
- Structured Data — Schema.org Article or Author markup may contain author information
- Meta Tags — Author meta tags or LinkedIn/Google author profile links
Examples
Example 1: Missing author bio on blog post
Scenario: A blog post has no author information.
Problematic state (fails):
<article>
<h1>10 SEO Tips for 2024</h1>
<p>Posted on January 15, 2024</p>
<p>Here are 10 tips to improve your SEO...</p>
</article>Corrected state (passes):
<article>
<h1>10 SEO Tips for 2024</h1>
<p>By <strong>Sarah Johnson</strong> | Posted on January 15, 2024</p>
<p>Here are 10 tips to improve your SEO...</p>
<div class="author-bio">
<h3>About the Author</h3>
<p>
<strong>Sarah Johnson</strong> is an SEO Consultant with 12 years of
experience in digital marketing.
</p>
</div>
</article>Example 2: Author info only in JavaScript
Scenario: Author bio loads via JavaScript after page load.
Problematic state (fails):
<article>
<h1>Content Marketing Strategies</h1>
<p>Content here...</p>
<div id="author-bio-container">
<!-- Author bio loaded via JavaScript -->
</div>
</article>Corrected state (passes):
<article>
<h1>Content Marketing Strategies</h1>
<p>Content here...</p>
<div class="author-bio">
<p>
<strong>Mike Chen</strong> is a Content Strategist specializing in B2B
marketing.
</p>
</div>
</article>Example 3: Using generic author name
Scenario: Using “Admin” or “Staff” as author name.
Problematic state (fails):
<article>
<h1>Technical SEO Guide</h1>
<p>By Admin</p>
<p>Guide content...</p>
</article>Corrected state (passes):
<article>
<h1>Technical SEO Guide</h1>
<p>By <strong>David Wilson</strong>, Senior Technical SEO Specialist</p>
<p>Guide content...</p>
<div class="author-bio">
<p>
<strong>David Wilson</strong> has 15 years of experience in technical SEO
and site architecture.
</p>
</div>
</article>Unit Test
Test File
__tests__/seo-audit-checks/contentReadability/issue-70-author-bio.test.js
Purpose
Validates that the SEO audit correctly identifies blog posts missing author information and reports the AUTHOR_BIOS_BLOG issue when author metadata is absent.
Tested Function
runContentReadability() from toggleGroups/contentReadability.js
Issue Information
- Issue Number: 70
- Issue Code:
AUTHOR_BIOS_BLOG - Toggle Group:
contentReadability
Test Scenarios
Positive Test Cases
Scenarios where the issue should not be reported:
- Blog post has author name via
<meta name="author"> - Blog post has author profile URL via
<link rel="author"> - Blog post has author via
<meta property="article:author"> - Non-blog pages (pages without blog post indicators)
- Multiple author metadata elements present
Negative Test Cases
Scenarios where the issue should be reported:
- Blog post without any author metadata (missing
<meta name="author">,<link rel="author">, or<meta property="article:author">)
Boundary Cases
No explicit boundary cases defined in the test.
Edge Cases
- Blog post detection via
og:type: Pages with<meta property="og:type" content="article">are detected as blog posts - Blog post detection via
article:published_time: Pages with<meta property="article:published_time">are detected as blog posts - Blog post detection via
meta name="author": Presence of author meta tag indicates blog post - Non-blog pages: Pages without blog post indicators are not checked for author info
Expected Outcome
Pass
The AUTHOR_BIOS_BLOG issue should be reported when:
- Page is detected as a blog post (via
og:type,article:published_time, orauthormeta tags) - AND page does not have author information (no
meta name="author",link rel="author", ormeta property="article:author")
Fail
The AUTHOR_BIOS_BLOG issue should not be reported when:
- Page is not a blog post (no blog post indicators)
- Page is a blog post and has author information via any supported method
Validation
- Correct detection of blog posts using multiple detection methods
- Proper validation of author metadata in different formats
- No false positives for non-blog pages
- Correct handling of multiple author metadata elements
Related Production Files
toggleGroups/contentReadability.js- Main toggle group implementationissueCodes.js- Issue code definitions
Coverage Summary
- ✅ Blog post detection via
og:typemeta tag - ✅ Blog post detection via
article:published_timemeta tag - ✅ Blog post detection via
authormeta tag - ✅ Author info via
<meta name="author"> - ✅ Author info via
<link rel="author"> - ✅ Author info via
<meta property="article:author"> - ✅ Non-blog page handling
- ✅ Multiple author metadata elements
- ✅ Missing author info detection
References
- E-E-A-T Quality Rater Guidelines — Google Search Central
- Author Property Reference — Schema.org
- The address element — W3C HTML Living Standard