Hướng dẫn xây dựng Portfolio Website chuyên nghiệp với Next.js 2026

✍️ Trần Minh Trí (Chuyên gia AI & Lập trình)
⏱️ 8 phút đọcBeginner
#nextjs #portfolio #web development #frontend #react
Hướng dẫn xây dựng Portfolio Website chuyên nghiệp với Next.js 2026

1. Tại sao cần một Portfolio Website chuyên nghiệp?

Trong thị trường lao động IT cạnh tranh năm 2026, một portfolio website cá nhân không còn là lựa chọn mà là yêu cầu tối thiểu. CV giấy chỉ liệt kê kỹ năng, trong khi portfolio cho nhà tuyển dụng thấy sản phẩm thực tế bạn đã làm.

Theo khảo sát từ TopDev năm 2026, ứng viên có portfolio website được mời phỏng vấn nhiều hơn 40% so với ứng viên chỉ gửi CV.

Portfolio thể hiện: kỹ năng kỹ thuật thực tế, gu thẩm mỹ và thiết kế, khả năng hoàn thành dự án từ đầu đến cuối, và sự chuyên nghiệp và đầu tư vào thương hiệu cá nhân.

💡TIP
Bạn không cần portfolio quá hoành tráng. Một trang đẹp, load nhanh, có 3-4 dự án thực tế là đủ gây ấn tượng với nhà tuyển dụng.

2. Cài đặt dự án Next.js và cấu trúc thư mục

Bắt đầu bằng cách tạo dự án Next.js với App Router:

npx create-next-app@latest portfolio --typescript --tailwind --app

Cấu trúc thư mục khuyến nghị:

```

portfolio/

app/

layout.tsx

page.tsx

about/page.tsx

projects/page.tsx

contact/page.tsx

components/

Navbar.tsx

Footer.tsx

ProjectCard.tsx

SkillBadge.tsx

lib/

projects.ts

utils.ts

public/

images/

```

Cài thêm dependencies cần thiết:

npm install framer-motion lucide-react

📝NOTE
Next.js App Router (14+) là tiêu chuẩn mới năm 2026. Dùng App Router thay vì Pages Router vì nó hỗ trợ server components, layout nesting và SEO tốt hơn.

3. Thiết kế Navbar và Hero Section ấn tượng

Navbar sticky với hiệu ứng glassmorphism:

Dùng Tailwind CSS để tạo navbar trong suốt, có hiệu ứng mờ khi scroll:

```tsx

```

Hero Section với Framer Motion:

```tsx

initial={{ opacity: 0, y: 20 }}

animate={{ opacity: 1, y: 0 }}

transition={{ duration: 0.6 }}

className="min-h-screen flex flex-col justify-center items-center text-center px-4"

>

Hi, I'm John

Full-stack developer with 3+ years of experience building modern web applications

```

💡TIP
Dùng motion.div từ framer-motion thay vì CSS animation thuần để có hiệu ứng mượt mà và dễ kiểm soát hơn.

Thêm viewport={{ once: true }} để animation chỉ chạy một lần khi scroll vào viewport.

4. Trang Projects: Hiển thị dự án ấn tượng

Trang projects là phần quan trọng nhất của portfolio. Thiết kế grid layout với Project Card mỗi dự án:

```tsx

interface Project {

title: string;

description: string;

tags: string[];

image: string;

liveUrl?: string;

githubUrl?: string;

}

```

Mẹo tạo Project Card thu hút:

  • Dùng hình ảnh thực tế của dự án (screenshot) thay vì ảnh stock.
  • Thêm tech stack badges dưới mỗi dự án (React, Node.js, MongoDB...).
  • Nếu dự án đã deploy, thêm link live demo là điểm cộng lớn.
  • Mô tả dự án bằng action verbs và kết quả cụ thể: 'Xây dựng hệ thống đặt vé cho rạp chiếu phim, phục vụ 500+ người dùng mỗi ngày'.

Sử dụng server components để tối ưu SEO:

```tsx

// app/projects/page.tsx - Server Component

async function ProjectsPage() {

const projects = await getProjects(); // Fetch từ CMS hoặc local data

return (

{projects.map(project => (

))}

);

}

```

📝NOTE
Tất cả trang portfolio nên là Server Component mặc định. Chỉ dùng 'use client' khi thực sự cần interactivity (animation, form, state). Điều này giúp SEO tối đa và trang load siêu nhanh.

5. Tối ưu SEO và hiệu suất cho Portfolio

Portfolio của bạn cần xuất hiện trên Google khi ai đó tìm kiếm tên bạn.

Đây là cách tối ưu SEO: Metadata với Next.js:

```tsx

// app/layout.tsx

export const metadata = {

title: 'John Developer | Portfolio',

description: 'Full-stack developer specializing in React, Next.js and Node.js',

openGraph: {

title: 'John Developer | Portfolio',

description: 'Hire a passionate full-stack developer',

images: ['/images/og-image.png'],

},

}

```

Tối ưu hiệu suất:

  • Dùng Next.js Image component để tự động tối ưu ảnh: import Image from 'next/image'.
  • Static Generation (SSG) cho trang portfolio: export const dynamic = 'force-static'.
  • Lazy load các section dưới fold với Intersection Observer.
  • Bundle phân tích với next/bundle-analyzer để đảm bảo không có dependency thừa.

