כניסה הרשמה
מעקב דירוגים

פרוקסי למעקב דירוגים במנועי חיפוש, עם המדינה בתוך הקישור

מנועי חיפוש מציגים תוצאות לפי אזור, ולכן בודק דירוגים צריך IP מהמדינה הנכונה לכל אצוות שאילתות. Resi Core נותן כתובת ביתית בכל אחת מ-200+ מדינות ישירות במחרוזת החיבור, וחבילות ללא הגבלה עם מסנן מדינה מכסות רשימות גדולות של מילות מפתח. פרק נפרד עוסק במעקב אחרי תשובות ה-AI של Google, שתלויות גם הן במדינה ובעיר.

  • Resi Core: המדינה במחרוזת
  • IP חדש בכל בקשה
  • חבילות לרשימות גדולות של מילות מפתח
מסך על שולחן עם גרף דירוגים שעולה
מעקב דירוגים

מה בודק דירוגים צריך ומה החבילה נותנת

הדירוג תלוי במקום שממנו מגיעה השאילתה. המאגר צריך לענות על השאלה הזו קודם.

מה המשימה צריכהמה התוכניות נותנות

כתובות מהמדינה שאחריה אתם עוקבים

Resi Core: המדינה נכנסת לשם המשתמש; בחבילות יש עמודת מדינה בייצוא ה-CSV

‏IP חדש לכל קבוצת שאילתות

Resi Core מחליף כתובת בכל בקשה, והחבילות מחליפות בערך שליש מהכתובות כל יום

מספיק שאילתות במקביל לרשימת מילות מפתח גדולה

בלי מגבלת חיבורים ב-Resi, ‏500 עד 5000 חיבורים בחבילות

עובד עם הבודק שכבר יש לכם

Resi עם שם משתמש וסיסמה במחרוזת, חבילות לפי IP; A-Parser, ‏Key Collector ו-Rank Tracker מקבלים HTTP ו-SOCKS5

פרוקסי רזידנציאליים

חשבו את התעבורה לרשימת מילות המפתח שלכם

עמוד תוצאות שוקל מעט, אז ג'יגה-בייט אחד מכסה אלפי שאילתות. המחיר ל-GB יורד עם גודל ההזמנה.

מחיר פרוקסי רזידנציאליים ל-1 GB לפי גודל ההזמנה
גודל ההזמנהResi CoreResi Prime
1 GB ומעלה$0.85$2.29
10 GB ומעלהחיסכון 7%$0.79$2.09
50 GB ומעלה$0.72$1.95
100 GB ומעלה$0.65$1.75
500 GB ומעלה$0.57$1.55
1000 GB ומעלה$0.49$1.39

המחירים בדולרים אמריקאיים ל-1 GB. קונים ג'יגה-בייטים שלמים, החל מאחד.

מאגר

  • 2M+ כתובות IP ביתיות ב-200+ מדינות
  • כתובת חדשה בכל בקשה או אחת לסשן כל עוד המכשיר זמין
  • דואר מהתיבה שלכם: 465 ו-587 לשליחה, IMAP 993 ו-POP3 995 לקבלה, פורט 25 סגור
  • עד 1000 שורות בבת אחת, והרשימה מתרעננת לבד כל N דקות
סך הכול
$19.75
ל-1 GB
$0.79
מדרגה
10–49 GB

אתם חוסכים 7% ($1.50) לעומת המחיר של 1 GB ומעלה

הוסיפו 25 GB וכל ג'יגה-בייט יירד ל-$0.72

לקנות את הכמות הזו

אפשר להשתמש בג'יגה-בייטים 3 חודשים מתאריך הרכישה; מה שנשאר אחרי זה נמחק.

על הרזידנציאליים

שלושה צעדים לרשימת מילות מפתח במעקב

בחרו אזור

עקבו אחרי Google.de דרך אירופה, אחרי Yandex דרך חבר העמים ואחרי Baidu דרך סין. מיקס עולמי מכסה את השאר ויש בו את המאגרים הגדולים ביותר.

ייצוא לפי מדינה

קחו את ייצוא ה-CSV והשאירו את השורות שעמודת המדינה בהן תואמת לשוק שאתם עוקבים אחריו; המחולל המוכן כותב לכם קובץ ip:port לכל מדינה.

הזינו את הכלי

בודקי דירוגים מקבלים קובץ פרוקסי או URL. קבעו רענון כל 10 דקות והרשימה תישאר עדכנית לבד.

בודק מוכן: מיקום בתוצאות החיפוש מהמדינה שבחרתם

הגדירו DOMAIN ו-COUNTRY ושימו את מילות המפתח ב-keywords.txt. הסקריפט שואל את מנוע החיפוש דרך פרוקסי של אותה מדינה ורושם את המיקום של הדומיין שלכם ב-CSV. תנו לו מאגר נקי מבודק הפרוקסי.

