Bỏ qua, tới nội dung
Tăng trưởng
5 phút đọc

Chọn domain cho app indie: .io.vn ở Mắt Bão hay .com

Vì sao bảy app iOS của mình dùng domain .io.vn mua ở Mắt Bão, ba bản ghi DNS để trỏ về Vercel, và những gì phải kiểm tra trước khi đưa domain vào build.

Dao Van Thuong
Mobile & Fullstack Engineer
Read in English
Ảnh bìa: chọn domain .io.vn hay .com cho app indie chạy trên Vercel
Trong bài này
  1. Bắt đầu từ vercel.app, và lúc nào thì không đủ nữa
  2. Vì sao .io.vn mà không phải .com
  3. Bản ghi DNS: A, CNAME, và chỉ vậy thôi
  4. Search Console: bản ghi TXT
  5. Một hằng cho site, một hằng cho app
  6. Rút ra

App nào mình ship cũng cần một website trước khi App Review chịu xem: trang privacy policy, terms, support, và tốt nhất là một landing giải thích app làm gì. Một thời gian dài các site đó nằm trên hostname mà Vercel tự cấp. Giờ thì cả bảy app đều có domain riêng, và tất cả đều đuôi .io.vn: lockboxy.io.vn, minivid.io.vn, ringsy.io.vn và mấy app còn lại. Trang showcase gom tất cả nằm trên domain cá nhân apps.vanthuongdao.id.vn.

Bài này kể lại đường đi đó: vì sao chọn .io.vn thay vì .com, đúng mấy bản ghi DNS mình thêm ở Mắt Bão để trỏ domain về Vercel, bản ghi cho Search Console, và hai lần sai khiến mình coi domain là một phần của app chứ không chỉ của website.

Bắt đầu từ vercel.app, và lúc nào thì không đủ nữa

Mỗi landing là một project Next.js nhỏ trên Vercel. Project mới được tặng một alias *.vercel.app, và mấy lần submit App Store đầu tiên đều trỏ vào đó. Dùng được, nhưng cái tên không phải của mình. Hồi dựng site cho app lúc đó còn tên Toolbox (giờ là Lockboxy), toolbox.vercel.app đã có người lấy trong namespace chung của Vercel, nên alias production thành toolbox-vanthuongdao.vercel.app. Linkeeper may hơn: linkeeper-landing.vercel.app còn trống. Sau đó mình chuyển vài site sang alias ngắn hơn như minivid-app.vercel.app, talkzy-app.vercel.app. URL đẹp hơn, nhưng vẫn là namespace của người khác.

Còn một vấn đề khó thấy hơn. Deployment protection của một project từng để all_except_custom_domains. Setting này khoá mọi hostname .vercel.app, kể cả alias production, sau màn đăng nhập Vercel. Nếu App Review bấm vào link privacy thì sẽ gặp trang login chứ không phải policy. Mình đổi sang chỉ bảo vệ preview. Nếu URL trên App Store Connect của bạn đang là host .vercel.app, nhớ kiểm tra setting này. Có domain riêng thì hết chuyện, vì domain riêng không bao giờ bị chặn sau màn login đó.

Vì sao .io.vn mà không phải .com

Mình cũng muốn có .com, đuôi ai cũng gõ theo phản xạ. Nhưng tên app ngắn, dễ đọc thì gần như hết sạch. Lúc kiểm tra ngày 22/09/2026, minivid.com đã có chủ từ năm 2003, minivid.app thì từ tháng 2/2026, đều là người khác. minivid.io.vn thì chưa ai delegate, tức là còn mua được. Lockboxy đã đi đúng con đường này từ tháng 7.

So sánh .io.vn và .com cho cùng một tên app
Cùng một tên, hai đuôi: cái nào thật sự còn trống

Những thứ mình cân nhắc:

.io.vn.com
Tên app ngắnvẫn cònphần lớn đã có chủ từ lâu
Gợi ra điều gìngười làm ở Việt Namtrung tính, toàn cầu
Kiểm tra còn trốngxem DNS delegation (không có RDAP)RDAP qua HTTPS
Nơi muanhà đăng ký Việt Nam như Mắt Bãođâu cũng được

Với một dev làm một mình ở TP.HCM, cái "chất Việt Nam" đó không sao, nói thật còn là điểm cộng. App được dịch ra mười ngôn ngữ, nhưng domain chỉ là chỗ đặt trang pháp lý và landing. Người dùng bấm "Privacy Policy" trong Settings không quan tâm đuôi gì. Họ chỉ cần trang mở được.

Một cái bẫy khi kiểm tra domain còn trống hay không. Máy mình bị chặn port 43, nên whois bị timeout, và timeout nhìn y hệt "đã có chủ" nếu không để ý. Với các đuôi quốc tế thì dùng RDAP qua HTTPS. .io.vn không có dịch vụ RDAP, nên mình chỉ xem tên đó đã được delegate chưa:

bash
# Không trả về NS nào → chưa ai delegate tên này
dig +short NS minivid.io.vn

Bản ghi DNS: A, CNAME, và chỉ vậy thôi

Mình mua domain ở Mắt Bão và giữ DNS ở đó luôn. Vercel có gợi ý chuyển nameserver sang họ, nhưng mình thích thêm bản ghi ngay ở nhà đăng ký hơn. Như vậy các bản ghi khác trong zone (email chẳng hạn) giữ nguyên, Vercel chỉ nhận đúng hai cái tên nó cần.

Sau khi add domain (cả apex và www) vào project Vercel, đây là các bản ghi mình thêm trong trang quản lý DNS của Mắt Bão:

