Pular para o conteúdo
CranSEO
CranSEOCadastre-se

DataForSEO vs uma API só de links: o que muda no seu pipeline em R

Uma desmontagem de um pipeline imaginário, passo a passo. Listamos o que muda, o que permanece e o que você perde ao restringir a fonte apenas para links.

Equipe de pesquisa da CranSEO ·

Duas trilhas de ferrovia divergentes em uma floresta nebulosa representando escolhas de pipeline

O pipeline, estágio por estágio

01

Autenticar

Nossa chave viaja como parâmetro de query ou cabeçalho Authorization Bearer. Ações gratuitas não precisam disso, então as primeiras células de um notebook podem ser executadas por qualquer pessoa.

02

Solicitar

Uma GET por ação, com q para o domínio. A paginação usa page e per (10 a 5000), a ordenação usa sort e order.

03

Analisar

Cada resposta é JSON com um campo ok. As autenticadas adicionam _credits, mostrando o custo e o saldo restante.

04

Armazenar

Escreva o tibble e a data da snapshot juntos. O gráfico é atualizado aproximadamente mensalmente, então a data faz parte dos dados.

05

Relatório

Renderize a partir do arquivo armazenado, não de uma chamada em tempo real, para que o documento quarto gere o mesmo gráfico amanhã.

O que você ganha e o que abre mão

PreocupaçãoAPI só de linksProvedor mais amplo
EscopoBacklinks, domínios de referência, âncoras, páginas principais, DRGeralmente adiciona dados de SERP e palavras-chave
FaturamentoPor chamada, 1 crédito = $0.0001, sem assinaturaVerifique sua própria lista de preços
AtualidadeAtualização aproximadamente mensalVerifique sua própria documentação
Linhas por chamadaAté 1.000, faturado uma vezVaria conforme o endpoint
Sinais de falhaHTTP 401 chave inválida, HTTP 402 sem créditoVaria
Guindaste levantando viga de aço facilmente versus pequena ferramenta lutando para mostrar eficiência

O erro que custa mais nesse tipo de pipeline

A maioria dos pipelines falha no dinheiro, não no código. Um loop que chama um endpoint uma vez por linha transforma uma tarefa barata em uma cara.

Com a gente, uma chamada custa o mesmo para 10 linhas ou 1.000, então a regra inverte: solicite a maior página possível. Defina per como 1000, ordene conforme necessário e pare a paginação quando a pergunta for respondida.

A paginação profunda é limitada a 50.000 linhas, o que é um recurso para analistas tentados a extrair tudo. Se um domínio tiver mais links que isso, você provavelmente quer toppages ou anchors em vez disso.

Compare o gasto do seu loop antigo com a versão de chamada única antes de celebrar. Às vezes, a economia é zero porque o provedor antigo já cobrava por solicitação.

Veredito sobre esta desmontagem

Restrinja a fonte apenas se o relatório for restrito

Se a maioria das colunas no seu tibble são links, uma API só de links remove código de análise e custo. Se metade das colunas são dados de SERP, mantenha seu provedor atual e adicione o nosso para o resto.

  • Mantenha as células de demonstração em ações gratuitas
  • Fixe a data da snapshot na saída
  • Espere um ritmo mensal, não diário

Perguntas da desmontagem

Preciso reescrever todo o meu pipeline?

Não. Substitua apenas o estágio de links. Mantenha seus estágios de SERP e palavras-chave onde estão, escreva o tibble de links em seu próprio arquivo e junte os dois downstream na coluna de domínio.

O CORS está aberto para notebooks de navegador?

Sim. O CORS está aberto, então um aplicativo Shiny ou uma célula Observable pode chamar as ações gratuitas diretamente. Mantenha as chaves pagadas no lado do servidor, porque qualquer coisa no código do navegador pode ser lida pelos visitantes.

Como testar o tratamento de falhas com baixo custo?

Envie uma chave deliberadamente errada para ver o HTTP 401 sem gastar nada. O caso HTTP 402 só aparece quando o saldo está vazio, então simule-o em seus testes em vez de drenar créditos.

Os totais corresponderão exatamente a outro provedor?

Não. Cada provedor rastreia de forma diferente e atualiza em seu próprio cronograma. Compare ordens de grandeza e tendências, e trate o DR aqui como uma métrica separada, logarítmica e interna.

Erros, retentativas e as falhas que você pode planejar

As falhas são onde um pipeline só de links e um mais amplo parecem mais semelhantes. O código fica incompleto lá. Coloque os caminhos de falha na comparação, porque uma decisão dataforseo vs link-only parece diferente quando os erros estão em jogo.

HTTP 401 e HTTP 402 são os dois a serem tratados

Dois códigos de status são mais importantes. HTTP 401 significa que a chave está ausente ou errada, e a correção está na sua configuração, não nos seus dados. HTTP 402 significa que o saldo de créditos acabou, e a correção é um recarga na página da conta, não uma alteração de código.

Escreva ambos como ramificações explícitas. Uma captura genérica que engole o status e escreve uma tabela vazia é como ocorre uma extração parcial silenciosa.

Timeouts e arquivos parciais

Um timeout não é um código de status, então seu próprio código deve tratá-lo como uma falha. Envolva a chamada para que um timeout interrompa a execução antes que qualquer saída seja escrita.

