DEV Community

MD Nayeem Miah
MD Nayeem Miah

Posted on

How I Optimized My Portfolio Website: Fast Loading, SEO-Friendly, and Easy to Maintain published: true tags: webdev, portfolio, seo, performance

Your portfolio is often the first impression a recruiter, client, or fellow developer gets of you. If it loads slowly, ranks nowhere on Google, or is a pain to update, it's working against you instead of for you. Here's how I approached optimizing mine — covering performance, SEO, and everyday usability.

1. Start With a Lightweight Foundation

The biggest performance wins come before you write a single line of custom code.

  • Pick a lean stack. Static site generators (Astro, Next.js with static export, Hugo, or even plain HTML/CSS/JS) ship far less JavaScript than a full SPA framework for a mostly-static portfolio.
  • Avoid unnecessary UI libraries. A heavy component library for a five-page site adds kilobytes you don't need. Hand-roll simple components instead.
  • Use system fonts or self-host web fonts. Pulling fonts from a third-party CDN adds an extra DNS lookup and render-blocking request. Self-hosting with font-display: swap avoids layout shift and speeds up first paint.

2. Optimize Images (This Is Usually the Biggest Win)

Images are almost always the heaviest assets on a portfolio site.

  • Convert images to WebP or AVIF — typically 30–50% smaller than JPEG/PNG at the same visual quality.
  • Resize before upload. Don't serve a 4000px-wide photo in a 600px container.
  • Use loading="lazy" on below-the-fold images so the browser doesn't fetch them until needed.
  • Add explicit width and height attributes to prevent layout shift (this also helps your Cumulative Layout Shift score).
<img src="/project-thumb.webp" alt="Project screenshot" width="600" height="400" loading="lazy" />
Enter fullscreen mode Exit fullscreen mode

3. Minimize and Defer JavaScript

  • Ship only the JS a page actually needs — code-split per route if your framework supports it.
  • Defer non-critical scripts (analytics, chat widgets) with defer or load them after the page is interactive.
  • Audit your bundle with a tool like source-map-explorer or your framework's built-in bundle analyzer to catch unexpectedly large dependencies.

4. Nail the SEO Basics

Good performance helps SEO, but there are structural things to get right too:

  • Unique, descriptive <title> and <meta description> per page — not just your name repeated everywhere.
  • Semantic HTML. Use <h1> once per page, proper heading hierarchy, <nav>, <main>, <footer>.
  • Open Graph and Twitter Card tags so your links look good when shared.
  • A sitemap.xml and robots.txt, even for a small site — it helps search engines index you faster.
  • Structured data (JSON-LD) using the Person or CreativeWork schema so search engines understand who you are and what you've built.
  • Alt text on every image — good for SEO and accessibility at the same time.
<meta property="og:title" content="Jane Doe — Full-Stack Developer Portfolio" />
<meta property="og:description" content="Projects, case studies, and contact info." />
<meta property="og:image" content="https://janedoe.dev/og-image.png" />
Enter fullscreen mode Exit fullscreen mode

5. Measure, Don't Guess

Run your site through:

  • Google PageSpeed Insights / Lighthouse — gives you Core Web Vitals (LCP, CLS, INP) plus SEO and accessibility scores.
  • WebPageTest — more granular waterfall view of what's blocking load.
  • GTmetrix — good for tracking performance over time.

Fix whatever's flagged in order of impact: usually image size, render-blocking resources, and unused JavaScript top the list.

6. Keep It Easy to Run and Maintain

A fast, well-ranked portfolio is only useful if you'll actually keep it updated.

  • Content in Markdown or a simple JSON/CMS file so adding a new project doesn't mean touching component code.
  • One-command local dev and deploynpm run dev, and a git-push-to-deploy setup (Vercel, Netlify, GitHub Pages) so there's zero friction to ship an update.
  • Keep dependencies minimal so npm install doesn't become a nightmare six months from now.
  • Add a simple README for future-you, listing how to add a project, update the resume link, or change the theme colors.

7. Quick Checklist

  • [ ] Images converted to WebP/AVIF and lazy-loaded
  • [ ] Fonts self-hosted or system fonts used
  • [ ] JS minimized, deferred, and code-split
  • [ ] Unique title + meta description per page
  • [ ] Open Graph tags added
  • [ ] sitemap.xml and robots.txt present
  • [ ] JSON-LD structured data added
  • [ ] Lighthouse score checked and issues fixed
  • [ ] One-command deploy set up

Real Example: My Own Portfolio

To put this into practice, here's what I did on my own portfolio, nayeem-miah.vercel.app:

  • Framework: Built with Next.js and deployed on Vercel, so I get automatic image optimization (via next/image), route-based code splitting, and edge caching out of the box.
  • Images: The banner and project screenshots are served as WebP and resized responsively through Next's built-in image pipeline instead of raw uploads.
  • SEO metadata: Every page has a unique title and description, plus full Open Graph and Twitter Card tags (og:title, og:description, og:image, twitter:card, etc.) so links preview properly when shared on social media or Slack.
  • Search engine directives: robots meta is set to index, follow with expanded image/video preview permissions, and the site is verified with Google Search Console.
  • Semantic sections: The page is broken into clear sections — About, Skills/Stack, Projects, Standards, Contact — each reachable via anchor links, which keeps navigation simple for both visitors and crawlers.
  • One-command deploy: Since it's connected to GitHub + Vercel, every push to main triggers an automatic build and deploy — no manual steps to publish an update or add a new project.

The result is a site that loads fast, shows up properly when shared, and takes about thirty seconds to update whenever I ship a new project.

Final Thoughts

Optimizing a portfolio isn't a one-time task — it's a handful of good defaults (lean stack, compressed images, semantic markup, solid meta tags) plus a workflow that makes it easy to keep improving. Get the fundamentals right once, and your site stays fast, discoverable, and painless to maintain as your work grows.

If you've optimized your own portfolio, I'd love to hear what made the biggest difference for you — drop it in the comments!

Top comments (2)

Collapse
 
bhavin-allinonetools profile image
Bhavin Sheth

One small thing that helped , was removing third-party scripts I wasn't really using. It made a bigger difference to load time than I expected, especially on mobile.

Collapse
 
nazar_boyko profile image
Nazar Boyko

The fonts line is the one spot I'd tweak, font-display: swap doesn't actually prevent layout shift, it just delays it until the real font swaps in and pushes the text around. If you want that shift gone for real, matching the fallback's metrics with size-adjust and ascent-override (or using font-display: optional) is what gets CLS close to zero. The rest of the order is spot on though, going after images first is exactly where the big wins are.