dns
; zone lockboxy.io.vn ở nhà đăng ký
@     A      76.76.21.21
www   CNAME  cname.vercel-dns.com.

Bản ghi A trỏ apex về IP của Vercel. CNAME giao www cho Vercel, rồi Vercel redirect về cái nào bạn chọn làm primary. Khi Vercel thấy bản ghi, nó tự cấp chứng chỉ HTTPS. Với Lockboxy, mình chỉ coi là xong khi site mở được qua HTTPS bằng tên mới. Commit ngày 12/07/2026 ghi rõ "verified live over HTTPS", và giờ mình vẫn kiểm tra y như vậy.

Bản ghi DNS ở Mắt Bão trỏ domain về Vercel và Search Console
Toàn bộ setup: hai bản ghi cho Vercel, một cho Search Console

Ngày 01/10/2026 mình chuyển một lượt Minivid, Ringsy, Talkzy, Baton và Stampzy, cùng đúng hai bản ghi đó ở Mắt Bão, và trang showcase cũng chuyển sang subdomain id.vn trong ngày.

Search Console: bản ghi TXT

Với Google, domain mới là một site mới. Domain property trong Search Console bao luôn apex, www, cả http lẫn https. Xác minh nó bằng thêm một bản ghi nữa trong cùng zone:

dns
@     TXT    "google-site-verification=…"

Copy đúng giá trị Search Console đưa (mình không dán của mình ở đây), chờ DNS cập nhật rồi bấm Verify. Bản ghi phải nằm yên trong zone. Xoá đi thì sớm muộn property cũng mất xác minh.

Landing của Lockboxy còn hỗ trợ cách kia: meta tag cho URL-prefix property. Token được đọc từ biến môi trường chứ không nằm trong code, nên thêm hay đổi token chỉ là một setting trên Vercel, không cần commit:

ts
verification: {
  ...(process.env.GOOGLE_SITE_VERIFICATION && {
    google: process.env.GOOGLE_SITE_VERIFICATION,
  }),
},

Cùng block đó có tag msvalidate.01 của Bing. Bing quan trọng hơn bản thân Bing, vì ChatGPT search chạy trên index của nó.

Search Console chứng minh giá trị khá nhanh. Ngày 22/09/2026 nó báo Google đã bỏ qua canonical của trang chủ /vi của Lockboxy và chọn domain trần, một URL chỉ redirect. Cách sửa là khai báo hreflang x-default. Không có console thì mình đã không biết.

Một hằng cho site, một hằng cho app

Landing nào cũng có đúng một SITE_URL trong src/lib/site.ts. Canonical, hreflang, sitemap, thẻ OpenGraph, JSON-LD và file llms.txt đều lấy từ nó. Chuyển site sang domain mới chỉ là diff một dòng cộng một lần deploy:

ts
export const SITE_URL = "https://minivid.io.vn";

Phần khó là app. Mỗi app tự dựng link privacy, terms, support từ SITE_URL của riêng nó (<SITE_URL>/<lang>/<page>), và giá trị đó nằm trong binary mà người dùng giữ hàng tháng. Nên khi các landing chuyển domain ngày 01/10/2026, các app vẫn đứng yên. Link trong app vẫn trỏ về host vercel.app cũ, và host đó vẫn phục vụ đúng site đó. Đừng gỡ alias cũ khi còn build ngoài kia đang dùng nó.

Những gì thay đổi khi site chuyển sang domain mới
Landing đổi theo một lần deploy, link trong build đã ship thì không

Sai theo chiều ngược lại còn tệ hơn. Build đầu tiên của Stampzy nhét stampzy.app vào app, một domain mình chưa từng mua. Link privacy, terms, support trong build 1 dẫn vào hư không. Build 2 trỏ chúng về alias Vercel đang thật sự chạy, còn domain .io.vn thì đến sau.

Chỉ đưa domain vào build khi nó đã resolve và trả về trang qua HTTPS. Link đã nằm trong binary thì rất khó rút lại.

Portfolio của mình cũng từng chuyển y như vậy. Ban đầu nó ở vanthuongdao.vercel.app, đến tháng 4 thì URL fallback đổi thành www.vanthuongdao.id.vn. File site.ts của nó ưu tiên biến môi trường ghi đè trước, rồi đến URL production của Vercel, cuối cùng mới tới giá trị fallback cứng.

Rút ra

  • Nếu .com của tên app đã mất, .io.vn là một chỗ hợp lý cho dev indie Việt Nam. Ngắn, là của mình, và người dùng chỉ thấy nó ở trang pháp lý và landing.
  • Giữ DNS ở nhà đăng ký và thêm bản ghi: A @ 76.76.21.21, CNAME www cname.vercel-dns.com, cộng một TXT cho Search Console. Các bản ghi khác giữ nguyên.
  • Kiểm tra domain còn trống bằng RDAP, hoặc dig NS với .io.vn. Whois timeout không phải là câu trả lời.
  • Một SITE_URL cho site, một cho app. Chuyển site thoải mái, nhưng giữ mọi host cũ chạy tới khi không còn build nào dùng, và đừng bao giờ ship một domain chưa mua.

Cả bảy landing đều có link ở apps.vanthuongdao.id.vn.

  • #Domains
  • #DNS
  • #Vercel
  • #Search Console
  • #SEO
Chia sẻXLinkedInFacebook
Dao Van Thuong

Kỹ sư mobile và fullstack ở TP. Hồ Chí Minh. Mình tự xây và phát hành các app iOS indie — Lockboxy, Linkeeper, Minivid, Ringsy, Talkzy, Baton và Stampzy.