CSV export link from your dashboard
ISO 3166-1 alpha-2: positions are read from this country
keep proxies with speed >= this value
the domain whose position you track
one keyword per line
{q}=keyword, {cc}=country
keyword;position;proxy is written here
הערכים מגיעים מהטופס; העתיקו או הורידו את הקובץ המוכן.
הצג את קוד הסקריפט
Python 3.8+ · rank.py
#!/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()

סקריפט: האם יש בלוק AI, והאם הוא מצטט את הדומיין שלכם

הדביקו שורת Resi מלוח הבקרה, הגדירו DOMAIN ושימו את מילות המפתח ב-keywords.txt. הסקריפט פותח את התוצאות ב-Chromium אמיתי דרך הפרוקסי, מחכה שבלוק ה-AI ייטען עד הסוף וכותב ל-CSV אם הבלוק קיים, אילו דומיינים הוא מצטט ואם שלכם ביניהם. הוא סוגר בעצמו את באנר העוגיות של האיחוד האירופי ומסמן בשורה נפרדת קפצ'ה או שגיאת פרוקסי. Google משנה את המבנה של הדפים, ולכן כותרת הבלוק נמצאת ב-LABELS.

host:port:login:password line from your dashboard
the domain you want to see among the cited sources
one keyword per line
{q}=keyword
interface language of the results page
country of the results, keep it equal to the country in the login
heading text of the AI block, separated by |
cookie banner buttons in EU countries, in the HL language
keyword;ai_block;cited;your_domain is written here
time for the AI block to finish drawing
set False to watch the browser
הערכים מגיעים מהטופס; העתיקו או הורידו את הקובץ המוכן.
הצג את קוד הסקריפט
Python 3.8+ · ai_overview.py
#!/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, Rank Tracker

ב-A-Parser וב-Key Collector הדביקו את רשימת ה-ip:port בשדה הפרוקסי וקבעו את מרווח הבדיקה כך שמילת מפתח תעבור דרך כתובת אחת לכל היותר פעם ביום. ‏Rank Tracker ותוכנות שולחניות דומות קוראות קובץ פרוקסי; כוונו אותן לרשימה שהמחולל כותב לכל מדינה.

הדירוג תלוי במקום שממנו מגיעה השאילתה, אז החזיקו רשימה נפרדת לכל שוק: מופע אחד של הכלי לכל מדינה, ולכל מופע רק כתובות של אותה מדינה.

לקרוא דירוגים בקוד שלכם

הסקריפט למעלה שואל את מנוע החיפוש דרך פרוקסי של המדינה ורושם את המקום של הדומיין שלכם. שלחו את פרמטרי השפה והאזור של המנוע יחד עם הפרוקסי: הכתובת קובעת את המדינה, הפרמטרים את העיר.

בדקו את המאגר לפני כל הרצה בבודק הפרוקסי; לבדיקה ידנית קלה מתאימה רשימת הפרוקסי החינמית. מבוא לתוצאות חיפוש אזוריות יתפרסם במאמרים.

תשובות ה-AI של Google: ‏AI Overviews ו-AI Mode

Google מציב יותר ויותר פעמים בלוק AI מעל התוצאות הרגילות: תשובה קצרה עם קישורים למקורות. חלק מהקליקים הולך לשם, ולכן צריך לדעת אם האתר שלכם נכנס למקורות ואילו שאילתות לא מציגות בלוק בכלל. הבלוק נבנה לפי מיקום המשתמש: לאותה שאילתה ברלין ומינכן יכולות לראות מקורות שונים.

סורק תוצאות רגיל אף פעם לא רואה את הבלוק הזה: Google מצייר אותו ב-JavaScript אחרי שהעמוד נטען. צריך דפדפן אמיתי, כמו Chromium דרך Playwright, ו-IP ביתי מהמדינה הנכונה. כתובות מרשימות נתקלות לעיתים קרובות בקפצ'ה בתוצאות האלה, ולכן Resi Core ו-Resi Prime עושים כאן את העבודה.

למעקב ברמת מדינה מספיק Resi Core עם קוד המדינה בשם המשתמש. כשהלקוח מתעניין בעיר, קחו Resi Prime עם העיר במחרוזת וסשן קבוע לכל אצוות שאילתות: כל האצווה יוצאת אז מכתובת אחת בעיר הזו.

מה לרשום וכל כמה זמן

הריצו את רשימת מילות המפתח פעם ביום או פעם בשבוע: בלוק ה-AI משתנה לאט יותר מהדירוגים הרגילים. לכל שאילתה רשמו את התאריך, המדינה או העיר, אם הבלוק קיים, אילו דומיינים הוא מצטט ואם שלכם ביניהם. אחרי חודש רואים אילו עמודים ה-AI לוקח לתשובה שלו ואילו יצאו.

