StoreFleet
Trang chủBlog › Triển khai thay đổi đồng loạt cho nhiều store Shopify

Triển khai thay đổi đồng loạt cho nhiều store Shopify

Sửa tay cùng một tweak theme trên hàng chục store Shopify là nơi lỗi ẩn mình. Cách tôi triển khai thay đổi đồng loạt từ một codebase duy nhất.

Linh Nguyen · Cập nhật

Điểm chính — AI tóm tắt
  • Sửa tay cùng một fix qua hàng chục trang admin Shopify vừa chậm, vừa tệ hơn là sai lệch âm thầm — những store bạn bỏ sót lại chính là những store bạn không bao giờ để ý
  • Cách sửa bền vững là coi thay đổi như code: một custom app bạn tự sở hữu, đẩy cùng một chỉnh sửa tới mọi store qua Admin API, chạy theo batch và có log, thay vì click qua từng admin
  • App SaaS lẫn VA thuê ngoài đều vỡ trận ở quy mô fleet — app bắt bạn chờ roadmap của vendor và trả phí theo từng store, còn VA thì đưa lại đúng cái lỗi con người mà bạn đang muốn loại bỏ
  • Sở hữu source code là thứ biến "một dev, mọi store" thành hiện thực: cùng một script chạy trên 5 hay 150 store, và bạn là người quyết khi nào thay đổi được ship
  • Đây là một pattern vận hành, không phải nút bấm thần kỳ — bạn vẫn cần dry run, kế hoạch rollback và tôn trọng rate limit của Admin API; các con số thời gian tôi nêu là ước lượng của một người vận hành, không phải benchmark

AI tổng hợp từ chính nội dung bài viết; tác giả đã soát lại.

Trong bài này
  1. Vì sao "thuê VA click qua từng store" lại làm mọi thứ tệ hơn
  2. Cái app SaaS giải quyết được 80% và khoá chặt 20% còn lại
  3. Coi rollout như code: một app, mọi store
  4. Cái này KHÔNG phải là gì

Bản thân thay đổi đó chỉ tốn của tôi bốn phút. Còn việc triển khai nó thì ngốn hết cả buổi chiều.

Chuyện nhỏ thôi — một tracking script trong theme cần đổi đúng một attribute cho phần consent. Nếu chỉ có một store, bạn mở theme editor, sửa snippet, save, xong. Lúc đó chúng tôi đang chạy một loạt store cùng lúc, và tôi làm đúng cái việc mà hầu hết người vận hành đều làm: mở từng trang admin trong một tab riêng, tìm đến đúng file, sửa đúng chỗ, save. Đến store thứ chín thì tôi không còn nhớ nổi đã làm store nào rồi. Tôi làm lại hai store cho chắc. Và gần như chắc chắn có ít nhất một store mà cái cảm giác "làm lại cho chắc" đó đã trượt, vì một tuần sau có một store lòi ra với script cũ vẫn còn chạy nguyên.

Cú sót đó chính là toàn bộ vấn đề của việc triển khai thay đổi đồng loạt cho nhiều store Shopify bằng tay. Không phải chuyện thời gian — thời gian thì khó chịu nhưng chịu được. Vấn đề là triển khai thủ công hỏng một cách âm thầm. Chẳng có gì báo lỗi. Chẳng có dòng log nào bảo "store 7 chưa được update". Cái store bị lệch cứ nằm đó, chạy hơi khác một chút, cho đến khi có thứ gì đó ở phía sau vỡ ra và bạn phải lần ngược lại. Khi bạn quản lý nhiều store Shopify từ một dashboard, phần nhìn thấy giải quyết được bài toán theo dõi — nhưng bạn vẫn phải làm cho thay đổi thực sự đáp xuống mọi store, giống hệt nhau, và biết chắc là nó đã đáp.

Vì sao "thuê VA click qua từng store" lại làm mọi thứ tệ hơn

Phản xạ đầu tiên của tôi không phải code. Mà là con người. Nếu click qua 15 trang admin là nút thắt cổ chai, thì giao cái việc click đó cho người khác. Thế là trong một thời gian, chúng tôi chạy các đợt rollout theme và config qua một VA kèm checklist viết sẵn: đây là file, đây là chỉnh sửa chính xác, làm xong store nào thì tick store đó.

Nó nhanh hơn cho tôi, nhưng khó tin tưởng hơn. Một checklist do con người thực thi qua hai chục màn hình admin gần như y hệt nhau đúng là kiểu việc mà con người làm dở nhất — màn hình trông giống nhau, sự tập trung trôi đi, và đến bước 12 của store 18 thì cú copy-paste bị lệch một chút mà không ai nhận ra. Tôi đã định nghĩa thay đổi hoàn hảo mà vẫn không đảm bảo được nó đáp xuống hoàn hảo. Tôi đang trả tiền để đưa trở lại đúng cái lỗi mình muốn loại bỏ. Đây không phải chê VA; đây là chê việc dùng sự tập trung của con người làm cơ chế nhân bản. Đánh đổi giữa thuê VA và tự xây tool vỡ ra đúng ở chỗ này: có loại việc cần phán đoán (VA rất tốt) và có loại việc thuần nhân bản (VA là công cụ sai, dù trình độ có cao đến đâu).

Cái app SaaS giải quyết được 80% và khoá chặt 20% còn lại

Điểm dừng tiếp theo, tất nhiên, là app store. Với một số loại thay đổi thì thực sự có app đẩy được lên nhiều store, và trong một thời gian có một app xử lý ổn một phần kha khá các đợt rollout theme của chúng tôi.

