Monitorowanie pozycji w Google bez proxy jest możliwe. W zasadzie można monitorować bez proxy nawet tysiące fraz dziennie. Stworzymy właśnie taki bezpłatny skrypt do monitorowania pozycji w Google w języku php. Aby było to możliwe musimy dodatkowo skorzystać z usług serwisu 2captcha.com.
Sprawdzanie pozycji strony w Google na konkretną frazę / słowo kluczowe
Monitoring pozycji w Google można zamknąć w kilku linijkach kodu php, bez używania jakichkolwiek dodatkowych bibliotek:
1 2 3 4 5 6 7 8 9 10 11 12 13 | $fraza = 'blog seo'; $strona = 'xn--okazwoka-bpb.pl'; //czyli okazwłoka.pl $content = file_get_contents("https://www.google.pl/search?num=100&start=0&hl=pl&q=".trim(urlencode($fraza))."&gws_rd=cr,ssl&ie=UTF-8&oe=UTF-8"); preg_match_all('|<a href="/url\?q=(.+?)&|is',$content,$pozycje); $i = 1; foreach ($pozycje[1] as $p) { if (stristr($p,$strona)) { echo $pozycja = "Strona {$strona} na frazę {$fraza} ma pozycję {$i}"; break; } $i++; } if (!$pozycja) { echo 'Poza 100';} |
Zmienna $content wyświetli taką treść:
Wystarczy teraz zliczyć na której pozycji (w przykładzie za pomocą wyrażeń regularnych) pokaże się poszukiwania domena i mamy wszystko gotowe:
Proste, sprawdzanie pozycji strony na słowo kluczowe jest banalne. I to koniec? Można by tak rzec, jednak spróbuj sobie tym skryptem sprawdzić kilkadziesiąt fraz. Szybko zorientujesz się (maksymalnie po około 30 zapytaniach do wyszukiwarki), że coś się popsuło:
Oznacza to, że wyszukiwarka Google zwyczajnie zbuntowała się. Zwraca kod http 429, co oznacza, że z Twojej maszyny wyszło za dużo zapytań do wyszukiwarki. W praktyce wyszukiwarka Google zaserwowała zabezpieczenie, gdyby przejść po przekierowaniach będzie to taki wynik:
To zabezpieczenie Recaptcha v2. Wyszukiwarka Google każdego dnia musi w jakiś sposób walczyć z automatycznym odpytywaniem, są takich pewnie grube miliony na dzień, a może nawet i na godzinę. Stąd każdy program do monitorowania pozycji w Google musi jakoś omijać nałożone limity. Jakby tego było mało, co jakiś czas zabezpieczenia ulegają zmianie. Nawet niewielka może „położyć” monitoring i sprawić, że skrypt do sprawdzania pozycji w Google trzeba modyfikować.
Jak sprawdzić pozycję w Google w przypadku zablokowania IP? Można poczekać kilka-kilkanaście godzin i zapytania zostaną (albo nie) odblokowane. Ale można rozwiązać zabezpieczenie i sprawdzać pozycje dalej, bez czekania. Nie będziemy jednak implementować ręcznego rozwiązywania Captcha. Przerzucimy tą żmudną robotę na kogoś innego…
Jak ominąć limity na odpytywanie wyszukiwarki Google?
W sumie limitów tych nie da się ominąć, ale skrypt może udać człowieka, który przejdzie przez zabezpieczenia. I właśnie w tym celu zadanie rozwiązywania zabezpieczenia Recaptcha przerzucamy na serwis 2captcha.com. Po poprawnym rozwiązaniu zabezpieczeń przez serwis będzie można kontynuować wysyłanie zapytań do wyszukiwarki Google, mierzenie pozycji znowu będzie odblokowane!
Ile kosztuje automatyczne rozwiązywanie zabezpieczeń z 2captcha.com?
Za każde 1000 rozwiązań Recaptcha v2 zapłacisz 3 dolary (USD), czyli około 12 złotych. Wyszukiwarka blokuje IP średnio raz na 20-30 zapytań. W prostym przeliczeniu możesz tym sposobem odpytać wyszukiwarkę 20-30 tysięcy razy – za 12 złotych. Można więc sprawdzać nawet tysiąc fraz każdego dnia przez cały miesiąc.
Jak założyć konto i jak załadować środki w 2captcha.com?
Dla ułatwienia 2captcha.com ma przygotowaną polską wersję językową, po wejściu na stronę wystarczy przewinąć na sam dół i wybrać odpowiedni język. Niestety nie wszystkie elementy są przetłumaczone, ale da się z tym żyć.
W sumie nie ma sensu opisywać krok po kroku jak założyć konto. Formularz jest typowy i dostępny przez przycisk „Zarejestruj się”:
Załadowanie konta środkami może (choć nie powinno) sprawiać problemy. Oto proces ładowania konta krok po kroku:
1. Zaloguj się do swojego konta 2captcha.com.
2. Kliknij „Add Funds”:
3. Wybierz pierwszą opcję „PayPro”:
4. Podaj kwotę (minimum 10$) i kliknij „ADD FUNDS”:
5. Wypełnij swoje dane:
6. Wybierz formę płatności:
Jak widać do wyboru mamy kilka opcji, standardowo najbardziej przydatne będą „Karta kredytowa”, „PayPal” oraz „Przelew bankowy w czasie rzeczywistym”. Opcji karty kredytowej i PayPal nikomu nie trzeba tłumaczyć, jeśli posiada kartę kredytową lub konto PayPal. Natomiast przypadku wybrania opcji „Przelew bankowy w czasie rzeczywistym”, mamy możliwość zrobienia przelewu przez „Przelewy24.pl” lub „Trustly”:
7. Po wybraniu odpowiedniej formy płatności kliknij „Złóż zamówienie”, dokończ płatność i gotowe! Maksymalnie po kilku minutach na Twoim koncie 2captcha.com pojawią się środki (o ile nie wybrałeś opcji „Przelew bankowy”).
Skrypt do sprawdzania pozycji w Google
Wiemy już, że odblokowanie limitu zapytań do wyszukiwarki Google zrealizujemy za pomocą 2captcha.com. Skorzystanie z tej możliwości wiąże się oczywiście ze zmienieniem kodu skryptu zaprezentowanego na samym początku tego artykułu. Zapominamy o nim i budujemy nowy w oparciu o bibliotekę CURL w PHP. Żeby nie bawić się z podstawami biblioteki CURL po prostu skorzystajmy z mojej gotowej, prostej klasy, którą dołączam do skryptu (plik curl.php).
Cały skrypt do sprawdzania pozycji ma 51 linijek kodu wliczając w to komentarze (bez komentarzy jest to zaledwie 41 linii):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | require 'curl.php'; $curl = new curl(); $fraza = ($_GET['fraza']?$_GET['fraza']:'blog o pozycjonowaniu'); //szukana fraza $strona = ($_GET['strona']?$_GET['strona']:'xn--okazwoka-bpb.pl'); //szukana strona $_2captchakey = 'API_KEY'; //klucz API 2captcha.com //wyszukujemy frazę $response = $curl->get("https://www.google.pl/search?num=100&start=0&hl=pl&q=".trim(urlencode($fraza))."&gws_rd=cr,ssl&ie=UTF-8&oe=UTF-8"); if ($curl->getHttpCode() == 429) { //jeśli kod odpowiedzi jest 429, oznacza to że zapytania są zablokowane //pobieramy niezbędne dane recaptcha $sitekey = $curl->getByXpath("//div/@data-sitekey"); $skey = $curl->getByXpath("//div/@data-s"); $f_action = $curl->getByXpath("//form/@action"); $q_id = $curl->getByXpath("//input[@name='q']/@value"); $f_continue = $curl->getByXpath("//input[@name='continue']/@value"); $pageUrl = $curl->getUrl(); //wysyłam recaptcha do rozwiązania $retrieve= file_get_contents("http://2captcha.com/in.php?key=".$_2captchakey."&json=1&method=userrecaptcha&googlekey=".$sitekey[0]."&data-s=".$skey[0]."&pageurl=".$pageUrl); $first = json_decode($retrieve,true); if ($first['status']!=1) { die('Problem z wysłaniem Recaptcha do 2captcha.com'); } else { $hello = $first['request']; } //otrzymuję id z 2captcha, potrzebne do późniejszego pobrania g-recaptcha-response } //przygotowuję adres do odpytania (pobranie rozwiązania) $con="http://2captcha.com/res.php?key=".$_2captchakey."&json=1&action=get&id=".$hello; //odczekuję 23 sekundy sleep(23); //pobieram odpowiedź $getting = file_get_contents($con); $second = json_decode($getting,true); //dopóku Captcha nie jest gotowa odczekuję po 10 sekund i sprawdzam odpowiedź z 2captcha while ($second['request'] == 'CAPCHA_NOT_READY') { sleep(10); $getting = file_get_contents($con); $second = json_decode($getting,true); } $secondresult = $second['request']; //gotowe, rozwiązanie recaptcha: g-recaptcha-response //wypełniam formularz i go wysyłam $curl->referer($contenturl); $curl->setField('q',$q_id[0]); $curl->setField('continue',$f_continue[0]); $curl->setField('g-recaptcha-response',$secondresult); $curl->setField('submit',''); $curl->post('http://ipv4.google.com/sorry/index'); } //teraz sprawdzam wynik i szukam strony z pomocą wyrażeń regularnych preg_match_all('|<a href="/url\?q=(.+?)&|is',$curl->content(),$pozycje); $i = 1; foreach ($pozycje[1] as $p) { if (stristr($p,$strona)) { echo $pozycja = "Strona {$strona} na frazę {$fraza} ma pozycję {$i}"; break; } $i++; } if (!$pozycja) { echo 'Poza 100';} |
Jak używać ten monitoring?
Pobierz pliki skryptu
Pliki dostępne pod tym linkiem (archiwum zip): php_monitor_google_2captcha
Wypakuj zawartość na dysk
Podaj klucz API z 2captcha.com
Gdzie znaleźć klucz API? Otwórz panel 2captcha.com i zjedź nieco niżej, swój klucz znajdziesz w takim oknie:
Gdzie wkleić? Otwórz plik index.php za pomocą NotePad++ i podaj klucz w linii numer 6:
Upload plików na serwer
Zrób upload plików na serwer z obsługą PHP do wybranego folderu. Ewentualnie odpal pliki na swoim komputerze (np. za pomocą programów takich jak EasyPHP, XAMPP, WampServer lub podobne).
Otwórz plik index.php w przeglądarce
Zlokalizuj skrypt i otwórz go w przeglądarce (Mozilla, Opera, Chrome, IE, Safari itd.):
Jak widać za każdym razem sprawdzana jest fraza „blog o pozycjonowaniu” dla strony okazwłoka.pl. Aby to zmienić dodaj dwa parametry GET do adresu: „strona” oraz „fraza”, na przykład tak:
Dzięki takiemu rozwiązaniu bez edycji pliku można sprawdzać dowolną frazę dla dowolnej domeny.
Podsumowanie
To prosty, szybki i bezproblemowy skrypt do monitorowania pozycji, z którego każdy może dowolnie korzystać.
Normalnie odpowiedź wyszukiwarki jest bardzo szybka. Gdy skrypt będzie się dłużej wykonywał, oznaczać to będzie, że wyszukiwarka zaserwowała Recapcha2 do rozwiązania, z którym to musi się uporać serwis 2captcha.com:
Pamiętaj, że automatyczne odpytywanie wyszukiwarki Google jest sprzeczne z „Warunkami korzystania z usług Google”.
Myslisz ze dałoby rade to przerobić na sprawdzanie pozycji w wersji mobilnej np. przez manipulacje user agentem?
Oczywiście, wystarczy podać user agent w metodach get/post w curl.php
A później jeszcze napisać odpowiednie wyrażenie regularne do zliczania pozycji.
Plus za to, że udostępniasz kod, prezentujesz rozwiązanie za darmo 🙂 Kod spełnia swoje zadanie ale…
1. Skorzystałbym z biblioteki dostarczonej przez 2captcha https://github.com/2captcha/2captcha-php,
2. Nie mieszałbym języka polskiego i angielskiego w kodzie. Prawdę mówiąc nie używałbym polskiego w ogóle,
3. Może wrzuć kod na gist lub utwórz repozytorium na GitHub.
Dzięki za komentarz 🙂 , już tłumaczę:
1. Działanie skryptu przy łączeniu z 2captcha.com jest zawężone do korzystania z żądań GET, nie korzystamy tu z żadnych dodatkowych parametrów (tu zawsze idzie o rozwiązanie recaptcha2). Korzystanie z takiej biblioteki uznałem za zbędne, to byłoby jak próba ubicia muchy armatą 😉
2. Yes Sir! 😉 Próbowałem już wiele razy i zawsze ten polski się wkrada 😀
3. Nie jestem zwolennikiem wrzucania każdego kawałka kodu do gita, ale pewnie kiedyś się przekonam 🙂
3. dlatego wspomnialem o „gist” https://gist.github.com 🙂
Co daje użycie dodatkowego pliku curl.php? Czy jest on potrzebny w przypadku potrzeby korzystania z Capsta?
Plik poprawnie wypluwa moje pozycje, ale dla kilku fraz /sprawdzane ręcznie i popularnymi narzędziami/ zakłamuje o około 10 pozycji.
curl.php zawiera klasę/instrukcje i bez niego skrypt nie ruszy.
Dodaj w linii 7 przed $response komendę echo, wtedy zobaczysz czy faktycznie skrypt dobrze oblicza pozycje.
O różnicach w pozycjach na różnych urządzeniach chyba nie pisałem na blogu, ale jest informacji sporo w sieci.
jeszcze pasowałoby rozbudować o:
– wiecej fraz do sprawdzenia (lista)
– zapis do pliku
i mamy wszystko 🙂
Można to łatwo zrobić, oczywiście najlepiej byłoby z zapisem do bazy danych, ale można i na plikach.
Potrzebna do tego jest znajomość odczytu i zapisu pliku (file lub/i file_get_contents). Jedno odświeżenie to sprawdzenie jednej frazy. Kod dodany przed skrypt:
2
3
4
$licznik= file_get_contents('licznik.txt'); //najlepiej utworzyć plik z wartością 0
$_GET['fraza'] = trim($frazy[$licznik]);
if (empty($_GET['fraza'])) { die('koniec');}
I tam gdzie jest wyświetlenie pozycji dajesz zapis frazy i pozycji do pliku oraz zwiększenie o jeden wartości w pliku licznik.txt:
2
file_put_contents('pozycje.txt',$_GET['fraza'].':'.$i."\r\n",FILE_APPEND);
Testowałem wczoraj ten kod chyba coś jest nie tak z łączeniem z 2captcha pozycje są pobierane parokrotnie ok 10 razy i jest blokada na pewien okres czy u kogoś działa ten kod ?
Ten kod może już nie działać poprawnie z racji, że minęły już 2 lata. A zmiany w Google zachodzą bardzo często.
Gdy znajdę czas, to zrobię z tym skryptem, co trzeba w nim zrobić to na pewno:
1. ustawić useragent np. na:
CURLOPT_USERAGENT=>”Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36″
To można dodać w curl.php w dwóch miejscach (funkcje get i post).
2. zmienić w index.php
z:
$response = $curl->get(„https://www.google.pl/search?num=100&start=0&hl=pl&q=”.trim(urlencode($fraza)).”&gws_rd=cr,ssl&ie=UTF-8&oe=UTF-8″);
na:
$response = $curl->get(„https://www.google.com/search?client=opera&hl=pl&q=”.trim(urlencode($fraza)).”&gws_rd=cr,ssl&sourceid=opera&ie=UTF-8&oe=UTF-8&gbv=2″);
I w ciasteczkach jakoś ustawić żeby wyświetlało się po 100 wyników (ewentualnie można zostawić 10, ale wtedy monitorowane jest tylko top10).
3. w index.php przed $response = $curl->get(
dodać zapisywanie ciasteczek np.:
$curl->cookieFile(’cookies.txt’);
4.
I na koniec wyciąganie pozycji, zliczanie będzie do zmiany (wyrażenia regularne lub xpath).