Generated: 2026-06-19
Workflow: SEO_PERFORMANCE_SELF_IMPROVEMENT_WORKFLOW.md
Site: https://scottcoff.in
Lighthouse measured against local build (simulated mobile, throttled network):
| Metric | Score/Value |
|---|---|
| Performance | 70 |
| Accessibility | 93 |
| Best Practices | 100 |
| SEO | 100 |
| LCP | 11.7 s |
| FCP | 2.9 s |
| CLS | 0 |
| TBT | 40 ms |
Local SEO check: 0 errors, 0 warnings (all pages pass)
JSON-LD validation: 20 blocks, 0 parse errors
Sitemap: 26 URLs, correct canonical domain (scottcoff.in)
scottrubidoux_crop.jpg was 3984×1500px, 1.3 MB with no preload hint. The LCP element is a CSS background-image div, so the browser discovers it late.<h3> elements appeared before any <h2> in the DOM because the homepage was an .html file: Jekyll does not run the markdown converter on .html files, so ## Selected impact etc. were rendering as literal ## text instead of HTML headings.main.css (882ms savings) and main.min.js (304ms savings).index.html with markdown-style syntax (## Heading, - list item, etc.) was outputting raw markdown visible to users and search engines. The file was created as .html during the professionalization workflow; Jekyll only converts .md files.| in title — title: "Scott Coffin, PhD | Environmental Toxicologist" was being run through markdownify, which converted the | into a two-column table inside the <h1> tag.Files changed: assets/images/ (new files added), index.md
scottrubidoux_crop.jpg — 3984×1500px, 1,307 KBscottrubidoux_crop_opt.jpg — 1400px wide, progressive, mozjpeg — 60 KB (95% reduction)scottrubidoux_crop.webp — 1400px wide — 47 KBindex.md frontmatter to use scottrubidoux_crop_opt.jpgExpected impact: LCP drops from ~11.7s to approximately 1–3s on throttled mobile. The LCP resource is now 22× smaller.
File changed: _includes/head/custom.html
Added a conditional <link rel="preload" as="image"> that fires on any page with header.overlay_image set:
Impact: Tells the browser to discover the hero image early, before the CSS is parsed. Addresses the Lighthouse LCP discovery audit.
Files changed: index.html deleted, index.md created
Jekyll does not convert markdown in .html files. The old index.html was displaying raw markdown (## Selected impact, # Scott Coffin, PhD, etc.) as literal text in the rendered page — both visually broken and SEO-harmful (no semantic headings).
Converting to index.md restores proper heading structure:
page.title)File changed: index.md
Changed title from "Scott Coffin, PhD | Environmental Toxicologist" to "Scott Coffin, PhD — Environmental Toxicologist".
Minimal Mistakes runs page.title | markdownify to render the H1. The pipe character | creates a two-column markdown table. An em dash eliminates this.
Note: The <title> tag now reads “Scott Coffin, PhD — Environmental Toxicologist |
Scott Coffin, PhD” (the site title is appended by the SEO plugin). This is cosmetically redundant but does not affect rankings. To remove the redundancy, the page title could be changed to just “Environmental Toxicologist” which would yield “Environmental Toxicologist | Scott Coffin, PhD”. |
Files changed: assets/css/main.scss, _includes/footer.html
Added WCAG AA-compliant link color (#005f8e, ~5.0:1 contrast ratio on white) for:
.card a).page__content a, .page__content p a, .page__content li a).site-title, .masthead__menu-item a)Changed footer disclaimer from opacity: 0.8 to explicit color: #c8d6e0 (light blue-gray that contrasts adequately on the dark footer background).
Note: Footer social icon links and the “Follow:” label use the Minimal Mistakes theme’s default colors. These may still fail WCAG contrast audits as they are defined in the vendor Sass files. Overriding these would require deeper theme customization.
After all changes:
| Check | Result |
|---|---|
| Jekyll build | ✅ Succeeds (pre-existing Blog/Photography conflicts, not new) |
| Local SEO check | ✅ 0 errors, 0 warnings — all 8 pages PASS |
| JSON-LD validation | ✅ 20 blocks, 0 parse errors |
| Sitemap | ✅ 26 URLs, correct domain |
| robots.txt | ✅ OK |
| Preload link in built homepage | ✅ Present |
| H1 structure | ✅ Single clean H1 (no table) |
| Heading order | ✅ H1 → H2 → H3 throughout homepage |
| Markdown rendered | ✅ All ## headings, lists, and bullet points now render as HTML |
Lighthouse re-run: Local re-run encountered Windows headless Chrome NO_FCP error (known environment limitation — Chrome does not paint content in some headless configurations in this session). The baseline scores are captured in reports/lhci/homepage.json. Expected performance improvement on the live site is large due to the image size reduction.
| Change | Estimated impact |
|---|---|
| Hero image 1.3MB → 60KB | LCP improvement ~8–10s (dominant factor) |
| Preload hint | Additional 0.5–1s LCP improvement (early discovery) |
| Proper heading structure | Accessibility score improvement (~3–5 points) |
| Card/nav link contrast | Accessibility score improvement (~5–10 points) |
| Footer disclaimer contrast | Minor accessibility improvement |
Projected scores (live site, after deploy):
| Issue | Reason not fixed |
|---|---|
| Footer social icon link contrast | Defined in vendor Sass; requires deeper override or theme fork |
main.css render-blocking (882ms) |
Would require critical CSS inlining; high complexity, low risk-adjusted value for a personal site |
main.min.js render-blocking (304ms) |
Could add defer attribute to the script tag in the theme head; low priority |
Homepage <title> redundancy |
Minor cosmetic issue; doesn’t affect SEO rankings |
| HTTPS (http-status-code audit) | GitHub Pages serves HTTPS; this only fails on localhost (no TLS) |
From both the professionalization workflow and this SEO pass:
/Microplastics_Explainer/ has a TODO: Scott, please review and confirm this framing reflects your current assessment. in the health effects section./For_Journalists/ page would benefit from a downloadable high-resolution headshot.https://www.mixcloud.com/scoffincheyenne/ is still active./Expertise/ redirect — if there are any external links to /Expertise/, consider adding a Jekyll redirect.Homepage <title> redundancy — change title: to "Environmental Toxicologist" if you want a cleaner <title> tag (“Environmental Toxicologist |
Scott Coffin, PhD”). |
scottrubidoux_crop.webp (47 KB) was also generated. Using it as the hero would provide additional savings. Requires a custom override of the Minimal Mistakes hero template to serve WebP with JPEG fallback.| File | Change |
|---|---|
index.html |
Deleted — replaced by index.md |
index.md |
Created — markdown homepage with corrected title, preload, proper heading structure |
assets/images/scottrubidoux_crop_opt.jpg |
Created — optimized hero image (1400px, 60 KB) |
assets/images/scottrubidoux_crop.webp |
Created — WebP hero image (47 KB, not yet in use) |
assets/css/main.scss |
Added WCAG contrast overrides for card, body, nav links |
_includes/head/custom.html |
Added conditional preload link |
_includes/footer.html |
Changed disclaimer from opacity:0.8 to explicit accessible color |
lighthouserc.js |
Updated URL list (Expertise → For_Journalists, Microplastics_Explainer) |
scripts/local_seo_check.mjs |
Updated PAGES_TO_CHECK array |
scripts/pagespeed_insights.mjs |
Updated URLS array |
Report generated by SEO_PERFORMANCE_SELF_IMPROVEMENT_WORKFLOW.md automation pass.