Przejdź do treści
CranSEO
CranSEOZarejestruj się

DataForSEO vs API tylko do linków: co zmienia się w twoim potoku w R

Analiza przykładowego potoku krok po kroku. Pokazujemy, co się zmienia, co pozostaje bez zmian i co tracisz, zawężając źródło danych tylko do linków.

Zespół badawczy CranSEO ·

Dwa rozjeżdżające się tory kolejowe w zamglonym lesie symbolizujące wybory pipeline’u

Potok etap po etapie

01

Uwierzytelnij

Nasz klucz przesyłany jest jako parametr zapytania lub nagłówek Authorization Bearer. Działania bezpłatne nie wymagają uwierzytelnienia, więc pierwsze komórki notatnika mogą być uruchamiane przez każdego.

02

Zapytanie

Jedno zapytanie GET na akcję, z parametrem q dla domeny. Stronicowanie realizowane jest za pomocą page i per (10–5000), a sortowanie za pomocą sort i order.

03

Przetwórz

Każda odpowiedź to format JSON z polem ok. W odpowiedziach uwierzytelnionych dodawane są _credits, pokazujące koszt oraz pozostałe saldo.

04

Zapisz

Zapisz tibble i datę migawki razem. Wykres odświeża się około raz w miesiącu, więc data jest częścią danych.

05

Raport

Renderuj z zapisanego pliku, a nie z żywego wywołania API, dzięki czemu dokument quarto wygeneruje ten sam wykres jutro.

Co zyskujesz, a na co rezygnujesz

KwestiaAPI tylko do linkówSzerszy dostawca
ZakresBacklinki, domeny odsyłające, anchor text, nofollow, top pages, DRZwykle dodaje dane SERP i słów kluczowych
RozliczenieZa każde wywołanie, 1 kredyt = $0.0001, bez subskrypcjiSprawdź własną listę cen
ŚwieżośćOkoło miesięczne odświeżanieSprawdź własną dokumentację
Wiersze na wywołanieDo 1000, rozliczane jednorazowoZależy od endpointu
Sygnały błędówHTTP 401 nieprawidłowy klucz, HTTP 402 brak środkówZależy
Żuraw podnoszący belkę stalową bez trudu versus małe narzędzie mające trudności ze wskazaniem efektywności

Błąd, który kosztuje najwięcej w tego typu potoku

Większość potoków zawodzi z powodu kosztów, a nie kodu. Pętla wywołująca endpoint raz dla każdego wierszam zamienia tani proces w drogi.

W CranSEO koszt wywołania jest taki sam dla 10 wierszy czy 1000, więc zasada się odwraca: żądaj największej dostępnej strony. Ustaw per na 1000, sortuj według potrzeb i przestań paginować, gdy pytanie zostanie odpowiedziane.

Głęboka paginacja jest ograniczona do 50 000 wierszy, co jest funkcją dla analityków skłonnych do pobrania wszystkiego. Jeśli domena ma więcej linków niż ta liczba, prawdopodobnie wolisz toppages lub anchors.

Porównaj wydatki swojej starej pętli z wersją jednokrotnego wywołania przed świętowaniem. Czasami oszczędność wynosi zero, ponieważ stary dostawca już rozliczał za żądanie.

Werdykt dotyczący tej analizy

Zawęź źródło tylko wtedy, gdy raport jest wąski

Jeśli większość kolumn w twoim tibble to linki, API linków-only usuwa kod parsowania i koszty. Jeśli połowa kolumn to dane SERP, zachowaj obecnego dostawcę i dodaj nasz do reszty.

  • Zachowaj komórki demonstracyjne dla darmowych akcji
  • Zablokuj datę migawki w wyjściu
  • Spodziewaj się miesięcznego rytmu, a nie dziennego

Pytania z analizy

Czy muszę przepisać cały potok?

Nie. Zastąp tylko etap linków. Zachowaj etapy SERP i słów kluczowych tam, gdzie są, zapisz tibble linków do osobnego pliku i połącz je dalej w dół na kolumnie domeny.

Czy CORS jest otwarty dla notatników przeglądarkowych?

Tak. CORS jest otwarty, więc aplikacja Shiny lub komórka Observable mogą bezpośrednio wywoływać darmowe akcje. Zachowaj płatne klucze po stronie serwera, ponieważ wszystko w kodzie przeglądarki może być odczytane przez odwiedzających.

