SEO & Performance Optimization for a React Site
Audit, technical stack modernization and SEO optimization of a developer portfolio.
Context
This website (al-si.com) is my personal portfolio. It was initially built as a simple showcase site with React, a custom CSS file and basic animations. The site was functional, but had never been optimized for SEO or performance.
The goal of this case study is to document the full optimization process, from the initial audit to measurable results, including every technical decision made along the way.
Methodology
The optimization followed a five-step process, designed to be reproducible on any similar project.
- Initial audit — Establish a measurable baseline: Google rankings (via SerpAPI), automated technical audit (meta tags, JSON-LD, sitemap, OG image), and build analysis (bundle size, modules).
- Stack modernization — Update dependencies and architecture: CSS migration to Tailwind v4, animation library replacement, component refactoring, semantic HTML.
- Technical SEO optimization — Fix every issue found in the audit: JSON-LD, meta tags, sitemap, OG image. Then re-run the technical audit to validate all checks pass before deploying. If issues remain, fix and re-test until achieving a perfect score.
- Deployment and indexing — Deploy to production, purge the CDN cache, submit the sitemap to Google Search Console and request indexing of the main page.
- Results measurement — After a 2 to 3 week indexing period, re-run ranking measurements, capture Lighthouse scores and analyze Search Console data (impressions, clicks, coverage).
Initial state
Before making any changes, I ran a complete audit to establish a measurable baseline.
Google rankings
| Keyword | Initial position | Final position |
|---|---|---|
| Alexandre Lessard | Not found (top 100) | Coming soon |
| Alexandre Lessard développeur | #1 | Coming soon |
| Alexandre Lessard développeur web | #1 | Coming soon |
| Alexandre Lessard Québec | Not found | Coming soon |
| Alexandre Lessard full-stack | #1 | Coming soon |
| développeur full-stack Québec | Not found | Coming soon |
| al-si.com | Not found | Coming soon |
Summary: 3 out of 7 keywords found in the top 100. Position #1 on name + profession queries, but absent on name alone and geolocated terms. Final positions will be measured 2 to 3 weeks after deployment.
Technical audit
| Check | Result |
|---|---|
| Meta tags | OK (12/12) |
| JSON-LD | Invalid (missing comma) |
| robots.txt | OK |
| sitemap.xml | Contains invalid hash anchors |
| OG image (share-card.png) | 404 - missing |
| favicon.ico | OK |
Score: 6/8 checks passed.
Performance (build)
| Metric | Value |
|---|---|
| JS bundle | 209 KB (66 KB gzip) |
| CSS | 4.6 KB (1.6 KB gzip) |
| Total estimate | ~270 KB (~70 KB gzip) |
| Modules transformed | 60 |
Issues identified
- Broken JSON-LD: syntax error preventing Google from reading structured data
- Missing OG image: social media sharing without a preview image
- Sitemap with hash anchors: non-crawlable URLs for search engines
- Orphaned CSS: styles for elements that no longer exist
- No main tag: non-semantic HTML structure
- react-transition-group: heavy dependency (~15 KB) for a single animation
Work completed and results
Stack modernization
- Migration from custom CSS to Tailwind CSS v4
- Replaced
react-transition-groupwith Framer Motion - Created reusable components (
Button,SectionHeader,ScrollReveal) - Separated navigation from the footer into its own component
- Complete component structure refactoring
Visual redesign
- Fixed navigation with hide/show on scroll and backdrop blur
- Scroll reveal animations on all sections
- Added sections: Projects, Articles
- Personal photo in the hero with optimized cropping
- Refined dark theme with consistent color system
Technical SEO optimization
- Fixed JSON-LD (syntax + enriched data)
- Created OG image (
share-card.png) - Cleaned up sitemap (removed hash anchors, added lastmod)
- Added
<main>for HTML semantics - Enriched meta description with target keywords
- Added
og:locale,meta robots, and absolute OG URLs - Enriched JSON-LD: address (QC/CA), LinkedIn, languages, skills
Content repositioning
- Repositioned the site toward web applications, SaaS and automation
- Rewrote all sections to reflect the new positioning
- Added recent experience (construction SaaS platform) in a separate visual block
- Realigned meta tags, OG and JSON-LD with the new positioning
Measured impact
| SEO check | Before | After |
|---|---|---|
| JSON-LD | Invalid | Valid + enriched |
| OG image | 404 | OK (1200x630) |
| Sitemap | Hash anchors | Single URL + lastmod |
| Semantic HTML | No main tag | main + sections |
| Meta description | Generic | Targeted keywords |
| Audit score | 6/8 | 8/8 |
The JS bundle went from 209 KB to 371 KB (66 → 116 KB gzip), and CSS from 4.6 KB to 33 KB (1.6 → 6.3 KB gzip). This increase reflects the addition of Framer Motion, Tailwind CSS v4, new sections (Projects, Articles), a full navigation system, scroll animations on every section and an in-depth article. Despite everything that was added, the site remains lightweight — a direct result of the optimization work done in parallel: removing unused dependencies, refactoring components and cleaning up orphaned CSS.
Estimated project value: ~$950
The cost of an equivalent engagement may vary depending on the initial analysis, meetings and deployment support.
Coming soon
The following sections will be added after deployment and a 2 to 3 week indexing period:
- Google rankings re-analysis — before/after comparison on all 7 target keywords
- Lighthouse audit — Performance, Accessibility, Best Practices, SEO scores
- Google Search Console analysis — impressions, clicks and index coverage
- Final assessment — return on investment and key takeaways
Interim conclusion
This case study documents an ongoing project. The biggest gains often come from simple fixes: valid JSON-LD, an OG image that exists, a clean sitemap. Modernizing the stack wasn't strictly necessary for SEO, but it improves maintainability and user experience.
What remains is the official relaunch and tracking SEO results over several weeks. This article will be updated with final data once the indexing period has passed.
The best time to optimize a site's SEO is before launch. The second best time is now.