Title link của Google được dựng từ đâu: kiểm tra thẻ title, H1 và og:title bằng code
Một ticket quen thuộc: "Title trên Google hiện sai, sửa giúp". Developer mở template, thấy thẻ title đúng như yêu cầu, và không hiểu vì sao Google vẫn hiện chữ khác. Câu trả lời là dòng chữ trên Google không phải thẻ tit
Một ticket quen thuộc: "Title trên Google hiện sai, sửa giúp". Developer mở template, thấy thẻ title đúng như yêu cầu, và không hiểu vì sao Google vẫn hiện chữ khác. Câu trả lời là dòng chữ trên Google không phải thẻ title, mà là title link, và Google dựng nó từ nhiều nguồn. Bài này đi qua các nguồn đó từ góc nhìn kỹ thuật, cách viết một script kiểm tra độ khớp giữa chúng, và cách xử lý trên WordPress.
Title link không phải thẻ title
Theo tài liệu của Google Search Central, Google tạo title link tự động. Thẻ <title> là nguồn chính, ngoài ra còn có:
- Tiêu đề chính hiển thị trên trang.
- Các heading như H1.
- Thẻ
og:title. - Chữ nổi bật trên trang.
- Chữ neo của các link trỏ về trang.
- Dữ liệu cấu trúc
WebSitecho tên website.
Mô hình hữu ích cho developer: Google có nhiều ứng viên và chọn ứng viên mô tả trang tốt nhất. Thẻ title càng khớp với các nguồn còn lại thì càng ít bị đổi. Vì vậy bug "title sai" thường là bug về độ nhất quán giữa nhiều thẻ, không phải bug ở một thẻ.
Các trường hợp Google viết lại
Google nêu rõ những trường hợp hay khiến title bị viết lại. Một số trong đó kiểm tra được hoàn toàn bằng code:
- Title trống một nửa, chỉ có tên website.
- Title lỗi thời: thẻ title ghi năm cũ trong khi trang ghi năm mới.
- Title không đúng nội dung trang.
- Nhiều trang dùng title gần như giống hệt nhau.
- Trang có nhiều tiêu đề nổi bật ngang nhau.
- Title khác ngôn ngữ với nội dung.
- Tên website bị lặp.
Trường hợp 1, 2, 4, 5 và 7 phát hiện được bằng script. Trường hợp 3 và 6 cần người đọc.
Script kiểm tra một trang
import re
from bs4 import BeautifulSoup
def kiem_tra_title(html: str, site_name: str, nam_hien_tai: int) -> list:
soup = BeautifulSoup(html, "html.parser")
title = soup.title.get_text(strip=True) if soup.title else ""
h1s = [h.get_text(" ", strip=True) for h in soup.find_all("h1")]
og = soup.find("meta", property="og:title")
og_title = og.get("content", "") if og else ""
canh_bao = []
if not title.replace(site_name, "").strip(" |-"):
canh_bao.append("Title trống nửa: chỉ có tên website")
if title.count(site_name) > 1:
canh_bao.append("Tên website bị lặp trong title")
if len(h1s) != 1:
canh_bao.append(f"Trang có {len(h1s)} thẻ H1")
nam = [int(y) for y in re.findall(r"\b20\d{2}\b", title)]
if nam and max(nam) < nam_hien_tai:
canh_bao.append("Title chứa năm cũ")
if og_title and og_title != title:
canh_bao.append("og:title khác thẻ title")
return canh_bao
Kiểm tra trùng title (trường hợp 4) cần chạy trên toàn bộ website: gom title của mọi URL rồi tìm nhóm trùng. Khi phát hiện trùng, đừng chỉ sửa chữ. Trùng title thường là dấu hiệu hai trang đang nhắm cùng một từ khóa, và cách đúng là gộp trang.
So khớp title với H1
SEO title và H1 không cần giống chữ. SEO title kéo người tìm vào trang, H1 xác nhận họ đã vào đúng chỗ. Nhưng hai thứ phải cùng chủ đề; title một đằng, H1 một nẻo là lý do Google hay tự đổi title. Một phép đo thô là tỷ lệ từ chung giữa hai chuỗi:
def do_trung(a: str, b: str) -> float:
x, y = set(a.lower().split()), set(b.lower().split())
return len(x & y) / max(len(x), 1)
Tỷ lệ quá thấp là tín hiệu nên cho người xem lại. Đây là heuristic, không phải quy tắc của Google.
Độ dài: đo theo pixel, không theo ký tự
Google không giới hạn độ dài thẻ title, nhưng title link bị cắt cho vừa chiều rộng màn hình. Khoảng 50–60 ký tự tiếng Việt là vừa trên phần lớn thiết bị. Một ca thực tế trên Onic.vn cho thấy giới hạn của việc đếm ký tự: title "Brand Context: Hệ Thống Ngữ Cảnh Để Đồng Bộ Thương Hiệu" dài 55 ký tự, hiện đủ trong Yoast nhưng trên Google máy tính bị cắt thành "…Đồng Bộ Thương ...". Google cắt theo độ rộng hiển thị.
Hệ quả thiết kế: đừng viết validator chặn cứng theo số ký tự. Hãy cảnh báo, và quan trọng hơn là kiểm tra từ khóa chính nằm ở đầu chuỗi, vì phần cuối là phần có thể mất.
Trên WordPress: biến động thay cho sửa tay
Với Yoast, ô SEO title nhận các biến như %%currentyear%% (năm hiện tại) và %%currentmonth%% (tháng hiện tại). Ví dụ:
SEO Title Là Gì? 10 Cách Viết Tiêu Đề Chuẩn SEO %%currentyear%%
Biến giải quyết trường hợp "title lỗi thời" ở tầng hệ thống thay vì mỗi đầu năm sửa tay hàng chục title. Trên các website tôi làm, tôi còn cho H1 hiển thị tháng và năm hiện tại, để title và H1 luôn khớp nhau. Chỉ nên làm vậy với trang mà nội dung thật sự được duy trì cập nhật. Phần viết title cho người đọc, gồm công thức 4 phần và mẫu theo ngành, có trong bài SEO title là gì trên Onic.vn.
Quy trình xử lý ticket "title sai"
- Gõ từ khóa lên Google, chép title link đang hiện.
- Lấy HTML thật của trang (không phải template), chạy script kiểm tra.
- So title với H1 và og:title.
- Kiểm tra trùng title trên toàn website.
- Sửa nguồn gốc, ghi lại title cũ, theo dõi 2–4 tuần trong Search Console.
Bước cuối quan trọng: đổi title bài đang top có thể làm thứ hạng dao động trong thời gian đầu, nên cần giữ title cũ để có thể quay lại.
Originally published by Dev.to WebDev. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.