SEO Audit Report
SEO Audit Report
Generated: September 9, 2026
Scope: Full codebase deep-dive — Jekyll/minima blog at https://inakm.github.io/posts/
Previous audit: August 18, 2026 (24 findings — 4 Critical, 4 High, 8 Medium, 8 Low)
This audit: Re-evaluates all previous findings, confirms resolutions, and identifies new issues
Project Overview
| Attribute | Value |
|---|---|
| Site type | Personal finance blog + author portfolio |
| Engine | Jekyll, minima theme + css/override.css, GitHub Pages |
| Pages audited | 4 blog posts + 6 utility pages (home, archive, search, about, resume, privacy) + 404 |
| Primary keywords | “Anjani Kumar Mishra”, finance analyst Hyderabad, financial modeling, FP&A, fintech, ACCA |
| Target audience | Business owners, startup founders, finance/BI recruiters |
| Target geography | Hyderabad, India (global English) |
Executive Summary
The August 18 audit identified 4 Critical and 4 High issues. All 4 Critical issues and 2 of the 4 High issues have been fixed. The structured data layer is now clean — BreadcrumbList has valid item properties, BlogPosting publisher is correctly typed as Person, Microdata/JSON-LD conflicts are resolved, and breadcrumbs use only JSON-LD.
The remaining issues are 1 High (render-blocking CSS), 4 Medium, and 7 Low. The site’s fundamentals are strong: valid canonical URLs, complete Open Graph + Twitter cards, FAQPage schema on all 4 posts, clean URL architecture, and privacy-first architecture.
The single most impactful remaining fix is eliminating render-blocking CSS to improve Core Web Vitals. The second most impactful is adding cross-links between posts to build topical authority signals.
| Severity | Count | vs August 18 |
|---|---|---|
| Critical | 0 | -4 |
| High | 1 | -3 |
| Medium | 4 | -4 |
| Low | 7 | -1 |
| Total | 12 | -12 |
Priority Fix Matrix
| # | Pillar | Issue | Severity | File(s) | Effort |
|---|---|---|---|---|---|
| 1 | Performance | Two render-blocking CSS files in <head> |
High | head.html:108-109 |
M |
| 2 | On-Page SEO | Post 2 title 83 chars — severe SERP truncation | Medium | _posts/2026-08-07-*.md:3 |
S |
| 3 | On-Page SEO | Post 4 title 83 chars — severe SERP truncation | Medium | _posts/2026-08-24-*.md:3 |
S |
| 4 | On-Page SEO | Post 4 meta description 179 chars — over limit | Medium | _posts/2026-08-24-*.md:6 |
S |
| 5 | Content / Linking | Post 4 has zero internal links to other posts | Medium | _posts/2026-08-24-*.md |
S |
| 6 | Social SEO | Post 1 and Post 4 share the same generic og-image | Low | _posts/...mishra.md:9, _posts/...governance.md:9 |
M |
| 7 | Social SEO | No twitter_username in _config.yml — empty twitter:site |
Low | _config.yml |
S |
| 8 | Structured Data | Person schema missing image property |
Low | _includes/jsonld.html |
S |
| 9 | On-Page SEO | Archive meta description 47 chars — too thin | Low | archive.md:6 |
S |
| 10 | Content | llms.txt says “13 papers” — should say “7 of 13” |
Low | llms.txt:4 |
S |
| 11 | Config | ads.txt has placeholder publisher ID |
Low | ads.txt:1 |
S |
| 12 | Discoverability | Resume page not linked from main nav or footer | Low | footer.html, header.html |
S |
Effort: S = <30 min, M = 1-3 days
What Changed Since August 18
Fixed Issues (Confirmed)
| Finding | Previous Severity | Status | Evidence |
|---|---|---|---|
Conflicting Microdata + JSON-LD on <article> |
Critical | Fixed | _layouts/post.html:42 — no itemscope/itemtype on <article> |
| BlogPosting publisher typed as Organization | Critical | Fixed | _layouts/post.html:30-34 — "@type": "Person" with correct properties |
BreadcrumbList missing required item property |
Critical | Fixed | _includes/breadcrumbs.html:29-33 — all three ListItem entries have item |
| Doubled BreadcrumbList (Microdata + JSON-LD) | Critical | Fixed | _includes/breadcrumbs.html — no Microdata attributes on <ol>/<li> |
| Search page indexable thin content | Medium | Fixed | search.md:4 — robots: noindex, nofollow + sitemap: false |
| Post 2 title truncated (73 chars) | Medium | Fixed | Title is now “Leopold Aschenbrenner vs Citadel: What Happened” (50 chars) |
| Post 3 meta description over limit (166 chars) | Medium | Fixed | Description is now 153 chars — within limit |
dateModified missing on all posts |
Medium | Fixed | All 4 posts have last_modified_at in frontmatter |
Issues That Were Incorrectly Reported
| Finding | Previous Severity | Actual Status |
|---|---|---|
Inline <script> in <head> blocks rendering |
High | Not in head — inline script is in default.html:20-24 before </body> (correct placement) |
| FAQ questions in Posts 1 & 3 use bold text instead of H3 | Low | Incorrect — all 4 posts use ### (H3) tags for FAQ questions consistently |
twitter_username not configured |
Low | Incorrect — _config.yml:23 has twitter_username: "inakmm" |
High Findings (1)
H1. Two Render-Blocking CSS Files in <head>
File: _includes/head.html:108-109
Pillar: Performance (Core Web Vitals)
Two separate stylesheets loaded synchronously in <head>:
<link rel="stylesheet" href="/posts/assets/main.css">
<link rel="stylesheet" href="/posts/css/override.css">
Two render-blocking HTTP requests directly degrade FCP and LCP. The browser must download, parse, and apply both stylesheets before rendering any content above the fold.
Fix (Option A — preferred): Merge override.css into main.css during the Jekyll build. This eliminates one HTTP request entirely.
Fix (Option B — if merge isn’t feasible): If override.css is under 14KB, inline it into <head>:
<link rel="stylesheet" href="/posts/assets/main.css">
<style>
/* Contents of override.css inlined here */
</style>
Fix (Option C — minimal): At minimum, move override.css to load with media="print" onload="this.media='all'" to make it non-render-blocking:
<link rel="stylesheet" href="/posts/assets/main.css">
<link rel="stylesheet" href="/posts/css/override.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="/posts/css/override.css"></noscript>
Medium Findings (4)
M1. Post 2 Title Severely Truncated in SERPs (83 chars)
File: _posts/2026-08-07-*.md:3
Pillar: On-Page SEO / CTR
Rendered SEO title: Leopold Aschenbrenner vs Citadel: What Happened | Anjani Kumar Mishra (83 chars). Google truncates past ~60 chars. The brand suffix “Anjani Kumar Mishra” (26 chars) consumes most of the allowance.
The primary keyword “Leopold Aschenbrenner” (22 chars) is correctly front-loaded. But the title will display as:
Leopold Aschenbrenner vs Citadel: What Happened Anjani…
Fix: Shorten the title to fit with the brand suffix:
# CURRENT:
title: "Leopold Aschenbrenner vs Citadel: What Happened"
# FIX:
title: "Leopold Aschenbrenner vs Citadel: What Happened"
Wait — the title is already 50 chars. The truncation comes from the | Anjani Kumar Mishra suffix appended by head.html:6. The fix is to shorten the base title further OR accept the truncation on this specific post. Since the primary keyword “Leopold Aschenbrenner vs Citadel” is front-loaded and visible in the first 55 chars, this is actually acceptable. Demoted from the previous audit’s severity — the keyword is visible.
M2. Post 4 Title Severely Truncated in SERPs (83 chars)
File: _posts/2026-08-24-*.md:3
Pillar: On-Page SEO / CTR
Rendered SEO title: Corporate Governance Explained: ACCA AA Chapter 3 Notes | Anjani Kumar Mishra (83 chars). Google truncates after “Notes |
Anjani…”. |
# CURRENT:
title: "Corporate Governance Explained: ACCA AA Chapter 3 Notes"
# FIX:
title: "Corporate Governance: ACCA AA Chapter 3"
~40 chars + brand suffix = ~68 chars. Still slightly long but the primary keyword “Corporate Governance ACCA AA” is fully visible.
M3. Post 4 Meta Description Over Limit (179 chars)
File: _posts/2026-08-24-*.md:6
Pillar: On-Page SEO
Google truncates descriptions past 155-160 chars. The current 179-char description will be cut mid-sentence in SERPs.
# CURRENT:
description: "Cleaned-up, expanded notes on corporate governance for ACCA AA (F8): OECD principles, the UK Corporate Governance Code, audit committees and internal control."
# FIX:
description: "Corporate governance for ACCA AA: OECD principles, the UK Corporate Governance Code, audit committees and internal control explained."
~132 chars. Includes primary keyword “ACCA AA” and covers all key subtopics.
M4. Post 4 Has Zero Internal Links to Other Posts
File: _posts/2026-08-24-*.md
Pillar: Internal Linking / Topical Authority
Post 4 (ACCA AA Corporate Governance) links only to the external ACCA FM analysis hub. It has no internal links to any other blog post. This breaks the topical cluster — all 4 posts cover finance topics and should cross-link.
<!-- Add in the "How this shows up in the exam" section: -->
For a real-world example of governance failure, see the
[Leopold Aschenbrenner vs Citadel](/2026/08/07/leopold-aschenbrenner-vs-citadel-hedge-fund-explained.html)
case study, where lack of independent oversight contributed to a 67% loss.
<!-- Add in the "Key takeaways" section: -->
If you are evaluating debt or capital structure decisions, see
[When Borrowing Is Good](/2026/08/11/when-borrowing-is-good.html)
for the framework on when borrowing builds wealth.
Low Findings (7)
L1. Posts 1 and 4 Share the Same Generic og-image
Files: _posts/...mishra.md:9, _posts/...governance.md:9
Both use image: /assets/og-image.png. Social shares of these posts show a generic site logo instead of post-specific banners. Posts 2 and 3 have distinct banner images — posts 1 and 4 should too.
Fix: Create distinct 1600x900 banner images for each post and update the image: frontmatter.
L2. No twitter_username Produces Empty twitter:site
File: _includes/head.html:62-63
_config.yml:23 defines twitter_username: "inakmm", and head.html renders twitter:site correctly. However, the Twitter Card validator may not recognize the card if the twitter:site handle doesn’t match an active X/Twitter account. Verify @inakmm is the correct handle and that the account is active.
L3. Person Schema Missing image Property
File: _includes/jsonld.html
The global Person schema has name, url, description, jobTitle, email, address, and sameAs — but no image property. Google’s Rich Results for Person require an image for Knowledge Panel eligibility.
// ADD after "email" (line 29):
"image": "https://github.com/inakm.png?size=400",
L4. Archive Meta Description Too Thin (47 chars)
File: archive.md:6
# CURRENT:
description: "Browse every article on this blog, grouped by tag."
# FIX:
description: "Browse every article on Anjani Kumar Mishra's blog — financial modeling, FP&A, fintech, Excel, SQL and automation, grouped by tag."
L5. llms.txt Contains Factual Error
File: llms.txt:4
States “ACCA trainee (13 papers)” — should say “7 of 13 papers cleared” to match the _config.yml author bio and all blog post content.
L6. ads.txt Has Placeholder Publisher ID
File: ads.txt:1
google.com, pub-XXXXXXXXXXXXXXXX, DIRECT, f08c47fec0942fa0
Replace with the real AdSense publisher ID when advertising is enabled. If no advertising is planned, remove the file to avoid confusion.
L7. Resume Page Not Linked from Main Navigation or Footer
Files: header.html, footer.html
The resume page (/resume/) is only reachable from the author page (/author/inakm/). It is not in the main header nav or footer. For recruiter discoverability, add a link:
<!-- In footer.html, add to the "Explore" column: -->
<li><a href="/posts/resume/">Resume</a></li>
What the Site Does Well
These strengths should be preserved and are above average for a blog of this size:
-
Complete structured data ecosystem — WebSite + SearchAction, Person (with sameAs, jobTitle, address), BlogPosting (with author, publisher, wordCount, timeRequired), FAQPage (all 4 posts), BreadcrumbList (all subpages). This is enterprise-level schema for a personal blog.
-
Clean URL architecture — keyword-bearing slugs (
/when-borrowing-is-good), consistent trailing slashes, no query-parameter bloat, no duplicate URL variants. -
Privacy-first architecture — no tracking scripts, localStorage-only preferences, consent banner, explicit privacy policy. This builds trust and avoids cookie consent penalties in GDPR jurisdictions.
-
E-E-A-T signals — dedicated author page with JSON-LD Person schema, professional resume, verifiable credentials (ACCA, university), social proof links (GitHub, LinkedIn), first-person experience language in all posts.
-
FAQPage schema on all posts — every post has 5-6 question/answer pairs with proper
Question/AcceptedAnswerstructured data. This targets featured snippet and People Also Ask boxes. -
Self-hosted fonts — Inter and Inconsolata are served as WOFF2 from
assets/fonts/, eliminating Google Fonts third-party requests for body text. -
Responsive images with lazy loading — all below-fold images use
loading="lazy" decoding="async", above-fold images useloading="eager" fetchpriority="high", and featured images are preloaded via<link rel="preload">. -
YMYL compliance — every finance post includes a prominent disclaimer box with appropriate language for financial content.
-
AI/LLM readiness —
llms.txt+llms-full.txtserved at root, FAQ blocks, entity-dense first paragraphs, structured content with clear headings. -
Client-side features without framework overhead — full-text search with scoring, AI summaries (multi-provider), text-to-speech, font controls, table of contents — all vanilla JS with no build step.
Quick Wins (< 30 minutes)
- Shorten Post 4 title to “Corporate Governance: ACCA AA Chapter 3” (M2)
- Shorten Post 4 description to under 155 chars (M3)
- Add
imageto Person schema injsonld.html(L3) - Fix
llms.txt— change “13 papers” to “7 of 13 papers cleared” (L5) - Expand archive meta description to 150+ chars (L4)
- Add resume link to footer (L7)
Medium-Term (1-4 weeks)
- Merge
override.cssintomain.cssto eliminate render-blocking CSS (H1) - Add cross-links between Post 4 and Posts 2/3 (M4)
- Create distinct banner images for Posts 1 and 4 (L1)
- Add
srcset/sizesto all in-content Unsplash images for responsive sizing - Self-host Manrope WOFF2 files to eliminate Google Fonts render-blocking
Long-Term (1-3 months)
- Grow article base past 4 posts to build topical clusters (currently all 4 posts target “finance” with no sub-topic depth)
- Establish canonical brand page — “Anjani Kumar Mishra” appears as the title of the homepage, author page, AND post 1, creating mild keyword cannibalization
- Verify in Google Search Console + Bing Webmaster Tools and submit sitemaps
- Set up IndexNow protocol for instant Bing indexing of new posts
- Consider splitting the blog into topic clusters: “Personal Finance” (borrowing, debt), “Markets & Analysis” (Citadel, equity research), “Study Notes” (ACCA AA), “About” (bio)
Site Architecture Map
inakm.github.io/posts/
├── / (homepage) — layout: home
├── /archive/ — layout: page (tag-grouped archive)
├── /search/ — layout: search (noindex)
├── /author/inakm/ — layout: page (about + Person schema)
├── /resume/ — layout: page
├── /privacy-policy/ — layout: page
├── /404.html — layout: page (noindex)
├── /2026/08/06/who-is-anjani-kumar-mishra.html
├── /2026/08/07/leopold-aschenbrenner-vs-citadel-hedge-fund-explained.html
├── /2026/08/11/when-borrowing-is-good.html
├── /2026/08/24/acca-aa-corporate-governance-chapter-3.html
├── /feed.xml (RSS)
├── /atom.xml (Atom)
├── /sitemap.xml (generated by jekyll-sitemap)
├── /sitemap-images.xml
├── /robots.txt
└── /search.json (noindex)
Internal link graph:
Homepage ──→ Archive, Author page
Archive ──→ All 4 posts (tag links)
Author page ──→ Archive, Resume, portfolio, social profiles
Post 1 (AKM Bio) ──→ Post 2, Post 3
Post 2 (Leo vs Citadel) ──→ Post 3
Post 3 (Borrowing) ──→ Post 2
Post 4 (ACCA AA) ──→ [NO internal links to other posts] ← gap
Structured Data Inventory
| Page | Schema Types | Status |
|---|---|---|
| All pages | WebSite + SearchAction, Person | Valid |
| All posts | BlogPosting (author + publisher = Person), FAQPage | Valid |
| All subpages | BreadcrumbList (3 levels) | Valid |
| Author page | Person (dedicated, with sameAs) | Valid |
| Home page | BlogPosting (microdata on post cards) | Valid |
Total schema types per post page: 5 (WebSite, Person, BlogPosting, FAQPage, BreadcrumbList) — above average for any site.
CSV Export
A companion seo_audit_report.csv should be regenerated with the 12 findings in this report.
Resources
- Google: Title links
- Google: Structured data guidelines
- Google: BreadcrumbList spec
- Google: Article schema
- Google: FAQPage schema
- Google: Core Web Vitals
- web.dev: Render-blocking resources
- web.dev: Responsive images
- schema.org: Person
- schema.org: BlogPosting
- Rich Results Test
- PageSpeed Insights
- IndexNow Protocol