Python gebruiken om SEO-siteverkeer te herstellen (deel één) - DeLaatbusiness

Python gebruiken om SEO-siteverkeer te herstellen (deel één)

5 min


119
6 gratis internet marketing ebooks, klik hier voor download

Een klant helpen herstellen van een slecht herontwerp of sitemigratie is waarschijnlijk een van de meest kritieke taken waarmee je als SEO te maken kunt krijgen.

De traditionele aanpak van het uitvoeren van een volledige forensische SEO-audit werkt meestal goed, maar wat als er een manier was om de dingen te versnellen? U kunt uw klant mogelijk veel geld besparen in opportuniteitskosten.

Afgelopen november sprak ik op TechSEO Boost en presenteerde een techniek die mijn team en ik regelmatig gebruiken om verkeersdalingen te analyseren. Hiermee kunnen we dit pijnlijke probleem snel en met chirurgische precisie vaststellen. Voor zover ik weet, zijn er geen tools die deze techniek momenteel implementeren. Ik heb deze oplossing gecodeerd met Python.

Dit is het eerste deel van een driedelige serie. In deel twee zullen we de pagina’s handmatig groeperen met behulp van reguliere expressies en in deel drie groeperen we ze automatisch met behulp van machine learning technieken. Laten we deel één overlopen en plezier hebben!

Winnaars vs verliezers

SEO-verkeer na een overstap naar shopify, het verkeer wordt geraakt

Afgelopen juni hebben we een klant aangemeld die verhuisde van Ecommerce V3 naar Shopify en het SEO-verkeer een grote hit kreeg. De eigenaar heeft 301-omleidingen ingesteld tussen de oude en nieuwe sites, maar heeft een aantal onverstandige wijzigingen doorgevoerd, zoals het samenvoegen van een groot aantal categorieën en het herschrijven van titels tijdens de verplaatsing.

Wanneer het verkeer daalt, presteren sommige delen van de site slechter, andere niet. Ik vind het leuk om ze te isoleren om 1) alle inspanningen te concentreren op de slecht presterende delen, en 2) te leren van de delen die het goed doen.

Ik noem deze analyse de analyse “Winnaars versus verliezers”. Hier zijn winnaars de delen die het goed doen, en verliezers die het slecht doen.

visuele analyse van winnaars en verliezers om erachter te komen waarom het verkeer is veranderd

Een visualisatie van de analyse lijkt op de bovenstaande grafiek. Ik kon het probleem beperken tot de categoriepagina’s (verzamelpagina’s) en ontdekte dat het belangrijkste probleem werd veroorzaakt doordat de site-eigenaar tijdens het verplaatsen te veel categorieën samenvoegde en elimineerde.

Laten we over de stappen lopen om dit soort analyses samen te voegen in Python.

U kunt mijn zorgvuldig gedocumenteerde referentie Google Colab notebook hier .

De gegevens ophalen

We willen twee afzonderlijke tijdkaders programmatisch vergelijken in Google Analytics (vóór en na de verkeersdaling), en we gaan de Google Analytics API gebruiken om dit te doen.

Google Analytics Query Explorer biedt de eenvoudigste manier om dit in Python te doen.

  1. Ga naar de Google Analytics Query Explorer
  2. Klik op de knop bovenaan met de tekst ‘Klik hier om te autoriseren’ en volg de gegeven stappen.
  3. Gebruik het vervolgkeuzemenu om de website te selecteren waarvan u gegevens wilt ontvangen.
  4. Vul de parameter “metrics” in met “ga: newUsers” om nieuwe bezoeken bij te houden.
  5. Voltooi de parameter “dimensions” met “ga: landingPagePath” om de pagina-URL’s te krijgen.
  6. Vul de parameter “segment” in met “gaid :: – 5” om organische zoekbezoeken bij te houden.
  7. Klik op “Query uitvoeren” en laat het uitvoeren
  8. Scrol omlaag naar de onderkant van de pagina en zoek naar het tekstvak met de tekst ‘API-query-URI’.
    1. Vink het vakje eronder aan dat zegt: “Huidige toegangstoken opnemen in de query-URI (verloopt over ~ 60 minuten).”
    2. Aan het einde van de URL in het tekstvak ziet u nu access_token = string-of-text-hier. U gebruikt deze tekenreeks in het onderstaande codefragment als de variabele token (zorg dat u deze in de aanhalingstekens plakt)
  9. Blader nu terug naar de plaats waar we de query hebben gebouwd en zoek naar de parameter die voor u is ingevuld met de naam ‘ids’. U gebruikt deze in het onderstaande codefragment als de variabele ‘gaid’. Nogmaals, het moet gaan in de aanhalingstekens.
  10. Voer de cel uit nadat u de gaid- en tokenvariabelen hebt ingevuld om ze te instantiëren en we zijn klaar om te beginnen!

Laten we eerst de tijdelijke aanduidingen definiëren die moeten worden doorgegeven aan de API

metrics = “,”. join ([“ga: users”, “ga: newUsers”])

dimensions = “,”. join ([“ga: landingPagePath”, “ga: date”])

segment = “gaid :: – 5”

# Vereist, vul hier uw eigen GA-informatievoorbeeld in: ga: 23322342

gaid = “ga: 23322342”

# Voorbeeld: reeks-van-tekst-hier vanaf stap 8.2

token = “”

# Voorbeeld https://www.example.com of http://example.org

base_site_url = “”

# U kunt de begin- en einddatums naar wens wijzigen

start = “2017-06-01”

end = “2018-06-30”

De eerste functie combineert de plaatsvervangende variabelen die we hierboven hebben ingevuld met een API-URL om Google Analytics-gegevens te krijgen. We doen aanvullende API-aanvragen en voegen deze samen voor het geval de resultaten de 10.000-limiet overschrijden.

