اختر المنطقة
تابع Google.de عبر أوروبا، وYandex عبر رابطة الدول المستقلة، وBaidu عبر الصين. المزيج العالمي يغطي الباقي وفيه أكبر المجموعات.
تعرض محركات البحث النتائج حسب المنطقة، لذا يحتاج فاحص الترتيب إلى عنوان IP من الدولة الصحيحة لكل دفعة استعلامات. يعطي Resi Core عنوانًا منزليًا في أي من أكثر من 200 دولة مباشرة في سلسلة الاتصال، بينما تغطي الباقات غير المحدودة مع مرشح الدولة قوائم الكلمات المفتاحية الكبيرة. وقسم منفصل يتناول تتبع إجابات الذكاء الاصطناعي في Google، التي تعتمد أيضًا على الدولة والمدينة.
تتوقف المراكز على مصدر الاستعلام. على المجموعة أن تجيب عن هذا السؤال أولًا.
عناوين من الدولة التي تتابعها
Resi Core: الدولة تُكتب في اسم المستخدم؛ وفي الباقات عمود الدولة في ملف CSV
عنوان IP جديد لكل دفعة استعلامات
يغيّر Resi Core العنوان مع كل طلب، والباقات تستبدل نحو ثلث العناوين يوميًا
استعلامات متوازية تكفي لقائمة كلمات مفتاحية كبيرة
بلا حد للخيوط في Resi، ومن 500 إلى 5000 خيط في الباقات
يعمل مع الأداة التي تستخدمها أصلًا
Resi باسم المستخدم وكلمة المرور في السلسلة، والباقات بعنوان IP؛ وA-Parser وKey Collector وRank Tracker تقبل HTTP وSOCKS5
صفحة النتائج خفيفة، فيغطي الغيغابايت الواحد آلاف الاستعلامات. وينخفض سعر الغيغابايت مع حجم الطلب.
| حجم الطلب | Resi Core | Resi Prime |
|---|---|---|
| من 1 غيغابايت | $0.85 | $2.29 |
| من 10 غيغابايتوفّر 7% | $0.79 | $2.09 |
| من 50 غيغابايت | $0.72 | $1.95 |
| من 100 غيغابايت | $0.65 | $1.75 |
| من 500 غيغابايت | $0.57 | $1.55 |
| من 1000 غيغابايت | $0.49 | $1.39 |
الأسعار بالدولار الأمريكي لكل 1 غيغابايت. تشتري غيغابايتات كاملة، بدءًا من واحد.
المجمّع
توفّر 7% ($1.50) مقارنة بسعر 1 غيغابايت فأكثر
أضف 25 غيغابايت لينخفض سعر كل غيغابايت إلى $0.72
اشترِ هذه الكميةيمكنك استخدام الغيغابايتات خلال 3 أشهر من تاريخ الشراء؛ وما يتبقى بعدها يُشطب.
تابع Google.de عبر أوروبا، وYandex عبر رابطة الدول المستقلة، وBaidu عبر الصين. المزيج العالمي يغطي الباقي وفيه أكبر المجموعات.
خذ تصدير CSV وأبقِ الصفوف التي يطابق فيها عمود الدولة السوق التي تتابعها؛ يكتب لك المولّد الجاهز ملف ip:port لكل دولة.
تقبل أدوات فحص الترتيب ملف بروكسي أو رابطًا. اضبط التحديث كل 10 دقائق وستبقى القائمة محدّثة وحدها.
اضبط DOMAIN وCOUNTRY وضع كلماتك المفتاحية في keywords.txt. يستعلم السكربت من محرك البحث عبر بروكسي من تلك الدولة ويكتب مركز نطاقك في ملف CSV. أعطه مجموعة نظيفة من أداة فحص البروكسي.
#!/usr/bin/env python3
"""Search-position checker for Advanced.name proxies.
Reads the CSV proxy export, keeps one country, then asks a search engine for each
keyword through a proxy from that country and reports where your domain sits in
the results. Standard library only. Edit CONFIG and run: python3 rank.py
"""
# ================================ CONFIG ====================================
CSV_URL = "https://get.advanced.name/YOUR_LIST_ID.csv" # CSV export link from your dashboard
COUNTRY = "DE" # ISO 3166-1 alpha-2: positions are read from this country
MIN_SPEED = 3 # keep proxies with speed >= this value
DOMAIN = "example.com" # the domain whose position you track
KEYWORDS_FILE = "keywords.txt" # one keyword per line
SEARCH_URL = "https://www.bing.com/search?q={q}&count=50&setlang={cc}" # {q}=keyword, {cc}=country
OUT_FILE = "positions.csv" # keyword;position;proxy is written here
TIMEOUT = 20
# ============================================================================
import csv
import io
import re
import sys
import urllib.parse
import urllib.request
COL_IP, COL_PORT, COL_COUNTRY, COL_SPEED = 0, 1, 2, 3
UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0 Safari/537.36"
HREF = re.compile(r'href="https?://([^/"]+)', re.I)
def load_proxies():
raw = urllib.request.urlopen(CSV_URL, timeout=30).read().decode("utf-8", "replace")
pool = []
for row in csv.reader(io.StringIO(raw), delimiter=";"):
if len(row) <= COL_SPEED or not row[COL_PORT].strip().isdigit():
continue
if COUNTRY and row[COL_COUNTRY].strip().upper() != COUNTRY.upper():
continue
if int(row[COL_SPEED] or 0) < MIN_SPEED:
continue
pool.append(row[COL_IP].strip() + ":" + row[COL_PORT].strip())
return pool
def position(html, domain):
"""First place the domain shows up among the result links, or 0 if absent."""
rank, seen = 0, set()
for host in HREF.findall(html):
host = host.lower()
if "bing.com" in host or "microsoft.com" in host or host in seen:
continue
seen.add(host)
rank += 1
if host == domain or host.endswith("." + domain):
return rank
return 0
def main():
proxies = load_proxies()
if not proxies:
sys.exit("No proxies for COUNTRY=%r." % COUNTRY)
with open(KEYWORDS_FILE, encoding="utf-8") as fh:
keywords = [line.strip() for line in fh if line.strip()]
print("proxies: %d (%s), keywords: %d" % (len(proxies), COUNTRY, len(keywords)))
with open(OUT_FILE, "w", encoding="utf-8", newline="") as out:
writer = csv.writer(out, delimiter=";")
writer.writerow(["keyword", "position", "proxy"])
for i, keyword in enumerate(keywords):
proxy = proxies[i % len(proxies)]
url = SEARCH_URL.format(q=urllib.parse.quote(keyword), cc=COUNTRY.lower())
handler = urllib.request.ProxyHandler({"http": "http://" + proxy, "https": "http://" + proxy})
req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept-Language": COUNTRY.lower()})
try:
html = urllib.request.build_opener(handler).open(req, timeout=TIMEOUT).read().decode("utf-8", "replace")
pos = position(html, DOMAIN.lower())
except Exception as exc:
pos = "err: %s" % exc.__class__.__name__
writer.writerow([keyword, pos, proxy])
print("%-40s %s" % (keyword[:40], pos))
print("written %s" % OUT_FILE)
if __name__ == "__main__":
main()
الصق سطر Resi من لوحة التحكم، واضبط DOMAIN، وضع الكلمات المفتاحية في keywords.txt. يفتح السكربت النتائج في Chromium حقيقي عبر البروكسي، وينتظر اكتمال تحميل كتلة الذكاء الاصطناعي، ويكتب إلى CSV هل الكتلة موجودة، وأي نطاقات تستشهد بها، وهل نطاقك بينها. يغلق بنفسه شريط ملفات تعريف الارتباط الأوروبي، ويشير في سطر منفصل إلى رمز التحقق أو خطأ البروكسي. يغيّر Google بنية صفحاته، لذا يوجد عنوان الكتلة في LABELS.
#!/usr/bin/env python3
"""AI Overview tracker for Advanced.name residential proxies.
Opens Google results for every keyword through a Resi Core or Resi Prime line
in a real Chromium, because the AI block is drawn by JavaScript. Records
whether the page shows the AI block and which domains it cites.
Setup: pip install playwright && python -m playwright install chromium
"""
# ================================ CONFIG ====================================
PROXY = "res.advanced.name:9000:USER-type-residential-country-us:PASS" # host:port:login:password line from your dashboard
DOMAIN = "example.com" # the domain you want to see among the cited sources
KEYWORDS_FILE = "keywords.txt" # one keyword per line
SEARCH_URL = "https://www.google.com/search?q={q}&hl={hl}&gl={gl}" # {q}=keyword
HL = "en" # interface language of the results page
GL = "us" # country of the results, keep it equal to the country in the login
LABELS = "AI Overview|AI Mode" # heading text of the AI block, separated by |
CONSENT = "Reject all|Accept all" # cookie banner buttons in EU countries, in the HL language
OUT_FILE = "ai_overview.csv" # keyword;ai_block;cited;your_domain is written here
WAIT_MS = 4000 # time for the AI block to finish drawing
HEADLESS = True # set False to watch the browser
# ============================================================================
import csv
import sys
import urllib.parse
from playwright.sync_api import sync_playwright
FIND_BLOCK = """(labels) => {
const heads = [...document.querySelectorAll('h1,h2,h3,div,span')]
.filter(e => e.children.length === 0 && labels.includes(e.textContent.trim()));
if (!heads.length) return null;
let box = heads[0];
for (let i = 0; i < 8 && box.parentElement; i++) {
box = box.parentElement;
const links = [...box.querySelectorAll('a[href^="http"]')];
if (links.length >= 2 && box.innerText.length > 200) return links.map(a => new URL(a.href).hostname);
}
return [];
}"""
def proxy_of(line):
host, port, user, password = line.strip().split(":", 3)
return {"server": "http://%s:%s" % (host, port), "username": user, "password": password}
def bare(host):
host = host.lower()
return host[4:] if host.startswith("www.") else host
def main():
keywords = [k.strip() for k in open(KEYWORDS_FILE, encoding="utf-8") if k.strip()]
labels = [x.strip() for x in LABELS.split("|") if x.strip()]
consent = [x.strip() for x in CONSENT.split("|") if x.strip()]
rows = []
with sync_playwright() as pw:
browser = pw.chromium.launch(headless=HEADLESS, proxy=proxy_of(PROXY))
page = browser.new_page(locale=HL)
for kw in keywords:
url = SEARCH_URL.format(q=urllib.parse.quote_plus(kw), hl=HL, gl=GL)
try:
resp = page.goto(url, wait_until="domcontentloaded", timeout=60000)
if resp is None or resp.status >= 400:
status = "http %s" % (resp.status if resp else "none")
print("%-40s %s" % (kw[:40], status), file=sys.stderr)
rows.append([kw, status, "", ""])
continue
for name in consent:
button = page.get_by_role("button", name=name)
if button.count():
button.first.click()
page.wait_for_load_state("domcontentloaded")
break
if "/sorry/" in page.url:
print("%-40s captcha: change the session id in the login" % kw[:40], file=sys.stderr)
rows.append([kw, "captcha", "", ""])
continue
page.wait_for_timeout(WAIT_MS)
hosts = page.evaluate(FIND_BLOCK, labels)
except Exception as exc:
print("%-40s error: %s" % (kw[:40], str(exc).splitlines()[0]), file=sys.stderr)
rows.append([kw, "error", "", ""])
continue
if hosts is None:
print("%-40s no AI block" % kw[:40])
rows.append([kw, "no", "", ""])
continue
cited = sorted({bare(h) for h in hosts if "google." not in h})
mine = any(h == DOMAIN or h.endswith("." + DOMAIN) for h in cited)
print("%-40s AI block, %d sources, %s %s" % (kw[:40], len(cited), DOMAIN, "cited" if mine else "not cited"))
rows.append([kw, "yes", " ".join(cited), "yes" if mine else "no"])
browser.close()
with open(OUT_FILE, "w", encoding="utf-8", newline="") as f:
out = csv.writer(f, delimiter=";")
out.writerow(["keyword", "ai_block", "cited", "your_domain"])
out.writerows(rows)
print("saved", OUT_FILE)
if __name__ == "__main__":
main()
في A-Parser وKey Collector الصق قائمة ip:port في حقل البروكسي واضبط فاصل الفحص بحيث تمر الكلمة المفتاحية بعنوان واحد مرة في اليوم على الأكثر. تقرأ Rank Tracker والبرامج المكتبية المشابهة ملف بروكسي؛ وجّهها إلى القائمة التي يكتبها المولّد لكل دولة.
تتوقف المراكز على مصدر الاستعلام، لذا احتفظ بقائمة منفصلة لكل سوق: نسخة من الأداة لكل دولة، ولكل نسخة عناوين تلك الدولة فقط.
يستعلم السكربت أعلاه من محرك البحث عبر بروكسي الدولة ويسجل موقع نطاقك. أرسل معاملات اللغة والمنطقة الخاصة بالمحرك مع البروكسي: العنوان يحدد الدولة والمعاملات تحدد المدينة.
افحص المجموعة قبل كل تشغيل بـأداة فحص البروكسي؛ ولتجربة يدوية خفيفة تصلح قائمة البروكسي المجانية. مقدمة عن نتائج البحث الإقليمية ستُنشر في المقالات.
يضع Google كتلة ذكاء اصطناعي فوق النتائج العادية أكثر فأكثر: إجابة قصيرة مع روابط إلى المصادر. يذهب جزء من النقرات إلى هناك، لذا تحتاج أن تعرف هل دخل موقعك المصادر، وأي استعلامات لا تعرض الكتلة أصلًا. تُبنى الكتلة حسب موقع المستخدم: للاستعلام نفسه قد ترى برلين وميونخ مصادر مختلفة.
لا ترى أداة جمع النتائج العادية هذه الكتلة أبدًا: يرسمها Google بـJavaScript بعد تحميل الصفحة. تحتاج متصفحًا حقيقيًا، مثل Chromium عبر Playwright، وعنوان IP منزليًا في الدولة الصحيحة. وعناوين القوائم كثيرًا ما تصطدم برمز التحقق في هذه النتائج، ولهذا يتولى Resi Core وResi Prime العمل هنا.
للتتبع على مستوى الدولة يكفي Resi Core مع رمز الدولة في اسم المستخدم. وعندما يهتم العميل بمدينة، خذ Resi Prime مع المدينة في السلسلة وجلسة ثابتة لكل دفعة استعلامات: تخرج الدفعة كلها حينها من عنوان واحد في تلك المدينة.
شغّل قائمة الكلمات المفتاحية مرة يوميًا أو مرة أسبوعيًا: كتلة الذكاء الاصطناعي تتغير أبطأ من الترتيب العادي. لكل استعلام سجّل التاريخ، والدولة أو المدينة، وهل الكتلة موجودة، وأي نطاقات تستشهد بها، وهل نطاقك بينها. بعد شهر ترى أي صفحات يأخذها الذكاء الاصطناعي في إجابته وأيها خرج.
السكربت الثاني أعلاه يكتب هذه الحقول بالضبط إلى CSV. والسكربت الأول يتتبع الترتيب العادي في الدولة نفسها، فيتطابق التقريران حسب الاستعلام.

تتبّع نتائج الدول عبر Resi Core ونتائج المدن عبر Resi Prime، وشغّل قوائم الكلمات المفتاحية الكبيرة يوميًا على باقة غير محدودة بتكلفة أقل.
نتائج الدولالخيار الأنسب
عنوان IP منزلي من الدولة الصحيحة مع كل طلب. صفحة النتائج خفيفة، فيغطي الغيغابايت الواحد آلاف الاستعلامات.
من $0.49 للغيغابايت1 غيغابايت بسعر $0.85
نتائج المدن
المدينة والمنطقة في سلسلة الاتصال تعطيان النتائج التي يراها مستخدم من تلك المدينة.
من $1.39 للغيغابايت1 غيغابايت بسعر $2.29
قوائم كلمات مفتاحية كبيرة
عشرات الآلاف من الاستعلامات يوميًا بلا عدّاد للحركة. تختار دولة السوق بالعمود في ملف CSV.
$378 شهريًاأو $2.10 للساعة
خذ 1 غيغابايت من Resi Core، وحدد الدولة في السلسلة، وشغّل الفاحص على عناوين حية.