Footer Logo
Command Palette

Search for a command to run...

GitHub
Blog

Moving My Portfolio from .me to .com: Domain Prices, GST, and the Search Console Mess

7 min read

How I moved my Next.js portfolio from namannayak.me to namannayak.com: comparing .com and .me prices across registrars, buying a .com on Cloudflare from India for ₹1,204 with GST and forex, and what went wrong with Google Search Console and Bing Webmaster Tools.

My portfolio lived at namannayak.me for a little over a year, and it was ranking #2 on Google. Then the .me came up for renewal, I compared prices, and decided to move to namannayak.com for good instead.

The code change took minutes. The search engine side took the rest of the day. This post covers both: what domains actually cost right now, what a "$10" domain costs when you pay from India, and every place the migration didn't go the way the docs suggest.

Comparing domain prices (checked October 30, 2026)

Most registrars advertise a cheap first year and make their money on renewal, so the number that matters is the renewal price. Here's what the major registrars list today:

Registrar.com first year.com renewal.me renewal
Cloudflare$10.46$10.46$16.56
Porkbun$11.08$11.08$17.27
Namecheap$11.28 (sale)$18.48$23.98

And the Indian registrars, in rupees:

Registrar.com first year.com renewal
GoDaddy India₹1 (3-year purchase required)₹1,599
Hostinger India₹1 (3-year term)₹1,499
BigRock₹749₹1,479

A few things stood out:

Buying a .com on Cloudflare from India: ₹1,204

Cloudflare bills in US dollars, so the $10.46 sticker price is not what lands on an Indian card statement. My final cost was ₹1,204. Roughly where that comes from:

  1. The domain itself: $10.46, converted at the card network's rate.
  2. GST at 18%: Cloudflare is registered for GST in India and charges it based on your billing address.
  3. Bank forex markup: most Indian cards add a 2–3.5% foreign transaction fee on international payments, plus GST on that fee.

Even with all three, ₹1,204 a year is cheaper than the pre-tax renewal price at GoDaddy, Hostinger, or BigRock, and it doesn't jump in year two. If you're an Indian developer buying a .com, Cloudflare Registrar is the one I'd recommend. Use a card with a low forex markup if you have one.

The code side: one config value

This site is a Next.js app on Vercel, and the canonical URL lives in one place:

src/config/site.ts
url: process.env.NEXT_PUBLIC_APP_URL || "https://www.namannayak.com",

That single value drives metadataBase, canonical tags, Open Graph URLs, the sitemap, and robots.txt. Changing the domain meant changing that default and adding the new domain in Vercel. I covered why this matters in my post on the Next.js SEO course. If your domain is hard-coded across twenty files, a migration like this gets painful fast.

On Cloudflare's side, the domain points to Vercel with two CNAME records (apex and www) set to DNS only (grey cloud), so Vercel handles SSL and the apex-to-www redirect itself.

Where it went wrong

1. The 301 redirect that couldn't exist

The textbook domain migration is: keep the old domain alive, 301 every old URL to the same path on the new domain, and tell Google about the move. I wrote the redirect first:

next.config.ts
async redirects() {
  return [
    {
      source: "/:path*",
      has: [{ type: "host", value: "(www\\.)?namannayak\\.me" }],
      destination: "https://www.namannayak.com/:path*",
      permanent: true,
    },
  ]
},

Then I tried to hit the old domain and got a TLS handshake failure. The .me had already expired. A redirect only works if the old domain still resolves to your server, and an expired domain resolves to nothing. I reverted the change. If your old domain is still registered, the snippet above is the right move, and you should keep it running for at least 6–12 months.

2. Google's "Change of address" was off the table

Google Search Console has a Change of address tool built for exactly this. It moves your ranking signals from the old domain to the new one. But it requires two things: both properties verified, and the old site actively 301-ing to the new one. With the .me dead, I couldn't meet the second requirement.

This was the most expensive lesson of the day: the #2 ranking doesn't transfer. namannayak.com starts as a fresh site in Google's eyes. If you're planning a move, renew the old domain for one more year just to serve redirects. It's cheaper than rebuilding rankings.

3. Setting up the new property

I added namannayak.com as a Domain property rather than a URL prefix property. A Domain property covers http, https, www and the apex in one property. It needs DNS verification, and because the DNS is on Cloudflare, Search Console offered a one-click flow that authorizes Google to add the TXT record itself. After that I submitted https://www.namannayak.com/sitemap.xml.

4. Hiding the dead site from search results

A dead site ranking at #2 means people click my name and land on an error page. Search Console's Removals tool can hide it, but only temporarily, for about six months. There is no permanent option in that tool. Permanent removal happens when Googlebot recrawls and finds the pages gone, which an expired domain does on its own. I used "Remove all URLs with this prefix" on https://namannayak.me/, which covers every www/non-www and http/https variant.

5. Bing Webmaster Tools, round two

Bing has the same shape. Its Site Move feature also needs a working redirect. Its Block URLs tool hides a URL or directory for a maximum of 90 days. I blocked the whole .me directory there too.

Adding the new site had its own friction. I skipped Bing's "import from Google Search Console" shortcut and added the site manually. That gave three verification options: an XML file, a meta tag, or a CNAME record. I went with the CNAME in Cloudflare. Two gotchas:

Once verified, I submitted the same sitemap, and Bing warned that reports can take up to 48 hours to appear.

6. Checking the output, not the config

I wanted to confirm that NEXT_PUBLIC_APP_URL wasn't overriding the new default in production. The local repo wasn't linked to the Vercel project, so I couldn't read env vars from the CLI. Instead I fetched the live sitemap.xml and robots.txt. Both said https://www.namannayak.com, which answers the question no matter what the env var says. I also confirmed the apex returns a 308 to www.

Checklist if you're doing this


The new home for my portfolio, projects, and writing is namannayak.com. I post shorter updates on X/@_naman14.

PreviousWhat the Next.js SEO Fundamentals Course Actually Taught Me
Command Palette

Search for a command to run...