Tối ưu store Shopify cho AI: stack GEO, có cả llms.txt
Cách chúng tôi tối ưu store Shopify cho AI — trọn stack GEO đã triển khai: quyền truy cập crawler, JSON-LD, nội dung dễ parse, llms.txt và cách kiểm tra.
Điểm chính — AI tóm tắt
- GEO là một stack chứ không phải một cái file — quyền truy cập crawler ở tầng đáy, JSON-LD và nội dung dễ parse ở tầng giữa, llms.txt chỉ là lớp mỏng trên cùng — và tầng nào cũng vô dụng nếu tầng bên dưới đang hỏng
- robots.txt chỉ là lời mời lịch sự mà CDN hay app chặn bot có thể âm thầm phủ quyết: hãy curl trang sản phẩm với user-agent GPTBot (rồi thêm một bot thứ hai) và xác nhận nhận về 200 kèm HTML thật
- Product JSON-LD là việc GEO đáng công nhất, và schema hỏng còn phổ biến hơn schema thiếu — lỗi kinh điển là app review hay app SEO chèn thêm một block Product xung đột; chạy các template chính qua Rich Results Test
- Search Console không hiển thị lượt truy cập của AI crawler — log server hoặc CDN là nơi duy nhất thấy dấu chân của GPTBot
- Đo đếm thẳng thắn: đến tháng 7/2026 tác giả không attribute được visit nào cho llms.txt và AI referral vẫn là số lẻ làm tròn — cả stack tốn một buổi chiều, đáng làm như một khoản bảo hiểm chứ không phải một kênh
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
- Bắt đầu từ tầng đáy: AI crawler có tải nổi trang của bạn không?
- Tầng giữa: JSON-LD để engine trích dẫn mà không phải đoán
- Nội dung mà parser không phải "dịch ngược"
- Lớp trên cùng: llms.txt, đặt đúng chỗ của nó
- Bài audit mười phút tôi chạy sau mỗi lần đụng vào bất cứ thứ gì ở trên
- Tất cả những thứ này đã đem về gì, đo đếm trung thực
- Năm store biến chuyện này thành bài toán dữ liệu, không phải checklist
Tháng 6/2026 chúng tôi ra mắt storefleet.io.vn, và tôi đã làm phần GEO theo đúng... thứ tự ngược. File llms.txt lên sóng ngay tuần đầu, vì đó là thứ mọi bài viết "tối ưu cho AI" đều mở màn. Vài tuần sau tôi mới phát hiện CDN của chính mình đã âm thầm chặn GPTBot, ClaudeBot và mọi AI crawler khác suốt thời gian đó — câu chuyện muối mặt đầy đủ nằm trong bài AI SEO vs GEO cho Shopify, tôi sẽ không kể lại ở đây. Nhưng chính sai lầm đó là xương sống của bài này: tối ưu store Shopify cho AI discovery không phải là một cái file. Nó là một stack — quyền truy cập của crawler ở tầng đáy, dữ liệu có cấu trúc và nội dung dễ parse ở tầng giữa, llms.txt chỉ là lớp mỏng trên cùng — và tầng nào cũng vô dụng nếu tầng bên dưới nó đang hỏng.
Vậy nên đây là toàn bộ stack GEO đúng như chúng tôi đã triển khai trên site của mình, quy đổi sang những gì tôi sẽ làm trên năm store Shopify chúng tôi đang vận hành — kèm bước kiểm tra tôi giờ luôn chạy cho từng tầng, vì hóa ra "đã cấu hình xong" và "đang chạy thật" là hai câu rất khác nhau.
Bắt đầu từ tầng đáy: AI crawler có tải nổi trang của bạn không?
Trước schema, trước nội dung, trước bất kỳ file nào có chữ "llms" trong tên, có một câu hỏi quyết định mọi thứ còn lại: khi GPTBot request một trang sản phẩm của bạn, nó có nhận về mã 200 và HTML thật không?
File robots.txt của chúng tôi cho phép đích danh sáu AI crawler: GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot, PerplexityBot và Google-Extended. Trên store Shopify, bạn khai báo tương tự bằng cách sửa template robots.txt.liquid — Shopify cho phép tùy chỉnh, và mặc định vốn đã khá thoáng.
Đây là phần tôi học được theo cách xấu hổ nhất: robots.txt chỉ là lời mời lịch sự, còn hạ tầng của bạn có thể phủ quyết nó mà không báo trước. Thiết lập chặn bot mặc định của CDN, app firewall, app chống bot cài từ hai năm trước để xử một vụ scraping — bất kỳ thứ nào trong số đó cũng có thể đứng chắn trước store và trả lỗi cho đúng những crawler mà robots.txt vừa mời vào. Vì thế bước kiểm chứng là bắt buộc: dùng curl tải chính trang sản phẩm của bạn với user-agent của GPTBot, và xác nhận nhận về 200 kèm HTML sản phẩm thật — không phải trang challenge hay trang lỗi. Khi chúng tôi cuối cùng cũng làm việc này trên site của mình, khoảng cách giữa "cái mình cấu hình" và "cái crawler thực sự thấy" chính là toàn bộ vấn đề. Nếu bạn chỉ làm đúng một việc từ bài này, hãy làm việc đó.
Tầng giữa: JSON-LD để engine trích dẫn mà không phải đoán
Trên site nội dung của chúng tôi, tầng này là FAQ và Article JSON-LD trên mọi bài viết, kiểm tra bằng Google Rich Results Test trước khi launch. Trên store bán hàng, thứ tương đương — và thật lòng là phần việc GEO đáng giá nhất bạn có thể làm — là Product schema: tên, giá, đơn vị tiền tệ, tình trạng hàng, đánh giá nếu bạn thật sự có, cùng thông tin đổi trả và vận chuyển mà các bề mặt mua sắm ngày càng đòi hỏi. Đây là thứ cho phép mọi engine, cổ điển hay generative, nêu giá và tình trạng kho của bạn một cách chắc chắn thay vì diễn giải lại câu chữ marketing.
Tin tốt: các theme Shopify hiện đại, gồm cả Dawn, có sẵn Product JSON-LD cơ bản. Tin xấu, rút từ đợt rà soát chính các store của chúng tôi mùa xuân vừa rồi: schema hỏng phổ biến hơn schema thiếu. Kiểu hỏng kinh điển tôi gặp đi gặp lại là một app review hay app SEO chèn thêm một block Product thứ hai cạnh tranh với block của theme, khiến trang kể cho crawler hai câu chuyện khác nhau về cùng một sản phẩm. Hướng dẫn schema của Shopify nói rõ cái gì thuộc về đâu; lời khuyên thực dụng của tôi hẹp hơn: chạy một trang sản phẩm, một trang collection và một bài blog qua Rich Results Test. Sửa lỗi trước khi thêm bất cứ gì mới. Làm đúng giá, tình trạng hàng và chính sách đổi trả trước khi lo tới các trường lạ — engine không tin nổi giá của bạn thì sẽ không trích dẫn bạn, dù phần còn lại đầy đủ đến đâu.
Nội dung mà parser không phải "dịch ngược"
Chúng tôi prerender toàn bộ site thành HTML tĩnh và tự host font. Tôi chọn vậy vì tốc độ trang, nhưng nó mang lại một thứ lúc đó tôi chưa đánh giá hết: mọi crawler, AI hay không, nhận được toàn bộ nội dung từng trang mà không cần chạy một dòng JavaScript nào. Tầng thứ ba của stack chính là điều này, áp lên storefront — để phần cốt lõi của trang tồn tại dưới dạng văn bản thuần, dễ parse.
Với store Shopify, điều đó nghĩa là những việc chẳng hào nhoáng gì. Bảng size và chất liệu chỉ nằm trong ảnh thì gần như vô hình với các hệ thống này; hãy đưa thông tin vào chữ. Mô tả sản phẩm mở đầu bằng câu trả lời — nó là gì, hợp với ai, đổi trả tốn bao nhiêu — sẽ được trích xuất; mô tả mở đầu bằng thơ ca thương hiệu sẽ bị bỏ qua. Heading nói thẳng nội dung của phần đó thắng heading chơi chữ. Không có lời khuyên nào ở đây là mới, và đó chính là điểm mấu chốt: đợt dọn dẹp catalog chúng tôi làm trên các store mùa xuân vừa rồi — tag, phân loại, mô tả — vốn được duyệt như việc vệ sinh merchandising bình thường, và nó kiêm luôn vai trò giúp AI đọc hiểu, miễn phí. Cũng chính dữ liệu sản phẩm sạch đó nuôi phía "agent" của Shopify, nơi catalog được mở cho AI agent qua MCP — một công sức, mở được mấy cánh cửa.
Lớp trên cùng: llms.txt, đặt đúng chỗ của nó
Đúng, chúng tôi có ship một file: một bản đồ markdown chọn lọc các trang quan trọng, đặt ở gốc site, được build script tự sinh lại. Mất khoảng hai mươi phút làm thật (site của chúng tôi, build setup của chúng tôi — store chạy theme sẽ tốn lâu hơn), và spec llms.txt ngắn tới mức đọc xong trong một ly cà phê.
Tôi cố tình không đi vào định dạng file hay ba cách host nó trên store Shopify — redirect, edge worker, app — vì đó là một hố thỏ có trade-off thật, và bài hướng dẫn llms.txt cho store Shopify của chúng tôi đi hết con đường đó, kể cả những giới hạn cần nói thẳng. Thứ thuộc về bài này là quyết định vị trí: llms.txt đứng cuối stack, sau quyền truy cập crawler, sau schema, sau nội dung — vì nó là tầng duy nhất chưa có bằng chứng nào về hiệu quả. Nó là món rẻ nhất trong danh sách này, và cũng là món các bài chào hàng đưa lên đầu. Bạn tự rút kết luận về các bài chào hàng.
Bài audit mười phút tôi chạy sau mỗi lần đụng vào bất cứ thứ gì ở trên
Tầng nào ở trên cũng có kiểu hỏng mà nhìn dashboard không thấy, nên sau mỗi thay đổi về robots, thiết lập CDN, theme hay app, tôi chạy đúng năm bước:
- Curl một trang sản phẩm với user-agent GPTBot. Kỳ vọng: 200 và HTML thật.
- Lặp lại với user-agent thứ hai (tôi dùng ClaudeBot) — rule chặn bot thường tách theo từng bot, qua được một con không chứng minh gì cho các con còn lại.
- Rich Results Test cho một template mỗi loại vừa chỉnh.
- Mở /llms.txt trên trình duyệt; nó phải hiện ra dưới dạng văn bản thuần, không phải trang 404 có giao diện.
- Lướt log server hoặc CDN tìm user-agent AI. Phiên bản cũ của bài này lặp lại một nhận định mà giờ tôi biết là sai — rằng Search Console hiển thị lượt ghé của AI crawler. Không hề. Log của bạn là nơi duy nhất dấu chân GPTBot thực sự xuất hiện.
Mười phút, và nó đã bắt được lỗi thật cho chúng tôi hơn một lần — nhiều hơn những gì bất kỳ "GEO dashboard" nào từng chào tôi làm được.
Tất cả những thứ này đã đem về gì, đo đếm trung thực
Đầu tháng 7/2026 tôi kiểm tra lại referrer log: vẫn không thể quy một lượt truy cập nào, chứ đừng nói một đơn hàng, cho llms.txt; và referral từ AI nói chung vẫn chỉ là sai số làm tròn. Trong khi đó, kênh đo đếm được lại là một cuộc mài dũa: sitemap song ngữ EN/VI của chúng tôi khoảng 265 URL, và trên domain mới, hạn mức request-indexing của Google Search Console theo trải nghiệm của chúng tôi chỉ quanh 10–12 URL mỗi ngày (một site, một người vận hành) — riêng việc được index tử tế đã là dự án kéo dài nhiều tuần.
Giữ cả hai sự thật đó cùng lúc, chiến lược tự viết ra: toàn bộ stack GEO phía trên tốn của chúng tôi một buổi chiều cộng thói quen audit mười phút, nên tôi sẽ làm lại không do dự — như một khoản bảo hiểm, không phải một kênh tăng trưởng. Những tầng thật sự có trọng lượng, schema và nội dung sạch, vốn là thứ một store vận hành tử tế đằng nào cũng cần. Còn khoảnh khắc ai đó báo giá retainer hằng tháng cho "AI visibility" trên store Shopify, hãy hỏi họ sẽ đo bằng gì.
Năm store biến chuyện này thành bài toán dữ liệu, không phải checklist
Mọi thứ phía trên đều tính theo từng store. Giá, chính sách, tình trạng hàng khác nhau giữa các catalog, nghĩa là năm store là năm file robots, năm lần audit schema, năm file llms.txt — và năm cách để chúng âm thầm lệch khỏi nhau, điều mà trên chính đội store của chúng tôi đã xảy ra cho tới khi dữ liệu bên dưới được gom về một chỗ. Quản lý sản phẩm hàng loạt để đẩy dữ liệu, tag và metadata có cấu trúc lên mọi store cùng lúc, cộng với một dashboard đa cửa hàng để soát cả danh mục từ một màn hình, là thứ chặn được độ lệch đó. Hãy chạy bài audit phía trên trên chính catalog của bạn — các tầng dưới cùng của stack này mới là những tầng đáng giữ cho nhất quán.