Escreva em um arquivo temporário e renomeie-o no sucesso. Um arquivo parcialmente escrito que parece completo é o pior resultado de uma execução interrompida, porque ninguém pensa em questioná-lo.

Retentativas e ritmo

Esta página não cita uma figura de solicitações por segundo, então dimensione o pipeline por chamadas por ciclo. Esse é o número que impulsiona o custo, e é o que você controla.

Retente apenas erros de rede, com uma pausa entre as tentativas. Nunca retente um 401 ou 402, porque cada um falhará da mesma maneira na próxima tentativa.

Onde a chave está durante os testes

Mantenha a chave em uma variável de ambiente na sua máquina e no armazenamento de segredos da CI, nunca em um arquivo que os testes leem. As ações gratuitas não precisam de chave, então a primeira execução de teste é segura para qualquer pessoa que clonar o projeto.

Faça a mesma pergunta para cada pipeline que você toca: quem pode ler a chave e onde ela está registrada? Uma chave que aparece em um arquivo de log é um vazamento, mesmo quando o notebook em si é privado.

Registrando o custo de cada chamada

Cada resposta de uma chamada autenticada carrega o campo credits, que mostra o custo e o saldo restante. Copie-o para o seu log ao lado do timestamp e do nome da ação, para que uma pergunta de custo possa ser respondida a partir do arquivo, não da memória.

Leia o log uma vez por mês, não uma vez por ano. Um aumento lento no custo por ciclo é fácil de perder em um gráfico e óbvio em uma coluna de números.

Uma execução falhada também deve deixar seu log, com o código de status e a etapa onde parou. Um log que registra apenas sucessos esconde a linha que você precisava.

Quebra-cabeça de madeira com peças faltando em uma bancada representando perda de dados

Contando linhas entre estágios

Muitos bugs caros de pipeline são bugs de contagem. Uma tabela perde linhas em um join, um filtro ou uma desduplicação, e o gráfico ainda parece plausível depois.

Escreva uma contagem em cada transferência

Pense no pipeline como uma cadeia de tabelas: a resposta da API, o tibble analisado, o arquivo armazenado e o relatório. Uma contagem de linhas em cada transferência mostra qual estágio perdeu linhas, se alguma.

Analistas muitas vezes contam apenas no final. Até lá, a causa está três estágios atrás, e o tibble foi remodelado duas vezes desde então.

Uma linha por domínio, uma linha por link

A granularidade depende da ação. Uma extração de domínios de referência tem uma linha por site vinculante, enquanto uma extração de backlinks tem uma linha por link, e um site pode enviar muitos deles. Conte na granularidade errada e dois números corretos parecerão discordar.

Coloque a granularidade no nome do arquivo armazenado ou em um comentário de cabeçalho, para que a próxima pessoa não precise adivinhar. O glossário de ações lista a granularidade de cada ação.

Paginação e o teto de 50.000 linhas

A paginação com page e per funciona até 5000 linhas por página, mas a paginação profunda para em 50.000 linhas. Uma extração que espera mais que isso volta limitada, e sua contagem pode parecer estranhamente arredondada.

Compare o número que você recebeu com o total que esperava. Quando diferem, verifique a ação, sua ordenação e o tamanho da página antes de culpar a fonte.

Uma contagem trabalhada, hipoteticamente

Digamos que uma extração hipotética solicite sites de vinculação para 30 domínios alvo e retorne 30 linhas de contagens. Unidas às pontuações, a tabela mantém 27 linhas. As três linhas faltantes precisam de uma olhada antes que qualquer gráfico seja desenhado, começando por suas chaves.

Escreva essas três por nome, não apenas como uma contagem. Uma contagem diz que linhas foram perdidas, enquanto os nomes dizem quais chaves limpar.

Joins que perdem linhas silenciosamente

Um left join mantém todas as linhas da tabela esquerda, então uma pontuação ausente aparece como NA em vez de uma linha desaparecida. Um inner join esconde o mesmo problema removendo a linha completamente.

Escolha o tipo de join com propósito e conte as pontuações NA após o join. Essa contagem pertence ao log ao lado do campo credits.

Um plano de teste curto antes de você mudar

Execute ambas as fontes por um ciclo. Mesmos domínios, mesmo dia.

Pegue 30 domínios que você conhece bem, extraia contagens de domínios de referência do seu provedor atual e do CranSEO, e plote-os um contra o outro em eixos logarítmicos. Você deve ver uma diagonal aproximada, não exata, porque os rastreamentos diferem e o nosso atualiza aproximadamente mensalmente; DataForSEO, Ahrefs e Semrush veem uma web ligeiramente diferente.

Leia os outliers, não a média. Onde nossa contagem está muito abaixo, verifique se o domínio é novo ou mudou recentemente. Onde está muito acima, verifique subdomínios. O glossário define o que contamos como um domínio de referência, e o runbook mostra como armazenar ambas as extrações lado a lado.

Antes da primeira execução em produção

  • A chave é lida do ambiente, e um teste cobre uma chave ausente
  • Uma chamada de teste em um único domínio, registrada com seu campo credits
  • Ramificações explícitas para HTTP 401 e HTTP 402
  • Uma contagem de linhas escrita em cada estágio
  • A data da snapshot escrita ao lado de cada arquivo armazenado