Custom domain cho WordPress SaaS: Cách hoạt động của tenant domain mapping
Nếu đang build một hệ thống custom domains wordpress saas, sớm muộn gì khách hàng cũng sẽ hỏi bạn một câu quen thuộc: “Tôi có thể dùng tên miền riêng không?”. Cách bạn trả lời câu hỏi này sẽ định hình toàn bộ sản phẩm của bạn. Bài viết này sẽ hướng dẫn chi tiết cách tenant domain mapping hoạt động trong thực tế với plugin GrabWP Tenancy: các tùy chọn routing, cách khách hàng tự thêm domain và những gì thực sự diễn ra dưới server.
Vì sao domain quan trọng với WaaS?
Trong mô hình Website-as-a-Service (WaaS), domain chính là bộ mặt của khách hàng. Nó ảnh hưởng trực tiếp đến độ tin cậy, thương hiệu và SEO. Nếu thấy website của mình chạy trên yourbrand.com/site/acme-widgets, khách hàng sẽ coi đó chỉ là bản demo. Nhưng nếu chạy trên acmewidgets.com, họ sẽ coi đó là tài sản kinh doanh thực thụ.
Domain quan trọng vì ba lý do cốt lõi:
- Thương hiệu. Khách hàng muốn tên của họ xuất hiện trên thanh URL chứ không phải tên của bạn.
- SEO. Các công cụ tìm kiếm index nội dung theo hostname. Một wordpress multi tenant custom domain cho phép mỗi tenant xây dựng độ uy tín riêng trên kết quả tìm kiếm.
- Cảm giác sở hữu. Custom domain giúp khách hàng cảm thấy sản phẩm thực sự thuộc về họ, từ đó giảm tỷ lệ rời bỏ và giúp bạn dễ dàng đưa ra mức giá cao hơn.
Bài toán khó ở đây là làm sao cung cấp custom domain mà không biến mỗi lượt đăng ký mới thành một ticket nhờ hỗ trợ cấu hình DNS. Giải pháp là hãy bắt đầu từ những thứ đơn giản nhất và nâng cấp dần khi có nhu cầu.
Các tùy chọn routing: custom domain và path-based
GrabWP Tenancy hỗ trợ hai mô hình routing và bạn hoàn toàn có thể kết hợp cả hai trên cùng một hệ thống tenant.
Domain-based routing map trọn vẹn một custom domain vào một tenant. Khi có request gửi tới acmewidgets.com, GrabWP sẽ phân giải nó về tenant của Acme và load dữ liệu của tenant đó. Đây thường là thứ mà khách hàng ở các gói trả phí mong muốn.
Path-based routing đặt mỗi tenant dưới một path trên shared domain của bạn, ví dụ như yoursite.com/site/acme-widgets. Mô hình này không yêu cầu thay đổi gì về DNS nên cực kỳ phù hợp cho quá trình onboarding, dùng thử hoặc các gói miễn phí. Bạn có thể tùy chỉnh prefix của path thông qua hằng số GRABWP_TENANCY_PATH_PREFIX, mặc định là site. Đổi nó thành app hoặc clients để phù hợp với sản phẩm của bạn.
// wp-config.php
define( 'GRABWP_TENANCY_PATH_PREFIX', 'clients' );
// Tenant bây giờ sẽ chạy trên yoursite.com/clients/acme-widgets
Cả hai mô hình này đều đi qua cùng một lớp WaaS URL resolution tập trung, vậy nên bạn không cần phải chọn một mô hình và gắn chặt với nó mãi mãi. Một tenant hôm nay có thể chạy trên path, ngày mai hoàn toàn có thể chuyển sang custom domain.
Cách khách hàng tự thêm domain từ dashboard