Jak tanio przetestować obsługę błędów?

Wyślij celowo nieprawidłowy klucz, aby zobaczyć HTTP 401 bez wydawania pieniędzy. Przypadek HTTP 402 pojawia się tylko wtedy, gdy saldo jest puste, więc zmockuj go w testach zamiast zużywać kredyty.

Czy sumy będą dokładnie zgodne z innym dostawcą?

Nie. Każdy dostawca indeksuje inaczej i odświeża dane w swoim własnym harmonogramie. Porównuj rzędy wielkości i trendy, a DR traktuj tutaj jako oddzielną, wewnętrzną metrykę opartą na skali logarytmicznej.

Błędy, ponowne próby i awarie, które można zaplanować

To właśnie w momentach awarii pipeline’u opartego wyłącznie na linkach i szerszego pipeline’u wyglądają najbardziej podobnie. Kod bywa tam niedokończony. Uwzględnij ścieżki awarii w porównaniu, ponieważ decyzja między Dataforseo a rozwiązaniem link-only wygląda inaczej, gdy uwzględnimy błędy.

HTTP 401 i HTTP 402 to dwa kody, które należy obsłużyć

Najważniejsze są dwa kody statusu. HTTP 401 oznacza, że klucz jest nieobecny lub błędny, a rozwiązanie leży w konfiguracji, a nie w danych. HTTP 402 oznacza, że saldo kredytów się wyczerpało, a rozwiązanie to doładowanie ze strony konta, a nie zmiana w kodzie.

Zapisz oba przypadki jako wyraźne gałęzie. Ogólne przechwycenie błędu, które pochłania kod statusu i zapisuje pustą tabelę, jest przyczyną cichego częściowego pobrania danych.

Time-outy i pliki częściowe

Time-out to nie kod statusu, więc Twój własny kod musi traktować go jako awarię. Zawiń wywołanie tak, aby time-out zatrzymał działanie przed zapisaniem jakichkolwiek danych wyjściowych.

Zapisuj do pliku tymczasowego i zmieniaj jego nazwę po sukcesie. Półzapiski plik, który wygląda na kompletny, to najgorszy wynik przerwanej operacji, ponieważ nikt nie ma zwyczaju go kwestionować.

Ponowne próby i tempo

Na tej stronie nie podano liczby żądań na sekundę, więc dobierz wielkość pipeline’u na podstawie liczby wywołań w cyklu. To liczba, która napędza koszty, i to ona jest pod Twoją kontrolą.

Ponawiaj tylko błędy sieciowe, z przerwą między próbami. Nigdy nie ponawiaj próby dla 401 lub 402, ponieważ każde z nich zakończy się tym samym błędem przy kolejnej próbie.

Gdzie znajduje się klucz podczas testów

Przechowuj klucz w zmiennej środowiskowej na swoim komputerze oraz w magazynie sekretów CI, nigdy w pliku odczytywanym przez testy. Działania darmowe nie wymagają klucza, więc pierwsze uruchomienie testów jest bezpieczne dla każdego, kto sklonuje projekt.

Zadaj to samo pytanie każdemu pipeline’owi, którym się zajmujesz: kto może odczytać klucz i gdzie jest on zapisany? Klucz pojawiający się w pliku logów to wyciek, nawet jeśli sam notes jest prywatny.

Logowanie kosztu każdego wywołania

Każda odpowiedź z uwierzytelnionego wywołania zawiera pole credits, które pokazuje koszt i pozostałe saldo. Skopiuj je do logu obok znacznika czasu i nazwy akcji, aby pytanie o koszt można było odpowiedzieć na podstawie pliku, a nie pamięci.

Przeglądaj logi raz w miesiącu, a nie raz w roku. Powolny wzrost kosztu w cyklu łatwo przeoczyć na wykresie, ale jest oczywisty w kolumnie liczb.

Nieudana operacja również powinna zostawić po sobie log z kodem statusu i krokiem, w którym nastąpiło zatrzymanie. Log, który odnotowuje tylko sukcesy, ukrywa kluczową informację.

Drewnowa układanka w kształcie puzzli z brakującymi elementami na stole warsztatowym symbolizująca utratę danych