Bức tường tôi đâm phải không phải chất lượng, mà là độ vừa vặn. App làm đúng những gì roadmap của nó nói, trên schema mà vendor quyết định hỗ trợ, theo lịch mà vendor quyết định ship. Cái tweak cho consent-script của chúng tôi không nằm trong dạng nó xử lý được. Thế là yêu cầu đó rơi vào một hàng đợi tôi không kiểm soát, xếp sau yêu cầu của các khách hàng khác, được cân nhắc dựa trên một roadmap không phải của tôi. Và app tính phí theo từng store, nên cùng một tool đó lại đắt thêm mỗi lần chúng tôi mở một brand mới — đúng cái kiểu phí theo store cộng dồn mà tôi đã than trong bài sở hữu mã nguồn công cụ Shopify. Thuê phần rollout nghĩa là thuê luôn cái quyền được đổi ý về việc một đợt rollout rốt cuộc là gì.

Đó là khoảnh khắc logic lật ngược trong đầu tôi. Nút thắt cổ chai chưa bao giờ là "cần thêm người" hay "cần app tốt hơn". Nó là ở chỗ thay đổi đó đang nằm trong đầu tôi và trong một cái checklist, trong khi lẽ ra nó phải nằm trong code.

Coi rollout như code: một app, mọi store

Đây là cú chuyển, và nó bớt cao siêu hơn nghe qua. Một store Shopify có thể lập trình từ đầu tới cuối qua GraphQL Admin API — mà giờ Shopify coi đây là API chính thức để build lên, sau khi đã xếp REST Admin API vào diện legacy API kể từ 1 tháng 10, 2024. Theme, metafields, script tags, các giá trị script/config, dữ liệu sản phẩm, webhooks — những thứ bạn sửa tay trong admin gần như đều chạm tới được qua một lời gọi API. Điều đó nghĩa là "áp thay đổi này lên một store" có thể là một hàm. Và một hàm bạn gọi được một lần thì bạn gọi được trong một vòng lặp.

Cách dựng là một custom app — một private app bạn tự sở hữu — giữ một Admin API access token cho từng store trong fleet. Đợt rollout khi đó trở thành: viết thay đổi một lần dưới dạng script, chạy một dry run báo cáo cái sẽ thay đổi ở từng store, rồi thực thi trên toàn danh sách. Một codebase. Mọi store. Cái fix consent-script từng ngốn cả buổi chiều giờ thành một script đọc theme asset, đổi attribute, ghi lại — lặp qua token của từng store — kèm một log in ra chính xác nó đã đụng vào những store nào và before/after là gì.

Những phần thực sự quan trọng trong thực tế, học được từ việc làm sai:

Đó mới là ý nghĩa thật của "một dev, mọi store". Không phải một developer làm được chuyện bất khả thi — mà một người bảo trì một codebase có thể làm cho thay đổi đáp xuống giống hệt nhau trên 5 store hay 150 store, vì mỗi store thêm vào chỉ là một token nữa trong danh sách, không phải một buổi chiều chạy tab nữa. Chi phí của một đợt rollout thôi không còn tăng theo số lượng store. Đó là toàn bộ ý nghĩa.

Cái này KHÔNG phải là gì

Tôi muốn thành thật về hình hài của chuyện này, vì "đẩy một fix tới mọi store từ một script" nghe có thể như nút bấm thần kỳ, mà nó không phải. Bạn đang gánh lấy một codebase. Phải có người bảo trì app, xoay token, theo kịp các thay đổi version của Admin API, và — quan trọng nhất — không được xem nhẹ cái việc "chạy trên toàn bộ store". Một đợt rollout bất cẩn với code bạn sở hữu còn nguy hiểm hơn một cú click bất cẩn, vì nó nhanh hơn và rộng hơn. Chính kỷ luật (dry run, log, kế hoạch rollback, rollout theo giai đoạn lên vài store trước) mới là thứ khiến đòn bẩy này an toàn. Còn mấy con số thời gian tôi ném ra ở trên là ước lượng của một người vận hành từ chính store của chúng tôi, không phải benchmark để bạn đi trích lại với ai đó.

Nhưng với tôi thì hướng đi này chỉ có một chiều. Một khi đã cảm nhận được một đợt rollout từng là cả buổi chiều tung hứng tab co lại thành một script có log ở cuối, thì phiên bản thủ công thôi không còn chịu nổi nữa. Sở hữu source code là thứ khiến nó khả thi — bạn không thể lặp qua fleet của mình bằng một tool mà cái vòng lặp thuộc về vendor. Nếu hôm nay bạn đang dùng app thuê và đây là bức tường bạn cứ đâm vào mãi, thì việc dứt ra khỏi chúng là một dự án riêng; tôi đã viết lại cách chúng tôi tiếp cận việc chuyển từ app Shopify sang tool tự sở hữu, và đòn bẩy rollout là một trong những lý do lớn nhất khiến chúng tôi làm điều đó.

StoreFleet được xây trên đúng tiền đề này: bạn sở hữu source, nên cùng một thay đổi ship tới mọi store bạn đang chạy — và không có phí theo store khiến bạn phải chùn tay mỗi lần thêm một brand. Nếu bạn đang quản lý một fleet và triển khai thay đổi bằng tay, hãy đặt một buổi demo miễn phí ngay trên store của bạn, chúng tôi sẽ cho bạn thấy "một dev, mọi store" trông thế nào trên dữ liệu thật của bạn.

Quản lý hàng chục store Shopify trên một dashboard

Nhắn ngay trong khung chat trên trang — AI agent và đội ngũ trả lời tại chỗ — hoặc gửi email. Demo miễn phí trên chính store Shopify của bạn, chưa cần tạo tài khoản.