Chắc hẳn bạn không muốn phải đứng ra làm trung gian cho mọi thao tác thay đổi domain. Lớp WaaS của GrabWP cung cấp cho các tenant một dashboard tự phục vụ thông qua shortcode [grabwp_waas_dashboard]. Chỉ cần chèn shortcode này vào một trang trên site điều khiển của bạn và mỗi khách hàng khi đăng nhập sẽ thấy dashboard riêng của họ.
Dashboard này có một tab Domains cho phép khách hàng quản lý các domain gắn với tenant của họ. Tại đây, khách hàng có thể đăng ký custom domain mà họ muốn trỏ về site. Khi domain được kích hoạt, hệ thống có thể gửi email thông báo để khách hàng biết quá trình mapping đã thành công.
Luồng thao tác từ phía khách hàng diễn ra như sau:
- Khách hàng mở dashboard và click vào tab Domains.
- Khách hàng nhập domain mà họ sở hữu, ví dụ như
acmewidgets.com. - Khách hàng trỏ DNS của domain đó về server của bạn (dùng bản ghi A hoặc CNAME tùy theo setup của bạn).
- Ngay khi DNS được cập nhật và chứng chỉ đã sẵn sàng, tenant sẽ tự động load trên custom domain.
Với vai trò người vận hành, bạn vẫn có thể quản lý tập trung mọi thứ qua giao diện admin hoặc file tenant mapping, rất hữu ích khi cần chỉnh sửa hàng loạt hoặc thao tác hộ khách hàng.
Những gì diễn ra trên server
Khi map một domain, GrabWP sẽ đảm nhận phần việc ở phía WordPress để đảm bảo các request phân giải về đúng tenant. Có hai khái niệm quan trọng bạn cần nắm rõ:
Routing. Cơ chế URL resolution tập trung sẽ kiểm tra hostname hoặc path từ request gửi đến và load tenant tương ứng. Cả request dạng domain-based lẫn path-based đều đi qua cùng một resolver duy nhất, giúp hành vi hệ thống luôn nhất quán dù tenant được truy cập bằng cách nào.
Đồng bộ symlink. Ở bản Pro, GrabWP sẽ tự động đồng bộ domain symlink mỗi khi có tenant được tạo mới, cập nhật hoặc xóa đi. Cơ chế này hoạt động trơn tru trên cả giao diện admin, REST API và WP-CLI, nên một wordpress saas subdomain được cấp tự động qua quy trình đăng ký cũng được đối xử y như khi bạn tạo thủ công. Bản Pro còn có một action trong phần Settings giúp bạn đồng bộ domain symlink cho toàn bộ tenant cùng lúc, rất tiện lợi sau khi chuyển server hoặc import dữ liệu hàng loạt.
Có một ranh giới bạn cần nhớ rõ: GrabWP không cấp chứng chỉ TLS hay quản lý DNS. Việc yêu cầu khách hàng trỏ domain về server của bạn và cấp chứng chỉ HTTPS là công việc tiêu chuẩn của web server, do host, reverse proxy hoặc các công cụ như Certbot phụ trách. GrabWP chỉ xử lý phần mapping và routing sau khi request đã đi tới WordPress. Phân định rõ ràng trách nhiệm này sẽ giúp bạn tránh được rất nhiều support ticket từ phía khách hàng.
Bắt đầu với shared domain và nâng cấp sau
Lộ trình onboarding tối ưu nhất là cho mọi tenant bắt đầu với một URL dạng path dùng chung và chỉ nâng cấp lên custom domain khi khách hàng có nhu cầu.
Mô hình này cực kỳ hiệu quả vì một lượt đăng ký mới tại yoursite.com/site/acme-widgets không đòi hỏi cấu hình DNS, khách hàng có thể dùng site ngay trong vài giây. Đến khi quyết định trả phí, họ chỉ việc thêm custom domain từ tab Domains.
Nếu bật tính năng alias routing trên bản Pro, quá trình nâng cấp sẽ diễn ra mượt mà: các URL chứa tenant ID cũ sẽ tự động redirect 301 sang alias URL mới, giữ nguyên cả sub-path lẫn query string. Nhờ đó, các link hiện tại, bookmark và các trang đã được index sẽ tự động chuyển sang domain mới mà không bị lỗi gãy link, đồng thời báo cho công cụ tìm kiếm biết rằng nội dung đã được chuyển đi vĩnh viễn.
Cách tiếp cận này cũng hoàn toàn ăn khớp với chiến lược giá. Bạn có thể để các site path-based ở gói miễn phí hoặc dùng thử, và biến custom domain thành tính năng độc quyền cho gói Pro với giá $9.99/month. Khách hàng sẽ tự nguyện nâng cấp khi thấy rõ giá trị, và đó thường là lúc họ muốn có domain của riêng mình.
Những lỗi thường gặp
Một số vấn đề hay lặp đi lặp lại khi các team mới bắt đầu triển khai custom domain:
- Kỳ vọng plugin sẽ cấp chứng chỉ. Plugin không làm việc này. Bạn phải cấp TLS ở tầng server hoặc proxy trước khi map domain.
- DNS chưa cập nhật xong. Một domain mới trỏ có thể mất chút thời gian để phân giải. Hãy kiểm tra lại DNS trước khi kết luận hệ thống mapping bị lỗi.
- Quên đồng bộ symlink sau khi thay đổi hàng loạt. Nếu bạn import hoặc migrate tenant mà không qua luồng tạo mới thông thường, hãy chạy action trong phần Pro Settings để đồng bộ domain symlink cho mọi tenant.
- Bỏ quên redirect 301 khi nâng cấp. Nếu không có alias routing, các link dạng path cũ có thể trở thành link chết. Hãy bật tính năng alias routing của bản Pro để các URL chứa tenant ID tự động redirect sang custom domain.
- Đổi path prefix sau khi ra mắt. Nếu bạn đổi
GRABWP_TENANCY_PATH_PREFIXsau này, toàn bộ path URL cũ sẽ bị lệch. Hãy chốt prefix của bạn ngay từ đầu.
Bắt đầu ngay
Custom domain mapping chính là điểm khác biệt giữa một bản demo và một sản phẩm thực thụ. Hãy cho khách hàng bắt đầu bằng path-based URL để onboarding tức thì, rồi để họ tự nâng cấp lên domain riêng từ tab Domains khi đã sẵn sàng. GrabWP sẽ lo phần routing ở phía WordPress và đồng bộ symlink để luôn load đúng tenant.
Bạn đã sẵn sàng cung cấp custom domain cho hệ thống WordPress SaaS của mình chưa? Hãy tìm hiểu nền tảng WaaS của GrabWP, đọc thêm bài viết về cách xây dựng WordPress SaaS không cần code hoặc tải bản miễn phí của plugin GrabWP Tenancy để thử nghiệm ngay hôm nay.
Câu hỏi thường gặp
- GrabWP có cấp chứng chỉ SSL cho custom domain của khách hàng không?
- Không. GrabWP chỉ lo phần routing và mapping ở phía WordPress để đảm bảo load đúng tenant cho từng domain. Việc cấp chứng chỉ TLS và trỏ DNS về server của bạn là công việc tiêu chuẩn của web server, thường do host, reverse proxy hoặc các công cụ như Certbot đảm nhận. Bạn chỉ cần yêu cầu khách hàng trỏ DNS về server của bạn, cấp chứng chỉ, sau đó map domain to wordpress tenant trong GrabWP.
- Một tenant có thể sử dụng nhiều domain không?
- Có. Tính năng multi-tenancy của GrabWP hỗ trợ nhiều domain trên mỗi tenant. Bạn có thể map một custom domain chính cùng các alias bổ sung thông qua giao diện admin hoặc file mapping của tenant, và cơ chế URL resolution tập trung sẽ route tất cả về cùng một tenant.
- Khách hàng có thể bắt đầu với shared domain rồi thêm custom domain sau được không?
- Được. Bạn có thể khởi tạo mọi tenant trên một URL dạng path như yoursite.com/site/client-a mà không cần đụng đến DNS, sau đó thêm custom domain khi khách hàng đã sẵn sàng. Nếu bật tính năng alias routing của bản Pro, các URL chứa tenant ID cũ sẽ được redirect 301 sang domain mới, giữ nguyên cả sub-path và query string.
Editorial standards: Our content is written by WordPress experts with hands-on multi-tenancy experience. Articles are fact-checked and regularly updated to ensure accuracy.