def GAData (gaid, start, einde, statistieken, dimensies, 

           segment, token, max_results = 10000):

  “” “Creëert een generator die GA API-gegevens oplevert 

     in brokken van de grootte `max_results`” “”

  #build uri w / params

  api_uri = “https://www.googleapis.com/analytics/v3/data/ga?ids={gaid}&” \

             “Start-date = {start} en einddatum = {einde} & metrics = {metrics} &” \

             “Afmetingen = {} afmetingen en segment = {} segment & access_token = {token} &” \

             “Max-results = {} MAX_RESULTS”

  # uri params invoegen

  api_uri = api_uri.format (

      Gaid = Gaid,

      start = start,

      end = einde,

      metrics = metrieken

      afmetingen = dimensies

      segment per segment,

      token = token,

      MAX_RESULTS = MAX_RESULTS

  )

  # Gebruik van opbrengst om een ​​generator in een te maken

  # poging geheugen efficiënt te zijn, omdat gegevens in stukjes worden gedownload

  r = requests.get (api_uri)

  data = r.json ()

  opbrengstgegevens

  if data.get (“nextLink”, None):

    while data.get (“nextLink”):

      new_uri = data.get (“nextLink”)

      new_uri + = “& access_token = {token}”. format (token = token)

      r = requests.get (new_uri)

      data = r.json ()

      opbrengstgegevens

In de tweede functie laden we de Google Analytics Query Explorer API-reactie in een pandas DataFrame om onze analyse te vereenvoudigen.

import panda’s als  pd

def to_df (gadata):

  “” “Neemt een generator over van GAData () 

     maakt een dataframe vanuit de rijen “” “

  df = Geen

  voor gegevens in gadata:

    als df Geen is:

      df = pd.DataFrame (

          data [ ‘tr’], 

          kolommen = [x [‘naam’] voor x in gegevens [‘columnHeaders’]]

      )

    anders:

      newdf = pd.DataFrame (

          data [ ‘tr’], 

          kolommen = [x [‘naam’] voor x in gegevens [‘columnHeaders’]]

      )

      df = df.append (nieuwdf)

    print (“Verzamelde {} rijen” .format (len (df)))

  retourneer df

Nu kunnen we de functies bellen om de Google Analytics-gegevens te laden.

data = GAData (gaid = gaid, metrics = metrics, start = start, 

                einde = einde, afmetingen = afmetingen, segment = segment, 

                token = token)

data = to_df (data)

Analyse van de gegevens

Laten we beginnen met alleen maar de gegevens te bekijken. We gebruiken de methode .head () van DataFrames om de eerste paar rijen te bekijken. Zie dit als een blik op alleen de bovenste paar rijen van een Excel-spreadsheet.

data.head (5)

Hiermee worden de eerste vijf rijen van het gegevensframe weergegeven.

De meeste gegevens zijn niet in de juiste indeling voor de juiste analyse, dus laten we wat gegevenstransformaties uitvoeren.

Laten we eerst de datum omzetten naar een datetime-object en de metriek naar numerieke waarden.

data [‘ga: date’] = pd.to_datetime (data [‘ga: date’])

data [‘ga: users’] = pd.to_numeric (data [‘ga: users’])

data [‘ga: newUsers’] = pd.to_numeric (data [‘ga: newUsers’])

Vervolgens hebben we de URL van de bestemmingspagina nodig, die relatief zijn en URL-parameters opnemen in twee extra indelingen: 1) als absolute URL’s en 2) als relatieve paden (zonder de URL-parameters).

van urllib.parse import urlparse, urljoin

data [‘path’] = data [‘ga: landingPagePath’]. apply (lambda x: urlparse (x) .path)

data [‘url’] = urljoin (base_site_url, data [‘path’])

Nu begint het leuke gedeelte.

Het doel van onze analyse is om te zien welke pagina’s na een bepaalde datum het verkeer hebben verloren, in vergelijking met de periode vóór die datum, en die na die datum verkeer hebben gegenereerd.

De hieronder gekozen voorbeelddatum komt overeen met het exacte middelpunt van onze start- en eindvariabelen die hierboven zijn gebruikt om de gegevens te verzamelen, zodat de gegevens zowel voor als na de datum van dezelfde grootte zijn.

We beginnen de analyse door elke URL samen te groeperen op hun pad en de nieuwe gebruikers toe te voegen voor elke URL. We doen dit met de ingebouwde panda-methode: .groupby (), waarbij een kolomnaam als invoer wordt gebruikt en elke unieke waarde in die kolom wordt gegroepeerd.

De methode .sum () neemt vervolgens de som van elke andere kolom in het gegevensframe binnen elke groep.

Zie de Pandas-documentatie voor groupby voor meer informatie over deze methoden .


What's Your Reaction?

hate hate
0
hate
confused confused
0
confused
fail fail
0
fail
fun fun
0
fun
geeky geeky
0
geeky
love love
0
love
lol lol
0
lol
omg omg
0
omg
win win
0
win
Erwin@delaatbusiness.com
Dag, Hulp nodig met internet marketing of websites maken? neem dan contact op

0 Comments

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Choose A Format
Personality quiz
Series of questions that intends to reveal something about the personality
Trivia quiz
Series of questions with right and wrong answers that intends to check knowledge
Poll
Voting to make decisions or determine opinions
Story
Formatted Text with Embeds and Visuals
List
The Classic Internet Listicles
Countdown
The Classic Internet Countdowns
Open List
Submit your own item and vote up for the best submission
Ranked List
Upvote or downvote to decide the best list item
Meme
Upload your own images to make custom memes
Video
Youtube, Vimeo or Vine Embeds
Audio
Soundcloud or Mixcloud Embeds
Image
Photo or GIF
Gif
GIF format