Tìm vị trí từ khóa SEO trên Google

Công cụ sau giúp xác định vị trí của các từ khóa tương ứng với danh sách các domain trên Google. Khá hữu dụng trong công cuộc làm SEO.

Công cụ này yêu cầu sử dụng script googler của Mischievous Meerkat, có thể tải bản mới nhất từ GitHub.

Googler viết bằng ngôn ngữ Python là công cụ cho phép thực hiện tìm kiếm Google từ dòng lệnh.

$ wget https://raw.githubusercontent.com/jarun/googler/master/googler -O ~/bin/googler

Mã nguồn seo.sh dưới đây sử dụng googler tìm kiếm ẩn danh để xác định vị trí tìm kiếm của từ khóa theo domain trên Google.

Thông tin kỹ thuật

Với mỗi từ khóa, seo.sh sẽ tìm kiếm ẩn danh 50 kết quả gần nhất (tương ứng với 5 trang, thiết đặt trong biến max_pages). Sau đó kiểm tra từng tên miền đầu vào xem từ khóa này với tên miền đó đang ở vị trí thứ mấy, trang bao nhiêu rồi ghi ra STDOUT dưới dạng CSV.

Nếu từ khóa / tên miền không nằm trong 50 kết quả đầu tiên thì giá trị vị trị và trang sẽ là 0.

Để đánh lừa Google Checkpoint, một khoảng thời gian đợi ngẫu nhiên sẽ chen vào giữa các lần tìm kiếm. Vì vậy nếu có nhiều từ khóa thì thời gian chờ đợi script cũng đáng kể.

Để file CSV có thể hiển thị Unicode trong Excel, một chuỗi BOM (Byte Order Mark) sẽ được ghi vào đầu file đầu ra.

~/bin/seo.sh

#!/bin/bash
# seo.sh [DOMAINS…] < [KEYWORD LIST] > [CSV FILE]
# @author: Nguyen Hong Hai
#
max_pages=5
country=vn
 
max_results=$((max_pages*10))
cwd="$(readlink -f "$(dirname "$(which "$0")")")"
googler="${cwd}/googler"
is_first=true
 
csvstr() { echo "$@" | sed -e 's/"/""/g;s/^/"/;s/$/"/'; }
 
check() #
{
    local domain="${1}"
    local url="${2}"
    echo "${url}" | grep -qE "://([[:alnum:]-]+\.)?${domain}/"
}
 
dump()
{
    local domain="${1}"
    local keyword="${2}"
    local position="${3}"
    local url="${4}"
    local title="${5}"
 
    if [ ${position} -ge 0 ]; then
        echo "${domain},$(csvstr "${keyword}"),$((position/10+1)),$((position+1)),$(csvstr ${title}),${url}"
    else
        echo "${domain},$(csvstr "${keyword}"),0,0,,"
    fi
}
 
# Print the BOM (Byte order mark)
printf '\xEF\xBB\xBF'
 
while read keyword; do
    # skip blank lines
    [ -z "${keyword}" ] && continue
 
    # random waiting time
    $is_first || sleep $((30 + RANDOM % 30))
    is_first=false
 
    exec 3< <("${googler}" -c ${country} -C -n ${max_results} --np "${keyword}")
 
    titles=()
    urls=()
    count=0
 
    # collect the heading lines & urls from the results
    while read -u 3 line; do
        count=$((count+1))
 
        if [ -z "${line}" ]; then
            count=0
        elif [ ${count} -eq 1 ]; then
            titles+=("$( echo ${line} | cut -d " " -f2- )")
        elif [ ${count} -eq 2 ]; then
            urls+=("${line}")
        fi
    done
 
    for domain in "$@"; do
        found=false
        # find the domain name in the results
        for ((i = 0; i < ${#urls[@]}; i++)); do
            if check "${domain}" "${urls[$i]}"; then
                dump "${domain}" "${keyword}" ${i} "${urls[$i]}" "${titles[$i]}"
                found=true
            fi
        done
        if ! ${found}; then
            dump "${domain}" "${keyword}" -1
        fi
    done
done

Phân quyền executable cho seo.sh.

$ chmod +x ~/bin/seo.sh

Cách sử dụng

Bước 1: Tạo một file text chứa danh sách từ khóa, mỗi từ khóa một dòng. Ví dụ

keywords.txt

công cụ seo
phần mềm seo
seo vua

Bước 2: Truyền danh sách domain và file keywords.txt vào lệnh seo.sh, chỉ định file đầu ra, ví dụ output.csv (nếu không có thì ghi ra STDOUT) để bắt đầu dò tìm.

$ seo.sh domain1.com domain2.com domain3.com < keywords.txt > output.csv

Kết quả file CSV đầu ra output.csv sẽ có format theo các cột như sau

Domain | Keyword | Position | Page | Meta Title | URL

Ví dụ một kết quả đầu ra như sau:

domain1.com,"công cụ seo",2,1,"Tiêu đề công cụ SEO",https://domain1.com/cong-cu-seo