Next.js SEO checklist: what I actually shipped on my own portfolio site

On this page
Most Next.js SEO guides give a list of features. This one is a list of what I actually shipped on my own portfolio, gauravsah.com.np, and what I would still verify. The site runs on a Next-compatible App Router setup, so the same patterns apply to a standard Next.js project.
I am not going to claim ranking results here. The site is young and I do not have enough data to say what each change did. What I can give you is a clear, tested checklist.
1. Metadata that is specific to every page
- A unique title and description for each route, written for a person first.
- A canonical URL on every page through the metadata
alternatesfield, so duplicate paths do not compete. - Open Graph and Twitter card tags with a real 1200 by 630 preview image.
Why it matters: titles and descriptions are the first thing a searcher sees, and canonicals prevent split signals.
2. A dynamic sitemap
My sitemap.ts builds the list of URLs in code. It includes the main pages and the case studies, and it now reads every published blog post from the CMS, so a new article appears without a rebuild. I leave out lastModified unless I have a real editorial timestamp, because a deploy date would falsely say every page just changed.

3. robots.ts
A small robots.ts allows crawling and points to the sitemap. Check it after every deploy. A stray Disallow: / is one of the most expensive mistakes in SEO.
4. Structured data (JSON-LD)

- `Person` and `WebSite` in the root layout, with my name, location (Kathmandu, Nepal) and profile links.
- `BlogPosting` on each article, with headline, author and dates.
- `Service` and `BreadcrumbList` on the startup SEO page.
I render it as JSON-LD in a script tag and escape the output. Validate with Google's Rich Results Test, and remember that structured data supports understanding but does not guarantee a rich result.
5. Content in the HTML
Search engines and AI crawlers read the HTML. I check that headings, text and links are in the server-rendered output, with one clear h1 per page, not injected after load.
6. Clean URLs and internal links
- Short, readable slugs that do not change after publishing.
- Plain
<a>links between pages so crawlers can follow them. - Each article links to related articles and to the service pages, which spreads relevance across the site.
7. llms.txt
I added a short llms.txt with a summary, contact links, pages and case studies. It costs almost nothing, but the evidence that it helps is thin, which I explain in llms.txt: does it work?.
8. Search Console and analytics
I verified the site in Google Search Console and submitted the sitemap. This gives real query and indexing data, which is what turns guesses into decisions.

9. What I would still check
- Core Web Vitals on real pages, using PageSpeed Insights and field data once there is enough traffic.
- Image sizes and alt text across the site.
- Indexing status of every new article after publication.
- Internal link gaps, using the Search Console links report.
A quick pre-launch checklist
- Unique title and description on every page.
- Canonical on every page.
sitemap.xmlreturns 200 and lists real URLs.robots.txtallows what you want crawled.- JSON-LD validates.
- One
h1per page, content visible in the HTML. - Search Console verified and sitemap submitted.
- Analytics installed and tested.
When this is the wrong approach
If you have a small brochure site and no developer, you do not need to hand-build any of this. A good plugin or platform setup can cover the basics. The advantage of building it in code is control and consistency as the site grows.
If you want an audit or a technical SEO setup for a startup site, see my services and SEO for SaaS and AI startups. For how this fits into AI search, read how to get cited by ChatGPT and Perplexity.
Stay in the loop
New guides on GTM engineering, SEO and AI search, and digital marketing in Nepal, sent when they are published. No spam.
By subscribing you agree to get emails from Gaurav Sah. Unsubscribe anytime with one reply.
Need help with this?
SEO, digital marketing and GTM systems for startups and Nepali businesses.
Start a projectCurious about something?
What are the SEO basics for a Next.js site?
A unique title, description and canonical on every page, a sitemap, a robots file, JSON-LD structured data, content in the server-rendered HTML, clean URLs with plain links, and Search Console with the sitemap submitted.
Should the sitemap use the deploy date as lastModified?
No. A deploy date falsely tells search engines every page just changed. Leave lastModified out unless you have a real editorial timestamp.
Does structured data guarantee rich results?
No. JSON-LD helps search engines understand the page, but it does not guarantee a rich result. Validate it with Google's Rich Results Test.
