DEV Community

Cover image for Xếp hạng bài cũ cần làm mới từ file xuất Search Console bằng pandas
Onic Ai
Onic Ai

Posted on Originally published at onic.vn

Xếp hạng bài cũ cần làm mới từ file xuất Search Console bằng pandas

Báo cáo Hiệu suất của Google Search Console đủ để chọn bài cũ nên tối ưu lại, nhưng lọc tay vài trăm URL rất mệt. Bài này dùng pandas trên file xuất của Search Console để xếp nhóm bài theo hai con số: lượt hiển thị và lượt nhấp, rồi tìm truy vấn mà bài chưa trả lời.

Dữ liệu đầu vào

Xuất hai file từ báo cáo Hiệu suất: tab Trang (URL, lượt nhấp, lượt hiển thị, CTR, vị trí) cho hai khoảng thời gian cùng độ dài, và nếu cần, dữ liệu truy vấn theo trang qua API hoặc lọc từng URL.

Xếp bài vào bốn nhóm

import pandas as pd

def xep_nhom(df: pd.DataFrame) -> pd.DataFrame:
    df = df.rename(columns={"Clicks": "nhap", "Impressions": "hien_thi", "Top pages": "url"})
    df["ctr"] = df["nhap"] / df["hien_thi"].clip(lower=1)
    nguong_ht = df["hien_thi"].median()
    nguong_ctr = df["ctr"].median()
    def nhom(r):
        nhieu_ht, ctr_cao = r.hien_thi >= nguong_ht, r.ctr >= nguong_ctr
        if nhieu_ht and not ctr_cao:
            return "1. Sửa tiêu đề, mô tả, phần trả lời"
        if not nhieu_ht and ctr_cao:
            return "2. Bổ sung nội dung phủ thêm truy vấn"
        if nhieu_ht and ctr_cao:
            return "Giữ, chỉ cập nhật thông tin cũ"
        return "Cân nhắc: xem lại ý định, gộp hoặc viết lại"
    df["nhom"] = df.apply(nhom, axis=1)
    return df.sort_values(["nhom", "hien_thi"], ascending=[True, False])
Enter fullscreen mode Exit fullscreen mode

Dùng trung vị của chính website làm ngưỡng thay vì con số cố định, vì CTR "bình thường" khác nhau rất nhiều giữa các ngành và loại từ khóa.

Tìm bài đang tụt

def bai_dang_tut(truoc: pd.DataFrame, sau: pd.DataFrame, ty_le=0.7) -> pd.DataFrame:
    m = truoc.merge(sau, on="url", suffixes=("_truoc", "_sau"))
    m["thay_doi"] = m["nhap_sau"] / m["nhap_truoc"].clip(lower=1)
    return m[(m["nhap_truoc"] >= 20) & (m["thay_doi"] < ty_le)].sort_values("thay_doi")
Enter fullscreen mode Exit fullscreen mode

Hai file phải là hai khoảng cùng độ dài và đúng mùa, ví dụ cùng kỳ năm trước. So tháng thấp điểm với tháng cao điểm thì kết quả sẽ đánh lừa.

Truy vấn bài chưa trả lời

import re

def truy_van_thieu(truy_van: pd.DataFrame, noi_dung_bai: str, min_hien_thi=50) -> list:
    text = noi_dung_bai.lower()
    thieu = []
    for _, r in truy_van[truy_van["hien_thi"] >= min_hien_thi].iterrows():
        tu = [t for t in re.findall(r"\w+", r["query"].lower()) if len(t) > 1]
        phu = sum(t in text for t in tu) / max(len(tu), 1)
        if phu < 0.6:
            thieu.append((r["query"], r["hien_thi"], round(phu, 2)))
    return sorted(thieu, key=lambda x: -x[1])
Enter fullscreen mode Exit fullscreen mode

Đây là heuristic thô: kiểm tra các tiếng của truy vấn có xuất hiện trong bài không. Kết quả là danh sách cho người viết đọc. Truy vấn nào đúng ý định của bài thì thêm một đoạn hoặc H3; truy vấn thuộc ý định khác là dấu hiệu cần bài riêng.

Sau khi sửa

Ghi ngày sửa, chờ ít nhất bốn tuần, chạy lại bai_dang_tut với hai khoảng trước và sau ngày sửa, lọc theo URL đã sửa. Mỗi đợt nên sửa một nhóm nhỏ để biết việc nào có tác dụng.

Sáu bước làm mới từng bài cho người viết nội dung và những thứ không nên đổi có trong bài Tối ưu Onpage cho bài viết cũ trên Onic.vn.


Bài gốc: https://onic.vn/kien-thuc/toi-uu-onpage-bai-viet-cu/

Top comments (0)