הסקריפט השני למעלה כותב בדיוק את השדות האלה ל-CSV. הסקריפט הראשון עוקב אחרי הדירוגים הרגילים באותה מדינה, כך ששני הדוחות מתיישרים לפי שאילתה.

בפועל

הדירוגים כפי שהם נראים מכל מדינה

ארבע הגדרות שהופכות את נתוני הדירוג לאמינים

  1. שאלו על מילת מפתח מ-IP אחד לכל היותר פעם ביום; המאגר גדול מספיק כדי לפזר את העומס.
  2. שמרו רשימות IP נפרדות לכל מדינה: כתובות מעורבבות מערבבות את התוצאות.
  3. הוסיפו את פרמטרי השפה והמיקום של מנוע החיפוש; הפרוקסי קובע את המדינה, הפרמטרים קובעים את העיר.
  4. השתמשו בעמוד הפרוקסי החינמיים לבדיקה מהירה, ואז עברו ל-Resi Core או לחבילה למעקב יומי.

המשימה הזו לפי מדינה

הצגת כל המדינות
FAQ

שאלות על המשימה הזו

איזה אזור לגוגל?
Google מציג תוצאות לפי המדינה של המחפש. ב-Resi Core שימו את קוד המדינה בשם המשתמש, וכל בקשה יוצאת מ-IP ביתי במדינה הזו. בחבילות סננו את ייצוא ה-CSV לפי עמודת המדינה: Europe לאיחוד האירופי, World MIX לארצות הברית ולשאר העולם, CIS לשווקים דוברי רוסית.
איך עוקבים אחרי תשובות ה-AI של Google?
דרך Resi Core או Resi Prime ודפדפן אמיתי: JavaScript מצייר את בלוק ה-AI, ולכן בקשת HTTP רגילה אף פעם לא רואה אותו. הסקריפט בעמוד הזה פותח את התוצאות ב-Chromium ורושם אם הבלוק קיים ואם הוא מצטט את הדומיין שלכם. לערים שונות קחו Resi Prime.
כמה מילות מפתח ביום?
ל-Resi Core אין מגבלת חיבורים, אז התעבורה שקניתם קובעת את התקרה. עם 1000 חיבורים בחבילה #2 בודק מטפל בעשרות אלפי שאילתות ביום; שמרו IP אחד לכל מילת מפתח ליום.
צריך שם משתמש וסיסמה?
לא בחבילות: הגישה קשורה ל-IP של המכונה שמריצה את הבודק. Resi Core משתמש בשם המשתמש ובסיסמה מהמחרוזת ולא צריך רשימה לבנה.
איך עוקבים אחרי התוצאות של עיר מסוימת?
פרמטרי המיקום של מנוע החיפוש קובעים את העיר עם כל פרוקסי. כשהתוצאות תלויות ב-IP, קחו Resi Prime: קובעים את העיר במחרוזת החיבור.
תוכניות למשימה הזו

מה לקחת למעקב דירוגים

עקבו אחרי תוצאות לפי מדינה דרך Resi Core ולפי עיר דרך Resi Prime, והריצו רשימות גדולות של מילות מפתח כל יום בחבילה ללא הגבלה בפחות כסף.

Resi Core

תוצאות לפי מדינהההתאמה הטובה ביותר

2M+ כתובות IP · 200+ מדינות · בלי מגבלת חיבורים

IP ביתי מהמדינה הנכונה בכל בקשה. עמוד תוצאות שוקל מעט, אז ג'יגה-בייט אחד מכסה אלפי שאילתות.

החל מ- $0.49 ל-GB1 GB ב-$0.85

Resi Prime

תוצאות לפי עיר

30M+ כתובות IP · 220 מדינות · בלי מגבלת חיבורים

עיר ואזור במחרוזת החיבור נותנים את התוצאות שמשתמש מהעיר הזו רואה.

החל מ- $1.39 ל-GB1 GB ב-$2.29

פרוקסי ללא הגבלה

רשימות גדולות של מילות מפתח

חבילה #2 · מיקס עולמי · 12,000 IP · 1000 חיבורים

עשרות אלפי שאילתות ביום בלי מונה תעבורה. את מדינת השוק בוחרים לפי העמודה בייצוא ה-CSV.

$378 לחודשאו $2.10 לשעה

ראו דירוגים אמיתיים כבר מחר בבוקר

קחו 1 GB של Resi Core, קבעו את המדינה במחרוזת והריצו את הבודק על כתובות חיות.

מחירים שעה חינם לניסיון