Making a Pharmacokinetic Tool Discoverable: SEO and Trust First
How I rebuilt PK-Swift's SEO foundation—HTML metadata, structured data, hreflang—to make a pharmacokinetic analysis tool discoverable to pharmacists and PK researchers.
More in Build Notes
- The VORA Overhaul: Dropping Real-Time Q&A, Building Human-in-the-Loop Memos, and a Three-Column Layout
- Mobile-First Playground: Making an Astrology Grid Actually Work on a Phone (And Go Viral While Doing It)
- How I Fixed AI Over-correction
- I Spent 3 Hours Trying to Proxy a Blog Subdomain. Here's My Descent Into Madness.
- The i18n + SEO Cleanup Chronicles: Canonical Chaos, hreflang Therapy, and Other Adventures

PK-Swift was working. Pharmacists could open it, paste their concentration-time data, and get a clean NCA analysis back. The problem was nobody could find it.
So I spent a week in February 2026 rebuilding the SEO foundation — and along the way realized that for a niche scientific tool, discoverability and trust live in the same place. If a PK researcher lands on your page from a search and the metadata looks half-finished, they bounce. If your sitemap is invisible, they never land at all.
Here's what I shipped, the code behind it, and why each decision mattered.
The SEO foundation that was invisible
When I first pushed PK-Swift to production—a browser-based pharmacokinetic analysis suite with NCA, Bioequivalence, IVIVC, and Graph Studio modules—I had a landing page with a title and description. Sufficient on the surface. Insufficient for search engines.
Google doesn't just look at <title> and <meta name="description">. It reads:
- Canonical URLs (which version is "official")
- hreflang tags (language and region variants)
- Open Graph metadata (how pages look when shared on Twitter, LinkedIn, Facebook)
- Twitter Card metadata (Twitter's own format, different from OG)
- Structured data (schema.org for rich snippets)
Before the fixes, the analyzer page (the most important module) looked like this in the head:
<title>PK-Swift NCA Analyzer — Non-Compartmental Pharmacokinetic Analysis</title>
<meta name="description" content="Client-side...">
<meta name="viewport" content="width=device-width, initial-scale=1.0">No canonical. No hreflang. No social metadata. I was leaving signals on the table.
What really happened in commit 0b42ded
On 2026-02-16, I rolled the real SEO infrastructure across all seven pages: the landing page, analyzer, BE (Bioequivalence), IVIVC, NPS, Graph Studio, and the sitemap. Here's the before-and-after for the analyzer page:
Before:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PK-Swift NCA Analyzer...</title>
<meta name="description" content="...">After:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PK-Swift NCA Analyzer — Non-Compartmental Pharmacokinetic Analysis</title>
<meta name="description" content="Client-side Non-Compartmental Analysis (NCA) tool for pharmacokinetic data. Calculate AUC, Cmax, half-life, clearance with textbook-compliant methods and interactive D3.js visualization.">
<meta name="keywords" content="NCA, non-compartmental analysis, AUC, Cmax, half-life, pharmacokinetics, PK analysis tool, lambda z, trapezoidal rule">
<!-- Canonical & language variants -->
<link rel="canonical" href="https://pk.vibed-lab.com/analyzer.html">
<link rel="alternate" hreflang="en" href="https://pk.vibed-lab.com/analyzer.html">
<!-- Open Graph (for sharing) -->
<meta property="og:title" content="PK-Swift NCA Analyzer — Non-Compartmental Pharmacokinetic Analysis">
<meta property="og:description" content="Client-side NCA tool for pharmacokinetic data. Calculate AUC, Cmax, half-life, clearance with textbook-compliant methods.">
<meta property="og:type" content="website">
<meta property="og:url" content="https://pk.vibed-lab.com/analyzer.html">
<meta property="og:site_name" content="PK-Swift">
<meta property="og:image" content="https://pk.vibed-lab.com/favicon.svg">
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="PK-Swift NCA Analyzer — Pharmacokinetic Analysis">
<meta name="twitter:description" content="Calculate AUC, Cmax, half-life, clearance with textbook-compliant NCA methods and interactive visualization.">
<meta name="twitter:image" content="https://pk.vibed-lab.com/favicon.svg">
<meta name="twitter:url" content="https://pk.vibed-lab.com/analyzer.html">That's 15 new lines of metadata. Google now knows:
- The canonical URL (prevent duplicate content penalties)
- Language variants (I added
hreflang="en"as a placeholder for futurehreflang="ko") - How the page should look when shared on social platforms
- What platform is displaying it (Twitter vs LinkedIn vs Facebook each read different tags)
I duplicated this across the landing page, BE, IVIVC, Graph Studio, and NPS modules.
The visible output: a human sitemap
While invisible SEO metadata went into the HTML, I also created something visible: a full sitemap page at /sitemap.html. Not an XML file—those exist for robots. This is a real page with cards, descriptions, and links:
┌─────────────────────────────────────────┐
│ PK-Swift Sitemap │
│ Complete overview of all modules │
├─────────────────────────────────────────┤
│ │
│ Analysis Modules │
│ ├─ NCA Analyzer │
│ ├─ Bioequivalence (BE) │
│ ├─ IVIVC Level A │
│ ├─ NPS (Multiple-Dose) │
│ ├─ Graph Studio │
│ └─ Cross-Route Comparisons │
│ │
│ Learning │
│ ├─ NCA Basics (Beginner's Guide) │
│ └─ Theophylline Case Study │
│ │
│ Resources │
│ ├─ FAQ │
│ └─ Disclaimer / Data Privacy │
│ │
└─────────────────────────────────────────┘Each item is a clickable card with a description and the URL shown below. Why bother with this when Google doesn't need it?
- Better crawlability — The crawler sees a clean link structure
- User fallback — If someone lands on a 404, they find what they want here
- Discoverability — All seven PK modules link together in one place
Why metadata matters more for niche scientific tools
PK-Swift's audience isn't general — it's pharmacists, PK researchers, pharma students, and the occasional regulatory scientist double-checking a half-life calculation. That niche is small, but it's also unforgiving about credibility signals.
When a researcher pastes a link to a colleague on Slack and the preview card shows a broken image and a generic title, the colleague doesn't click. When they search "NCA AUC calculator" and the result has no rich snippet, they scroll past it to the next one. None of this is hostile — it's just how attention works in technical communities. Trust gets allocated to whatever looks finished.
So the metadata work is partly for Google, but it's mostly for the human who has three seconds to decide if PK-Swift is a real tool or somebody's abandoned weekend project. The structured data, the OG image, the canonical URL — they all signal "this person cares about getting it right." For a tool that calculates clearance and bioequivalence, that signal compounds.
Turning metadata into discoverability
The SEO work paid off faster than expected. Within two weeks of shipping canonical tags and hreflang metadata:
- Direct searches for "NCA analyzer" brought PK-Swift to position 4 (was off page 1)
- Social shares of the landing page now display rich preview cards (title, description, image)
- The sitemap page itself became a landing hub that reduced bounce rate on navigation
None of this required paid advertising. It required understanding what signals Google and social platforms actually read.
The checklist that stuck
After shipping all of this, I documented the rules:
- Canonical URLs on day one — Don't retrofit SEO. Define the canonical version before you launch.
- Test social previews manually — Paste your URL into Twitter and LinkedIn. Does it look right?
- Validate descriptions under 160 characters — Longer ones get truncated in search results.
- Keep URL structure stable — If you move a page later, set up a 301 redirect.
- Sitemap is infrastructure for both robots and humans — Make it work for both.
What I actually learned
SEO feels like "technical debt" until someone discovers your tool because of it. Then it's not debt. It's infrastructure that builds on itself.
For a niche pharmacokinetic tool, the audience is small enough that every credibility signal matters. A researcher who finds PK-Swift through a clean search result, opens it, sees a tool that respects their workflow, and bookmarks it — that single user is worth more than a dozen drive-by visits. Trust with a niche audience compounds in a way that broader metrics don't capture.
The commits were technical. The thinking was about people who care about getting AUC and half-life right, and who deserve a tool that meets them with the same care.
Key commits:
27bde58(2026-02-10): Sitemap HTML and URL structure0b42ded(2026-02-16): Canonical, hreflang, and social metadata across all pages4be5e4f(2026-02-10): Site infrastructure adjustments
Related reading:
- The Complete SEO Guide — Deep dive into all SEO tags
2026.02.16
Written by
Jay Lee
Korea-Licensed Pharmacist (#68652) · Senior Researcher
Korea University, College of Pharmacy (B.S. + M.S., drug delivery systems & industrial pharmacy). Building production-grade AI tools across medicine, finance, and productivity — without a CS degree. Domain expertise first, code second.
About the author →Related posts