بخشی از هفته یک کارشناس سئو صرف جستوجوی یکییکی کلیدواژههای مهم و بررسی جایگاه سایت میشود. با پنج کلیدواژه این یک عادت است؛ با پانصد کلیدواژه، سه شهر و دو گونه دستگاه کاری ناممکن. و بررسی دستی گمراهکننده هم هست: جایگاهی که در مرورگری واردشده به حساب Google میبینید همان چیزی نیست که کاربری در Izmir روی گوشیاش میبیند.
در این نوشته توضیح میدهیم SERP (صفحه نتایج موتور جستوجو) و ردیابی رتبه چیست، چرا ردیابی دستی مقیاسپذیر نیست و چگونه با API سرچ کنسول همراه نمونهای پایتونی که کار میکند خودکارسازی را آغاز کنیم. سپس به دادهای که سرچ کنسول نمیدهد، چرایی تفاوت نتایج مبتنی بر موقعیت، بخشهای یک سامانه ردیابی و مرزهای این کار در چارچوب شرایط خدمات میپردازیم. یک نکته مهم از ابتدا: اسکرپ خودکار نتایج جستوجوی Google بدون اجازه خلاف سیاستهای Google است. این نوشته نخست مسیر رسمی و سپس منابع داده دارای مجوز را پیشنهاد میدهد.
SERP و ردیابی رتبه چیست؟
SERP (Search Engine Results Page) صفحه نتایجی است که موتور جستوجو برای یک پرسوجو برمیگرداند. SERP امروز فقط ده پیوند آبی نیست: آگهیها، نقشه و بسته کسبوکارهای محلی، نتایج خرید، کادرهای «سؤالات دیگران»، ویدیوها، تصاویر و خلاصههای تولیدشده با هوش مصنوعی همه ممکن است در یک صفحه نمایش داده شوند.
ردیابی رتبه یعنی ثبت منظم جایی که سایت شما برای کلیدواژههای مشخص در این صفحه نمایش داده میشود. هدف دانستن جایگاه یک روز نیست بلکه دیدن تغییر در طول زمان است: آیا جایگاه پس از بهروزرسانی محتوا بالا رفت، کدام صفحهها پس از بهروزرسانی الگوریتم افت کردند، آیا صفحه تازه شهر در همان شهر دیده میشود؟
معیارهای اصلی که در ردیابی رتبه دنبال میشوند:
- جایگاه: جای نتیجه در صفحه. در سرچ کنسول این مقدار میانگین همه نمایشها در یک دوره است.
- نمایش: سایت شما چند بار در نتایج نشان داده شده است.
- کلیک و نرخ کلیک (CTR): چه تعداد نمایش به بازدید تبدیل شده است.
- گونه نمایش: اینکه نتیجه پیوند عادی است، نتیجه غنی یا بسته محلی.
چرا ردیابی دستی مقیاسپذیر نیست؟
بررسی دستی رتبه به سه دلیل کند و گمراهکننده است:
- شخصیسازی. جستوجویی که هنگام ورود به حساب Google انجام شود ممکن است از جستوجوها و بازدیدهای پیشین شما اثر بپذیرد. اگر اغلب به سایت خودتان سر بزنید، ممکن است آن را بالاتر از جایگاه واقعیاش ببینید.
- موقعیت. نتایج جستوجو با کشور، شهر و برای پرسوجوهای دارای نیت محلی، محله کاربر تغییر میکنند. نتیجهای که از دفترتان در استانبول میبینید همان نتیجهای نیست که کاربری در آنکارا میگیرد.
- دستگاه و زبان. نتایج موبایل و دسکتاپ به دلیل چیدمان صفحه و ویژگیهای SERP جایگاههای متفاوتی نشان میدهند. تنظیم زبان مرورگر هم بر نتایج اثر میگذارد.
بُعد زمان را هم بیفزایید: نتایج ممکن است در طول روز تغییر کنند. بررسی یک نفر در یک صبح فقط یک ترکیب از این متغیرها را نشان میدهد. آنچه تصمیمها لازم دارند همان سنجش با همان شرایط در بازههای منظم است.
چرا با API سرچ کنسول آغاز کنیم؟
راه درست آغاز ردیابی رتبه برای سایت خودتان سرچ کنسول Google است، چون داده مستقیم از Google میآید و بر پایه نتایجی است که کاربران واقعی میبینند. گزارش Performance در رابط برای تحلیلهای کوچک کافی است؛ برای ردیابی منظم و مفصل متد searchanalytics.query از API سرچ کنسول به کار میرود.
دادهای که API میدهد:
| فیلد | توضیح |
|---|---|
بُعدها (dimensions) | date، query، page، country، device، searchAppearance و برای داده ساعتی hour |
| معیارها | clicks، impressions، ctr (0 تا 1)، position (میانگین) |
گونه جستوجو (type) | web (پیشفرض)، image، video، news، discover، googleNews |
سقف سطر (rowLimit) | تا 25,000 در هر درخواست؛ بیشتر با startRow صفحهبندی میشود |
وضعیت داده (dataState) | final (پیشفرض، نهاییشده)، all (داده تازه نهایینشده را هم دارد) |
| مجوز | دامنه webmasters.readonly کافی است |
نقاط قوت سرچ کنسول این است که داده واقعی، رایگان و به تفکیک کشور و دستگاه است. مرزهایش را هم باید بدانید: جایگاه میانگین است، داده چند روز آخر ممکن است هنوز نهایی نشده باشد و برخی پرسوجوهای بسیار کمجستوجو به دلایل حریم خصوصی از گزارشها کنار گذاشته میشوند.
چگونه داده رتبه را با API سرچ کنسول بگیریم؟
راهاندازی چهار گام دارد:
- در Google Cloud پروژهای بسازید و API سرچ کنسول را فعال کنید.
- حساب سرویس (service account) بسازید و فایل کلیدش (JSON) را دانلود کنید. این فایل را به کنترل نسخه نیفزایید.
- آدرس ایمیل حساب سرویس را بهعنوان کاربر به ویژگی سرچ کنسول خود بیفزایید. دسترسی خواندن کافی است. اگر این گام را رد کنید، API خطای مجوز برمیگرداند.
- کتابخانههای پایتون را نصب کنید:
pip install google-api-python-client google-authاسکریپت زیر داده یک بازه تاریخ را به تفکیک پرسوجو، صفحه، کشور و دستگاه میگیرد، در صفحههای 25,000 سطری میخواند و در پایگاه داده SQLite مینویسد:
import sqlite3
from datetime import date, timedelta
from google.oauth2 import service_account
from googleapiclient.discovery import build
SITE = "sc-domain:example.com" # domain property; for a URL property use "https://example.com/"
SCOPES = ["https://www.googleapis.com/auth/webmasters.readonly"]
PAGE_SIZE = 25_000
credentials = service_account.Credentials.from_service_account_file("service-account.json", scopes=SCOPES)
service = build("searchconsole", "v1", credentials=credentials)
def fetch_rows(start, end):
start_row = 0
while True:
body = {
"startDate": start.isoformat(),
"endDate": end.isoformat(),
"dimensions": ["date", "query", "page", "country", "device"],
"rowLimit": PAGE_SIZE,
"startRow": start_row,
}
response = service.searchanalytics().query(siteUrl=SITE, body=body).execute()
rows = response.get("rows", [])
yield from rows
if len(rows) < PAGE_SIZE:
break
start_row += PAGE_SIZE
db = sqlite3.connect("rankings.db")
db.execute("""
CREATE TABLE IF NOT EXISTS performance (
date TEXT, query TEXT, page TEXT, country TEXT, device TEXT,
clicks REAL, impressions REAL, ctr REAL, position REAL,
PRIMARY KEY (date, query, page, country, device)
)
""")
end = date.today() - timedelta(days=3) # the last days may not be finalised yet
start = end - timedelta(days=6)
with db:
db.executemany(
"INSERT OR REPLACE INTO performance VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
(
(*row["keys"], row["clicks"], row["impressions"], row["ctr"], row["position"])
for row in fetch_rows(start, end)
),
)
print("Row count:", db.execute("SELECT COUNT(*) FROM performance").fetchone()[0])ترتیب مقدارها در آرایه keys با ترتیب dimensions در درخواست یکی است؛ هنگام نوشتن در جدول این ترتیب را در نظر داشته باشید. به لطف INSERT OR REPLACE، گرفتن دوباره همان روز داده را بهروز میکند نه تکراری.
وقتی داده را دارید، کاربردیترین پرسوجو تغییر جایگاه میان دو دوره است. برای نمونه برای مقایسه جایگاه میانگین جستوجوهای موبایل در ترکیه در دو هفته گذشته:
WITH period AS (
SELECT query,
AVG(CASE WHEN date >= date('now', '-10 days') THEN position END) AS this_week,
AVG(CASE WHEN date < date('now', '-10 days') THEN position END) AS last_week,
SUM(impressions) AS impressions
FROM performance
WHERE country = 'tur' AND device = 'MOBILE' AND date >= date('now', '-17 days')
GROUP BY query
)
SELECT query, ROUND(last_week, 1) AS before, ROUND(this_week, 1) AS now,
ROUND(this_week - last_week, 1) AS change, impressions
FROM period
WHERE impressions > 100
ORDER BY change DESC
LIMIT 20;عدد جایگاه بزرگتر یعنی رتبه افت کرده است؛ پرسوجو کلیدواژههایی را که بیشترین افت را داشتهاند در بالا میگذارد. کدهای کشور کدهای سهحرفی ISO هستند (tur برای ترکیه).
دادهای که سرچ کنسول نمیدهد
سرچ کنسول منبعی مطمئن درباره سایت خودتان است، اما برخی نیازهای ردیابی رتبه را پوشش نمیدهد:
- جایگاه رقبا. سرچ کنسول فقط داده سایت خودتان را نشان میدهد. نمیتوانید سایت جایگاه نخست یک کلیدواژه یا صعود یک رقیب را ببینید.
- نتایج در سطح شهر. تفکیک در سطح کشور است. نمیتوانید رتبه در آنکارا را از رتبه در Izmir جدا کنید.
- نمای کامل SERP. اینکه چند آگهی، بسته محلی یا خلاصه هوش مصنوعی بالای نتیجه شما قرار دارد، یعنی چیدمان صفحه که بر کلیکپذیری اثر میگذارد، گزارش نمیشود.
- پرسوجوهایی که برایشان نمایش نمیگیرید. برای کلیدواژهای که اصلاً در صفحههای نخست نیستید تقریباً دادهای نیست.
- وضعیت لحظهای. داده با چند روز تأخیر نهایی میشود.
برای پر کردن این شکافها دو گزینه مشروع وجود دارد: سرویسهای داده SERP که داده نتایج جستوجو را با مجوز ارائه میدهند و بررسیهای دستی موقعیت که در مقیاس انسانی میمانند. گردآوری خودکار نتایج موتور جستوجو با اسکریپت خودتان به دلایلی که در ادامه آمده گزینه نیست.
چرا نتایج مبتنی بر موقعیت متفاوتاند؟
موتورهای جستوجو میسنجند که پرسوجو نیت محلی دارد یا نه. برای پرسوجوهای اطلاعاتی مانند «پروکسی چیست» نتایج در یک کشور تا حد زیادی یکساناند. برای پرسوجوهای دارای نیت محلی مانند «کلینیک دندانپزشکی»، «قفلساز»، «اجاره خودرو» یا «نزدیکترین دفتر پست» نتایج با شهر و حتی محله کاملاً تغییر میکنند.
در ترکیه این تفاوت در این حالتها برجسته است:
- کسبوکارهایی که در چند شهر شعبه دارند. اینکه صفحه هر شهر در همان شهر دیده میشود یا نه.
- کسبوکارهایی که محدوده خدمت دارند. اینکه شرکتی در ناحیههایی که خدمت میدهد در نتایج محلی ظاهر میشود یا نه.
- فروشگاههای اینترنتی سراسری. رتبه متفاوت صفحههای دسته در شهرهای بزرگ.
- جستوجو به زبانهای گوناگون. نتایجی که کاربران جستوجوکننده به انگلیسی از ترکیه میبینند در برابر جستوجوکنندگان به ترکی.
سنجش تفاوتهای سطح شهر در مقیاس بزرگ با پارامترهای موقعیت سرویسهای داده SERP انجام میشود. تأیید گاهبهگاه اینکه تعداد محدودی صفحه مهم در برخی شهرها چگونه دیده میشوند کاری در مقیاس انسانی است: کارشناس سئو خودش چند پرسوجوی حیاتی را در پروفایل مرورگری تمیز و بدون ورود به حساب با آدرس IP از شهر مربوط جستوجو میکند. برای نقاط خروج سطح شهر در ترکیه صفحه موقعیتهای ترکیه و برای شیوه راهاندازی چنین بررسیهایی صفحه راهحل پروکسی سئو را ببینید.
مقایسه منابع داده
| معیار | API سرچ کنسول | سرویس داده SERP دارای مجوز | اسکرپ موتور جستوجو با اسکریپت خودتان |
|---|---|---|---|
| داده چه کسی؟ | فقط سایت خودتان | هر پرسوجو و سایتی | هر پرسوجو و سایتی |
| منبع | داده کاربران واقعی Google | صفحههای نتیجه گردآوریشده از سوی سرویس | پرسوجوهای خودکاری که میفرستید |
| گونه جایگاه | میانگین | لحظهای، سنجش منفرد | لحظهای، سنجش منفرد |
| سطح شهر | نه، کشور | معمولاً بله | از نظر فنی ممکن |
| جایگاه رقبا | نه | بله | بله |
| کلیک و نمایش | بله | نه | نه |
| هزینه | رایگان | پولی بر اساس پرسوجو | زیرساخت و نگهداری |
| شرایط خدمات | مسیر رسمی | بسته به قرارداد سرویس | پرسوجوهای خودکار غیرمجاز به Google خلاف سیاستهاست |
| پیشنهاد ما | منبع نخست | برای داده رقبا و شهر | به کار نبرید |
بخشهای خودکارسازی
سامانه ردیابی رتبه، منبع داده هر چه باشد، چهار بخش دارد:
- فهرست کلیدواژه. برای هر کلیدواژه: صفحه هدف، اولویت، کشور و دستگاهی که باید ردیابی شود و در صورت نیاز شهر. فهرست در صفحهگسترده یا پایگاه داده نگه داشته و همراه اهداف کسبوکار بهروز میشود. پرسوجوهای پرنمایش داده سرچ کنسول را میتوان همچون نامزد به فهرست افزود.
- زمانبندی. برای داده سرچ کنسول یک اجرای روزانه کافی است؛ داده بههرحال با چند روز تأخیر نهایی میشود.
cronدر Linux، Task Scheduler در Windows یا کار زمانبندیشده در خط لوله CI را میتوان به کار برد. - ذخیرهسازی. هر سنجش همراه برچسب زمان ذخیره میشود؛ داده قدیمی حذف نمیشود، چون ارزش ردیابی در مقایسه با گذشته است. SQLite برای پروژههای کوچک، PostgreSQL یا انبار داده برای کار تیمی.
- گزارش و هشدار. گزارش هفتگی تغییرات، هشدار برای پرسوجوهایی که از آستانهای بیشتر افت میکنند و نمای گروهبندیشده بر اساس گروه صفحه (دسته، بلاگ، صفحههای شهر).
برای معنادار ماندن هشدارها، نوسان پرسوجوهای کمنمایش را فیلتر کنید؛ جابهجایی پرسوجویی با چند نمایش از جایگاه 3 به 9 ممکن است از نظر آماری معنایی نداشته باشد.
شرایط خدمات و استفاده مسئولانه
این بخش مهمترین قسمت نوشته است.
سیاستهای اسپم از Google زیر عنوان «ترافیک تولیدشده با ماشین» فرستادن پرسوجوهای خودکار به Google و اسکرپ نتایج برای بررسی رتبه بدون اجازه صریح را نقض سیاست تعریف میکنند و میگویند این کار خلاف شرایط خدمات Google هم هست. شرایط خدمات از Google هم به کار بردن ابزارهای خودکار برای دسترسی به خدماتش برخلاف دستورهای ماشینخوانی مانند robots.txt را در میان نمونههای سوءاستفاده میآورد.
در عمل یعنی:
- نتایج Google را با اسکریپت خودتان خودکار اسکرپ نکنید، حتی با استخر پروکسی. عوض کردن آدرس IP شما را بیرون از سیاست قرار نمیدهد.
- برای سایت خودتان نخست API سرچ کنسول را به کار ببرید. رسمی، رایگان و بر پایه داده کاربران واقعی است.
- برای داده رقبا و شهر سرویس داده دارای مجوز برگزینید و بررسی کنید سرویس داده را چگونه فراهم میکند و قراردادش کاربرد شما را پوشش میدهد یا نه.
- بررسیهای دستی را در مقیاس انسانی نگه دارید. کارشناسی که چند پرسوجوی مهم را با اتصالی که از شهری دیگر دیده میشود جستوجو میکند با اسکریپتی که هزاران پرسوجو خودکار میفرستد یکی نیست.
- شرایط موتورهای جستوجوی دیگر را هم بخوانید. هر موتور جستوجو، از جمله Yandex، شرایط استفاده و ابزارهای داده رسمی خودش را دارد.
چارچوب حقوقی کلی گردآوری داده از وب را در آیا وب اسکرپینگ قانونی است؟ و شیوه خواندن قواعد robots.txt را در فایل robots.txt چیست و چگونه آن را بخوانیم؟ توضیح دادهایم.
کاربردها
- گزارش هفتگی تیم محتوا: داده روزانه از API سرچ کنسول، ذخیره در SQLite، فهرست هفتگی 20 پرسوجویی که بیشترین افت و صعود را داشتهاند.
- دیده شدن محلی کسبوکار چندشهری: روند سطح کشور از سرچ کنسول، سنجش سطح شهر از سرویس SERP دارای مجوز و تأیید در مقیاس انسانی برای صفحههای مهم شهر. آدرسهای پروکسی مسکونی که از اتصالهای خانگی واقعی خارج میشوند به کارشناس اجازه میدهند این صفحهها را همانطور ببیند که کاربری در آن شهر میبیند.
- دیده شدن در موتورهای جستوجوی منطقهای: بررسی نتایج منطقهای در موتورهای جستوجوی غیر از Google؛ صفحههای مربوط راهحلهای پروکسی Google و پروکسی Yandex هستند.
- پژوهش بازار: مقایسه دیده شدن سایتهای یک صنعت در جستوجو با داده دارای مجوز. ساختار پژوهش در صفحه راهحل پژوهش بازار آمده است.
- پایش صفحههای عمومی رقبا: نه نتایج موتور جستوجو بلکه تغییرات محتوا و قیمت در سایتهای خود رقبا. این کار از robots.txt و شرایط سایتها با محدودیت نرخ پیروی میکند؛ برای پخش بار میتوان پروکسی چرخشی به کار برد. قواعد را در وب اسکرپینگ بدون مسدود شدن توضیح دادهایم.
اشتباهات رایج
- بررسی رتبه در مرورگر واردشده به حساب. شخصیسازی نتیجه را مخدوش میکند.
- لحظهای دانستن جایگاه سرچ کنسول. مقدار میانگین همه نمایشهای دوره است و ممکن است کشورها و دستگاههای گوناگون را هم درآمیزد. با فیلتر کشور و دستگاه به آن نگاه کنید.
- تصمیمگیری بر پایه داده دو سه روز آخر. داده ممکن است هنوز نهایی نشده باشد.
- فراموش کردن سقف 25,000 سطر. در سایتهای بزرگ بدون صفحهبندی داده بیصدا ناقص برمیگردد.
- واکنش به نوسان پرسوجوهای کمنمایش. برای تغییر معنادار آستانه نمایش بگذارید.
- هرگز بهروز نکردن فهرست کلیدواژه. صفحههای تازه سایت و رفتار جستوجوی در حال تغییر باید در فهرست بازتاب یابند.
- اسکرپ خودکار نتایج موتور جستوجو. خلاف سیاستهاست و راهحل ماندگاری نیست.
راهنمای انتخاب
| نیاز شما | پیشنهاد |
|---|---|
| رتبه سطح پرسوجو برای سایت خودتان | API سرچ کنسول |
| کلیک، نمایش و CTR | API سرچ کنسول |
| تفکیک کشور و دستگاه | API سرچ کنسول |
| جایگاه رقبا | سرویس داده SERP دارای مجوز |
| سنجش رتبه سطح شهر | سرویس داده SERP دارای مجوز |
| تأیید اینکه چند صفحه حیاتی از یک شهر چگونه دیده میشوند | بررسی دستی در مقیاس انسانی، IP سطح شهر |
| تغییرات محتوا و قیمت در سایت رقبا | اسکرپینگ در چارچوب قواعد، با محدودیت نرخ |
| گردآوری نتایج Google با اسکریپت خودتان | پیشنهاد نمیشود، خلاف سیاستهاست |
پرسشهای متداول
جایگاه میانگین در سرچ کنسول یعنی چه؟
میانگین بالاترین جایگاه سایت شما در همه نمایشهایی است که برای آن پرسوجو در دوره برگزیده گرفته است. چون جایگاههای دیدهشده در روزها، کشورها و دستگاههای گوناگون را درمیآمیزد، ممکن است دقیقاً با جایگاهی که یک کاربر میبیند یکی نباشد.
آیا API سرچ کنسول پولی است؟
نه، API سرچ کنسول رایگان است. سهمیه استفاده دارد؛ اسکریپت ردیابی رتبهای که روزی یک گرفتن انبوه انجام میدهد معمولاً بسیار پایینتر از آن میماند.
چرا برخی پرسوجوها در سرچ کنسول نمایش داده نمیشوند؟
برای حفظ حریم خصوصی کاربران، Google برخی پرسوجوهایی را که افراد بسیار کمی جستوجو کردهاند از گزارشها کنار میگذارد. به همین دلیل کل کلیکها در تفکیک پرسوجو ممکن است کمتر از کل عمومی دیده شود.
جایگاه رقبایم را چگونه ردیابی کنم؟
سرچ کنسول این داده را فراهم نمیکند. برای جایگاه رقبا از سرویسهایی که داده نتایج جستوجو را با مجوز ارائه میدهند استفاده میشود. هنگام انتخاب سرویس بررسی کنید داده چگونه گردآوری میشود و قرارداد کاربرد شما را پوشش میدهد یا نه.
آیا میتوانم با پروکسی بررسی خودکار رتبه در Google انجام دهم؟
سیاستهای اسپم Google فرستادن پرسوجوهای خودکار برای بررسی رتبه بدون اجازه صریح را ممنوع میکنند؛ عوض کردن آدرس IP این را تغییر نمیدهد. کاربرد مشروع پروکسی در این زمینه تأیید در مقیاس انسانی از سوی کارشناس است که چند صفحه حیاتی از شهرهای گوناگون چگونه دیده میشوند.
رتبهها را هر چند وقت یک بار ردیابی کنم؟
برای داده سرچ کنسول گرفتن روزانه کافی است؛ برای تصمیمگیری به روندهای هفتگی و ماهانه نگاه کنید. نوسانهای روزانه اغلب تغییر معناداری نشان نمیدهند.
خلاصه
بررسی دستی رتبه به دلیل شخصیسازی و تفاوتهای موقعیت و دستگاه مقیاسپذیر نیست و گمراهکننده است. خودکارسازی را با API سرچ کنسول آغاز کنید: داده را روزانه به تفکیک پرسوجو، صفحه، کشور و دستگاه بگیرید، در صفحههای 25,000 سطری بخوانید، در پایگاه داده ذخیره کنید و تغییرات میان دورهها را گزارش دهید. برای داده رقبا و شهر سرویسهای SERP دارای مجوز و برای اینکه صفحههای مهم بهطور محلی چگونه دیده میشوند بررسیهای مقیاس انسانی را به کار ببرید. اسکرپ نتایج Google با پرسوجوهای خودکار غیرمجاز خلاف سیاستهای آن است. گزینههای بررسی دستی مبتنی بر موقعیت را در خدمات پروکسی ما مییابید.




