I Actually Fixed Everything. Here's What That Looked Like.
Part 2: I executed every fix from my audit checklist in 48 hours. A dedicated /about page with structured data, an author box on every post, and 12 expanded articles. Here's exactly what changed and why.
Series: VIBE.LOG
- 1. The Layout Vocabulary Cheat Sheet: What to Call That Thing on Your Screen
- 2. I Spent 3 Hours Trying to Proxy a Blog Subdomain. Here's My Descent Into Madness.
- 3. The Complete SEO Guide: How to Make Google Actually Notice Your Website
- 4. Why Your Next.js Favicon Isn't Showing (And the Three Ways to Actually Fix It)
- 5. GitHub Keeps Telling Me My Branch Is Fine. And Also Not Fine. At the Same Time.
- 6. Mobile-First Playground: Making an Astrology Grid Actually Work on a Phone (And Go Viral While Doing It)
- 7. Playground Is Live: The Destiny Grid, Real Astrology, and Why I'm Shipping a Toy Every Month
- 8. The Interactive Component Cheat Sheet: What to Call That Clickable Thing
- 9. Google Rejected My Site for 'Low-Value Content.' Here's What I Actually Fixed.
- 10. I Actually Fixed Everything. Here's What That Looked Like. โ you are here
- 11. I Hired 131 AI Employees Today. Here's How.
- 12. I Let My AI Run 72 Backtests While I Watched. It Picked the Winner.
- 13. I Taught My AI to Stop Asking Questions. It Took Five Rewrites.
- 14. Obsidian Turned My Scattered Notes Into a Second Brain. Here's How to Set It Up.
- 15. The Destiny Grid Gets Its East Wing: I Rebuilt Saju (ๅๆฑๅ ซๅญ) in TypeScript
- 16. Molecule Me: Your Personality, Encoded in Chemistry
When I ended Part 1, I had a to-do list.
I didn't wait. Over the next two days, I went from task list to deployed changes. Not because I'm impatient (okay, maybe a little), but because fixing the obvious stuff had to happen before I could credibly reapply to AdSense. Every day the site was in "semi-fixed" state was a day Google's crawler was potentially seeing mixed signals.
Here's what actually happened.
๐ The /about Page: Proving I'm Real
This was the top priority. Google needed a standalone, indexable page where they could verify that a real human runs this site.
I didn't write a generic bio. I built the entire page around E-E-A-T signals โ Expertise, Experience, Authoritativeness, Trustworthiness. These are the actual criteria Google uses to evaluate author credibility, especially for YMYL content (medicine, finance).
The page structure:
/about page architecture:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Person Schema JSON-LD โ
โ (credentials, affiliation, photo URL) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Hero Section โ
โ "Jay โ Licensed Pharmacist" โ
โ "Senior Researcher at [Company]" โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ The Story โ
โ How a pharmacist became an indie maker โ
โ (proof of domain expertise) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ What I Build โ
โ โข PKยทSwift (pharmacokinetics) โ
โ โข VORA (AI meeting assistant) โ
โ โข CryptoBacktest (finance) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Philosophy โ
โ Why I build this way โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Call to Action โ
โ Read the Blog / Get in Touch โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโThe page is 471 lines. Not because I was padding it โ every section had a purpose.
Key move: I included the honest truth. "Jay โ licensed pharmacist and senior researcher at a pharmaceutical company. No formal CS background. Builds production-grade AI tools anyway."
Why include the lack of CS degree? Because it's more credible. Anyone can claim expertise in coding. Fewer people will claim they don't have formal training and then show you they built production systems anyway.
The page also integrated Person schema JSON-LD with:
@type: Personname,jobTitle,affiliationurl(canonical link)- Credentials and expertise areas
Then I updated every internal link across the site that used to point to /#story to now point to /about.
๐ค The Author Box: Humanizing Every Post
This was the other half of the "prove I'm real" strategy.
I created an AuthorBox component that appears at the end of every single blog post:
What the AuthorBox shows:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ [J] Written by โ
โ Jay โ
โ Licensed Pharmacist ยท โ
โ Senior Researcher โ
โ โ
โ "Building production-grade AI tools โ
โ across medicine, finance, and โ
โ productivity โ without a CS degree." โ
โ โ
โ About the author โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโBefore the AuthorBox, a reader could finish a post about pharmacokinetics or cryptocurrency without knowing if the author was:
- A real person
- An AI writing filler content
- A 14-year-old with a hobby
- An established expert
Now every post has author credibility built in. And that link to /about feeds two birds with one breadcrumb: it reinforces that there's a real human here, and it drives internal traffic to the trust-signal page.
Added to all 33 published posts.
๐๏ธ The RED Post Intervention
Part 1 identified three posts that were dangerously thin:
| Post | Length | Decision |
|---|---|---|
| "Hello World" | 183 words | Unpublished |
| "Global UX Is 200 Tiny Fixes" | 285 words | Expanded to 1,084 words |
| "Why I Shipped Before Backend" | 425 words | Expanded to 1,032 words |
The "Hello World" post was literally just an introduction. It had to go. Keeping it would signal to Google: "This site publishes filler content."
The other two got the rewrite treatment. I didn't just add words. I added substance:
"Global UX Is 200 Tiny Fixes" started as a one-example post about removing two Korean words from a button. I expanded it to cover the philosophy behind micro-UX improvements, additional real examples from the codebase, before/after comparisons, and code snippets showing the actual changes.
"Why I Shipped Before Backend" was pure philosophy. I rewrote it to include a walkthrough of the actual PKยทSwift shipping strategy, the timeline and decisions, what broke and what held up, and the trade-offs in retrospect.
Same posts. Completely different value proposition.
๐ช The YELLOW Post Surge
Part 1 found that 52% of my posts were YELLOW grade โ borderline. Under 800 words, or lacking depth.
I expanded all 12 of them:
- Bitcoin Data Lessons
- CryptoBacktest i18n & SEO Chronicles
- CryptoBacktest Three-Bug Night
- Bilingual Korean-English Devlog
- Branding Journey: VORA
- Meeting Export Report
- Whisper Browser WASM Experiment
- How I Fixed AI Over-Correction
- PKยทSwift Buy Me a Coffee Setup
- PKยทSwift SEO & Monetization Balance
- PKยทSwift Smart Parse vs AI Parse
- Building PKยทSwift
Each got the same treatment: technical detail, real code, domain-specific context. The goal wasn't word count padding โ it was making sure any reader (or Google's crawler) could actually learn something.
Total: +1,055 lines added across 12 posts.
The breakdown shifted dramatically:
Content Grade Distribution:
Before: After:
โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ
โ GREEN 13 (39%) โโโ โ โ GREEN 24 (73%) โโโโโโ
โ YELLOW 17 (52%) โโโโ โ โ โ YELLOW 8 (24%) โโ โ
โ RED 3 ( 9%) โ โ โ RED 1 ( 3%) โ
โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโA 61% reduction in low-grade content.
๐จ Visual Formatting Pass
While I was in expansion mode, I applied formatting improvements to all 33 posts:
- Section headers with emoji (improves scannability)
- Bold callouts for key stats and numbers
- Italic emphasis for important concepts
- Better code block formatting
This wasn't about changing the message. It was about making the message readable. Google's ranking system doesn't directly score "looks nice," but human readers โ including Google's quality reviewers โ read more carefully when content is well-formatted.
โ๏ธ Technical SEO Refinements
Behind the scenes, I fixed the bugs that the audit agents had found:
Schema Update: Organization Logo
Google's structured data validator was flagging a missing logo in the Organization JSON-LD:
Before: After:
โโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ
โ Organization { โ โ Organization { โ
โ name โ โ name โ
โ url โ โ url โ
โ contactPoint โ โ logo โ NEW โ
โ } โ โ contactPoint โ
โโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโDateModified Support
Every post used to show the same publish and modified date. Now the frontmatter supports an optional updated field:
---
title: "Some Post"
date: "2026-02-20"
updated: "2026-03-04" โ tells Google the content is maintained
---When this field exists, it populates the BlogPosting schema's dateModified, which tells Google the content is actively maintained โ a trustworthiness signal.
Author URL Standardization
Updated the blog post schema, FAQ schema, and layout metadata to link to /about instead of the homepage. Centralizes author credibility in one place.
๐ฏ Ad Experience Cleanup
Google reviews ad experience during the approval process. I made three fixes:
No-Fill Detection โ The AdUnit component now detects when an ad doesn't fill (blank space, network issues) and hides the entire container. Before, empty ad boxes would flash on the page.
Advertisement Label โ Added an "Advertisement" label above ad units. Transparency is required by Google's policies, and showing it proactively improves trust.
Better Placement โ Moved ads to avoid the "ad sandwich" pattern (content โ ad โ content โ ad โ content). Now there's one ad after the article introduction and one after the blog preview list. The reading experience comes first.
๐ The Checkpoint
Site Health: Before vs After
Before After
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
3 RED posts 1 RED post (โ 67%)
17 YELLOW posts 8 YELLOW posts (โ 53%)
13 GREEN posts 24 GREEN posts (โ 85%)
No author identity Full AuthorBox on every post
No /about page Dedicated /about with schema
Incomplete schema markup Complete org + author schema
Empty ad boxes possible No-fill detection + labels
Ads sandwiching content Clean ad placement
2 weeks old ...still 2 weeks oldThe one thing I can't fix: time. Google wants to see 3โ6 months of consistent publishing before approving AdSense. I'm still in month one.
But everything else? Fixed.
๐ฌ What Happens Next
I'm keeping a discipline: one new blog post per week. By early April, I'll have three months of consistent history. By late May, six months.
In April, I'll reapply. Not before. No point rushing โ Google will just see the same new-domain flag.
Between now and then:
- Keep the YELLOW and GREEN posts updated with new information
- Publish genuinely useful content every week (no filler)
- Track what works (which posts get engagement and backlinks)
- Build a real audience, not just Google's approval
If AdSense approves in April, great. If not, I'll audit again and find the next layer of fixes.
๐ง What I Actually Learned
Here's the thing I didn't expect to realize.
When I first got rejected, I thought Google was being unfair. Thirty-three posts, a fully structured site, all the technical SEO boxes checked โ and they said low value? I took it personally.
But after going through every fix, I started seeing it differently.
Google wasn't asking me to game an algorithm. They were asking a simpler question: "If a stranger lands on this site, would they trust it? Would they come back?"
No /about page means no face behind the words. Thin posts mean the author didn't care enough to go deep. No author box means the content could have been written by anyone โ or no one. These aren't arbitrary hoops. They're the same things a reader would notice.
The rejection forced me to ask myself a question I'd been avoiding: Am I building this for Google's approval, or for the people who actually read it?
The answer should always be the same. Google's job is to surface content that's worth someone's time. My job is to write content that's worth someone's time. When those two things align, the approval is just a side effect.
I'm not mad at the rejection anymore. It made the site better โ not for the algorithm, but for the person reading this sentence right now.
If you're dealing with the same "low-value content" rejection, don't think of it as Google saying your work isn't good enough. Think of it as Google saying: "Show your readers who you are. Give them a reason to stay."
That's not a bad thing to be told.
I'll post an update when the reapplication happens. But honestly? Even if it takes another round, the site is already better than it was two days ago. And that's the part that actually matters.
2026.03.04
Written by
Jay
Licensed Pharmacist ยท Senior Researcher
Building production-grade AI tools across medicine, finance, and productivity โ without a CS degree. Domain expertise first, code second.
About the author โRelated posts