Google Analytics và SEO tools:

  • Thêm Google Analytics 4 hoặc Plausible (privacy-friendly).
  • Submit sitemap lên Google Search Console.
  • Cấu hình robots.txt để Google index đúng trang.
IMPORTANT
Lighthouse score nên đạt ít nhất 90 cho cả 4 chỉ số: Performance, Accessibility, Best Practices, SEO. Portfolio chậm là điểm trừ lớn với nhà tuyển dụng.

6. Thêm Blog và Contact Form

Blog Section:

Blog là cách tuyệt vời để thể hiện chuyên môn và cải thiện SEO. Dùng MDX (Markdown với JSX) để viết bài blog ngay trong Next.js:

npm install @next/mdx

```tsx

// app/blog/[slug]/page.tsx

import { MDXRemote } from 'next-mdx-remote/rsc'

export default async function BlogPost({ params }) {

const source = await getPostContent(params.slug)

return

}

```

Contact Form với Resend (miễn phí):

Không cần backend riêng, dùng API routes của Next.js:

```tsx

// app/api/contact/route.ts

import { Resend } from 'resend'

export async function POST(request: Request) {

const { name, email, message } = await request.json()

const resend = new Resend(process.env.RESEND_API_KEY)

await resend.emails.send({

from: 'portfolio@yourdomain.com',

to: 'you@email.com',

subject: New message from ${name},

html:

${message}

,

})

return Response.json({ success: true })

}

```

Resend cung cấp 100 email/tháng miễn phí, đủ cho portfolio cá nhân.

⚠️WARNING
Nhớ thêm validation cho form và rate limiting để tránh spam.

Dùng Zod để validate dữ liệu đầu vào: kiểm tra email hợp lệ, message không trống, không chứa link độc hại.

7. Deploy Portfolio lên Vercel miễn phí

Vercel là nền tảng deploy Next.js tốt nhất, hoàn toàn miễn phí cho portfolio cá nhân.

Các bước deploy:

(1) Push code lên GitHub repository.

(2) Vào vercel.com, import repository.

(3) Vercel tự động detect Next.js và cấu hình build.

(4) Set environment variables (RESEND_API_KEY) trong Vercel Dashboard.

(5) Deploy xong, Vercel cấp domain your-project.vercel.app.

Custom domain:

  • Mua domain (tên miền) từ các nhà cung cấp: Nhân Hòa, PA Vietnam, hoặc Namecheap.
  • Chi phí khoảng 150-300k/năm.
  • Trỏ domain về Vercel bằng cách thêm CNAME record trong DNS settings.

Continuous Deployment:

Mỗi lần push code lên GitHub, Vercel tự động build và deploy lại. Không cần thao tác thủ công.

💡TIP
Dùng domain tenban.dev hoặc tenban.me thay vì .com vì thường còn trống và giá rẻ hơn.

Ví dụ: huynguyen.dev hoặc minhtri.me. Domain ngắn, dễ nhớ là lợi thế khi ghi trên CV.

8. Bảo trì và cập nhật Portfolio thường xuyên

Portfolio không phải làm một lần xong. Nó cần được cập nhật thường xuyên để luôn fresh và chuyên nghiệp.

Lịch bảo trì khuyến nghị:

  • Hàng tháng: Thêm dự án mới, cập nhật kỹ năng, kiểm tra link còn hoạt động không.
  • Mỗi quý: Cập nhật blog với bài viết mới, refresh CV, cập nhật ảnh đại diện.
  • Mỗi năm: Redesign lại nếu cần, upgrade lên phiên bản Next.js mới, audit performance.

Nội dung nên thêm vào portfolio:

  • Case study chi tiết cho dự án tâm đắc nhất (vấn đề, giải pháp, kết quả).
  • Testimonial từ khách hàng hoặc đồng nghiệp.
  • Open source contributions: link GitHub repo, số star, số contributor.
  • Chứng chỉ và khóa học đã hoàn thành (nếu relevant).
IMPORTANT
Portfolio cũ hơn 1 năm với dự án outdated gây ấn tượng xấu hơn là không có portfolio. Luôn giữ ít nhất 2-3 dự án mới nhất (dưới 6 tháng) được highlight ở đầu trang.

🙋 Câu hỏi thường gặp

Có cần biết thiết kế (UI/UX) để làm portfolio đẹp không?

Không cần. Bạn có thể dùng template portfolio Next.js miễn phí từ GitHub và custom lại.

Các template phổ biến: developer-portfolio (test321), next-portfolio (PavanKG), hoặc dùng Tailwind UI component library. Quan trọng là nội dung dự án và code chất lượng, không phải thiết kế cầu kỳ.

Portfolio cần bao nhiêu dự án là đủ?

3-5 dự án chất lượng là đủ. Không cần 10+ dự án nửa vời.

Mỗi dự án nên: (1) có link GitHub public, (2) có link demo (deployed), (3) mô tả rõ công nghệ và kết quả đạt được. Một dự án hoàn chỉnh có giá trị hơn 10 dự án clone từ tutorial.

Có nên dùng CMS cho portfolio không?

Với portfolio cá nhân, không cần CMS. Dùng local data file (TypeScript) hoặc MDX cho blog là đủ. CMS (Contentful, Sanity) chỉ cần khi bạn có nhiều bài blog và cần non-technical người viết bài. Dùng CMS sẽ tăng độ phức tạp và chi phí hosting.


Kiến thức liên quan