Liczenie wierszy na poszczególnych etapach

Wiele kosztownych błędów w pipeline’u to błędy liczenia. Tabela traci wiersze w złączeniu, filtrze lub deduplikacji, a wykres i tak wygląda wiarygodnie.

Zapisuj liczbę wierszy przy każdym przekazaniu danych

Traktuj pipeline’ jako łańcuch tabel: odpowiedź API, sparsowany tibble, zapisany plik i raport. Liczba wierszy przy każdym przekazaniu danych pokazuje, który etap utracił wiersze (jeśli w ogóle).

Analitycy często liczą wiersze tylko na końcu. Wtedy przyczyna znajduje się trzy etapy wcześniej, a tibble został już dwukrotnie przekształcony.

Jeden wiersz na domenę, jeden wiersz na link

Granularność zależy od akcji. Pobranie domen odsyłających zwraca jeden wiersz na witrynę odsyłającą, podczas gdy pobranie backlinków zwraca jeden wiersz na link, a jedna witryna może wysłać wiele z nich. Zliczenie na niewłaściwej granularności sprawi, że dwie poprawne liczby będą wyglądały na niespójne.

Umieść granularność w nazwie zapisanego pliku lub w komentarzu nagłówkowym, aby kolejna osoba nie musiała zgadywać. Glosariusz działań zawiera granularność każdej akcji.

Paginacja i sufit 50 000 wierszy

Paginacja za pomocą page i per działa do 5000 wierszy na stronę, ale głęboka paginacja zatrzymuje się na 50 000 wierszach. Pobranie oczekujące więcej niż ta liczba zostanie obcięte, a jego wynik może wyglądać na podejrzanie zaokrąglony.

Porównaj otrzymaną liczbę z oczekiwana całkowitą. Gdy się różnią, sprawdź akcję, sortowanie i rozmiar strony, zanim obwinisz źródło.

Przykładowe zliczanie

Załóżmy, że hipotetyczne pobranie zwraca liczby dla 30 docelowych domen i zwraca 30 wierszy z licznikami. Po połączeniu z wynikami oceny tabela zachowuje 27 wierszy. Trzy brakujące wiersze wymagają analizy przed narysowaniem jakiegokolwiek wykresu, zaczynając od ich kluczy.

Zapisz te trzy wiersze po nazwach, a nie tylko jako liczbę. Liczba mówi Ci, że wiersze zniknęły, a nazwy wskazują, które klucze należy wyczyścić.

Złączenia cicho usuwające wiersze

Left join zachowuje każdy wiersz z lewej tabeli, więc brakujący wynik pojawia się jako NA, a nie jako zniknięty wiersz. Inner join ukrywa ten sam problem, usuwając wiersz całkowicie.

Wybierz typ złączenia świadomie i policz wyniki NA po złączeniu. Ta liczba powinna znaleźć się w logu obok pola credits.

Krótki plan testowy przed przełączeniem

Uruchom oba źródła przez jeden cykl. Te same domeny, ten sam dzień.

Weź 30 domen, które dobrze znasz, pobierz liczby domen odsyłających od swojego obecnego dostawcy oraz z CranSEO i naniesij je na wykres w skali logarytmicznej. Powinieneś zobaczyć przybliżoną linię przekątną, a nie dokładną, ponieważ indeksy różnią się, a nasze odświeżają się około raz w miesiącu; DataForSEO, Ahrefs i Semrush widzą nieco inny internet.

Czytaj wartości odstające, nie średnią. Tam, gdzie nasza liczba jest znacznie niższa, sprawdź, czy domena jest nowa lub niedawno przeniesiona. Tam, gdzie jest znacznie wyższa, sprawdź subdomeny. Glosariusz definiuje, co zaliczamy do domen odsyłających, a runbook pokazuje, jak przechowywać oba pobrania obok siebie.

Przed pierwszym uruchomieniem produkcyjnym

  • Klucz jest odczytywany ze środowiska, a test obejmuje brak klucza
  • Jedno wywołanie testowe na jednej domenie, zalogowane z polem credits
  • Wyraźne gałęzie dla HTTP 401 i HTTP 402
  • Liczenie wierszy zapisywane na każdym etapie
  • Data migawki zapisana obok każdego zapisanego pliku