Optimitzar l’enllaç intern és important si us preocupa que les pàgines del vostre lloc tinguin prou autoritat per classificar-se per a les seves paraules clau objectiu. Per enllaços interns, entenem pàgines del vostre lloc web que reben enllaços d’altres pàgines.
Això és important perquè aquesta és la base per la qual Google i altres cerques calculen la importància de la pàgina en relació amb altres pàgines del vostre lloc web.
També afecta la probabilitat que un usuari descobreixi contingut al vostre lloc. El descobriment de contingut és la base del Google PageRank algorisme.
Avui, estem explorant un enfocament basat en dades per millorar l’enllaç intern d’un lloc web amb l’objectiu d’un SEO tècnic més eficaç. Això és per garantir que la distribució de l’autoritat interna del domini estigui optimitzada segons l’estructura del lloc.
Millora de les estructures d’enllaç intern amb Data Science
El nostre enfocament basat en dades se centrarà en només un aspecte de l’optimització de l’arquitectura d’enllaços interns, que és modelar la distribució dels enllaços interns per profunditat del lloc i després orientar les pàgines que no tenen enllaços per a la profunditat del lloc en particular.
Anunci
Continueu llegint a continuació
Comencem important les biblioteques i les dades, netejant els noms de les columnes abans de previsualitzar-los:
import pandas as pd import numpy as np site_name="ON24" site_filename="on24" website="www.on24.com" # import Crawl Data crawl_data = pd.read_csv('data/'+ site_filename + '_crawl.csv') crawl_data.columns = crawl_data.columns.str.replace(' ','_') crawl_data.columns = crawl_data.columns.str.replace('.','') crawl_data.columns = crawl_data.columns.str.replace('(','') crawl_data.columns = crawl_data.columns.str.replace(')','') crawl_data.columns = map(str.lower, crawl_data.columns) print(crawl_data.shape) print(crawl_data.dtypes) Crawl_data (8611, 104) url object base_url object crawl_depth object crawl_status object host object ... redirect_type object redirect_url object redirect_url_status object redirect_url_status_code object unnamed:_103 float64 Length: 104, dtype: object
L’anterior mostra una vista prèvia de les dades importades des de l’aplicació de rastreig d’escriptori de Sitebulb. Hi ha més de 8.000 files i no totes seran exclusives del domini, ja que també inclourà URL de recursos i URL d’enllaços de sortida externs.
També tenim més de 100 columnes que són superflues per als requisits, de manera que caldrà seleccionar algunes columnes.
Anunci
Continueu llegint a continuació
Abans d’entrar-hi, però, volem veure ràpidament quants nivells de lloc hi ha:
crawl_depth 0 1 1 70 10 5 11 1 12 1 13 2 14 1 2 303 3 378 4 347 5 253 6 194 7 96 8 33 9 19 Not Set 2351 dtype: int64
Així, a partir de l’anterior, podem veure que hi ha 14 nivells de lloc i la majoria d’ells no es troben a l’arquitectura del lloc, sinó al mapa del lloc XML.
És possible que noteu que Pandas (el paquet Python per a la gestió de dades) ordena els nivells del lloc per dígits.
Això és perquè els nivells del lloc són en aquesta etapa cadenes de caràcters en lloc de numèrics. Això s’ajustarà en el codi posterior, ja que afectarà la visualització de dades (‘viz’).
Ara, filtrarem files i seleccionarem columnes.
# Filter for redirected and live links
redir_live_urls = crawl_data[['url', 'crawl_depth', 'http_status_code', 'indexable_status', 'no_internal_links_to_url', 'host', 'title']] redir_live_urls = redir_live_urls.loc[redir_live_urls.http_status_code.str.startswith(('2'), na=False)] redir_live_urls['crawl_depth'] = redir_live_urls['crawl_depth'].astype('category') redir_live_urls['crawl_depth'] = redir_live_urls['crawl_depth'].cat.reorder_categories(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', 'Not Set', ]) redir_live_urls = redir_live_urls.loc[redir_live_urls.host == website] del redir_live_urls['host'] print(redir_live_urls.shape) Redir_live_urls (4055, 6)
En filtrar les files per als URL indexables i seleccionar les columnes rellevants, ara tenim un marc de dades més simplificat (penseu a la versió Pandas d’una pestanya de full de càlcul).
Explorant la distribució d’enllaços interns
Ara estem preparats per a les dades i tenir una idea de com enllaços interns es distribueixen globalment i per profunditat del lloc.
from plotnine import * import matplotlib.pyplot as plt pd.set_option('display.max_colwidth', None) %matplotlib inline # Distribution of internal links to URL by site level ove_intlink_dist_plt = (ggplot(redir_live_urls, aes(x = 'no_internal_links_to_url')) + geom_histogram(fill="blue", alpha = 0.6, bins = 7) + labs(y = '# Internal Links to URL') + theme_classic() + theme(legend_position = 'none') ) ove_intlink_dist_plt
A partir de l’anterior podem veure de manera aclaparadora que la majoria de pàgines no tenen enllaços, per la qual cosa millorar l’enllaç intern seria una oportunitat important per millorar el SEO aquí.
Obtenim algunes estadístiques a nivell de lloc.
Anunci
Continueu llegint a continuació
crawl_depth 0 1 1 70 10 5 11 1 12 1 13 2 14 1 2 303 3 378 4 347 5 253 6 194 7 96 8 33 9 19 Not Set 2351 dtype: int64
La taula anterior mostra la distribució aproximada dels enllaços interns per nivell de lloc, incloent la mitjana (mitjana) i la mediana (50% quantil).
Això és juntament amb la variació dins del nivell del lloc (std per a la desviació estàndard), que ens indica a quina distància de la mitjana es troben les pàgines dins del nivell del lloc; és a dir, com de coherent és la distribució de l’enllaç intern amb la mitjana.
A partir de l’anterior, podem suposar que la mitjana per nivell de lloc, amb l’excepció de la pàgina d’inici (profunditat de rastreig 0) i les pàgines de primer nivell (profunditat de rastreig 1), oscil·la entre 0 i 4 per URL.
Per a un enfocament més visual:
# Distribution of internal links to URL by site level intlink_dist_plt = (ggplot(redir_live_urls, aes(x = 'crawl_depth', y = 'no_internal_links_to_url')) + geom_boxplot(fill="blue", alpha = 0.8) + labs(y = '# Internal Links to URL', x = 'Site Level') + theme_classic() + theme(legend_position = 'none') ) intlink_dist_plt.save(filename="images/1_intlink_dist_plt.png", height=5, width=5, units="in", dpi=1000) intlink_dist_plt
La trama anterior confirma els nostres comentaris anteriors que la pàgina d’inici i les pàgines directament enllaçades des d’ella reben la part del lleó dels enllaços.
Anunci
Continueu llegint a continuació
Amb les escales tal com són, no tenim gaire visió de la distribució dels nivells inferiors. Modificarem això prenent un logaritme de l’eix y:
# Distribution of internal links to URL by site level from mizani.formatters import comma_format intlink_dist_plt = (ggplot(redir_live_urls, aes(x = 'crawl_depth', y = 'no_internal_links_to_url')) + geom_boxplot(fill="blue", alpha = 0.8) + labs(y = '# Internal Links to URL', x = 'Site Level') + scale_y_log10(labels = comma_format()) + theme_classic() + theme(legend_position = 'none') ) intlink_dist_plt.save(filename="images/1_log_intlink_dist_plt.png", height=5, width=5, units="in", dpi=1000) intlink_dist_plt
L’anterior mostra la mateixa distribució dels enllaços amb la visió logarítmica, que ens ajuda a confirmar les mitjanes de distribució dels nivells inferiors. Això és molt més fàcil de visualitzar.
Atesa la disparitat entre els dos primers nivells de lloc i el lloc restant, això és indicatiu d’una distribució esbiaixada.
Anunci
Continueu llegint a continuació
Com a resultat, prendré un logaritme dels enllaços interns, que ajudarà a normalitzar la distribució.
Ara tenim el nombre normalitzat d’enllaços, que visualitzarem:
# Distribution of internal links to URL by site level intlink_dist_plt = (ggplot(redir_live_urls, aes(x = 'crawl_depth', y = 'log_intlinks')) + geom_boxplot(fill="blue", alpha = 0.8) + labs(y = '# Log Internal Links to URL', x = 'Site Level') + #scale_y_log10(labels = comma_format()) + theme_classic() + theme(legend_position = 'none') ) intlink_dist_plt
A partir de l’anterior, la distribució sembla molt menys esbiaixada, ja que les caixes (ranges interquartils) tenen un canvi de pas més gradual des del nivell del lloc al nivell del lloc.
Això ens prepara molt bé per analitzar les dades abans de diagnosticar quins URL estan poc optimitzats des del punt de vista dels enllaços interns.
Anunci
Continueu llegint a continuació
Quantificació dels problemes
El codi següent calcularà el quantil 35 inferior (terme de ciència de dades per percentil) per a cada profunditat del lloc.
# internal links in under/over indexing at site level # count of URLs under indexed for internal link counts quantiled_intlinks = redir_live_urls.groupby('crawl_depth').agg({'log_intlinks': [quantile_lower]}).reset_index() quantiled_intlinks = quantiled_intlinks.rename(columns = {'crawl_depth_': 'crawl_depth', 'log_intlinks_quantile_lower': 'sd_intlink_lowqua'}) quantiled_intlinks
L’anterior mostra els càlculs. Els números no tenen sentit per a un professional de SEO en aquesta etapa, ja que són arbitraris i tenen el propòsit de proporcionar un tall per als URL subenllaçats a cada nivell de lloc.
Ara que tenim la taula, les combinarem amb el conjunt de dades principal per determinar si l’URL fila per fila està subenllaçada o no.
Anunci
Continueu llegint a continuació
# join quantiles to main df and then count redir_live_urls_underidx = redir_live_urls.merge(quantiled_intlinks, on = 'crawl_depth', how = 'left') redir_live_urls_underidx['sd_int_uidx'] = redir_live_urls_underidx.apply(sd_intlinkscount_underover, axis=1) redir_live_urls_underidx['sd_int_uidx'] = np.where(redir_live_urls_underidx['crawl_depth'] == 'Not Set', 1, redir_live_urls_underidx['sd_int_uidx']) redir_live_urls_underidx
Ara tenim un marc de dades amb cada URL marcat com a enllaç inferior sota la columna ”sd_int_uidx’ com a 1.
Això ens posa en condicions de sumar la quantitat de pàgines del lloc amb enllaços inferiors per profunditat del lloc:
# Summarise int_udx by site level intlinks_agged = redir_live_urls_underidx.groupby('crawl_depth').agg({'sd_int_uidx': ['sum', 'count']}).reset_index() intlinks_agged = intlinks_agged.rename(columns = {'crawl_depth_': 'crawl_depth'}) intlinks_agged['sd_uidx_prop'] = intlinks_agged.sd_int_uidx_sum / intlinks_agged.sd_int_uidx_count * 100 print(intlinks_agged)
crawl_depth sd_int_uidx_sum sd_int_uidx_count sd_uidx_prop 0 0 0 1 0.000000 1 1 41 70 58.571429 2 2 66 303 21.782178 3 3 110 378 29.100529 4 4 109 347 31.412104 5 5 68 253 26.877470 6 6 63 194 32.474227 7 7 9 96 9.375000 8 8 6 33 18.181818 9 9 6 19 31.578947 10 10 0 5 0.000000 11 11 0 1 0.000000 12 12 0 1 0.000000 13 13 0 2 0.000000 14 14 0 1 0.000000 15 Not Set 2351 2351 100.000000
Ara veiem que, malgrat que la pàgina de profunditat del lloc 1 té un nombre d’enllaços per URL superior a la mitjana, encara hi ha 41 pàgines que estan subenllaçades.
Per ser més visual:
# plot the table depth_uidx_plt = (ggplot(intlinks_agged, aes(x = 'crawl_depth', y = 'sd_int_uidx_sum')) + geom_bar(stat="identity", fill="blue", alpha = 0.8) + labs(y = '# Under Linked URLs', x = 'Site Level') + scale_y_log10() + theme_classic() + theme(legend_position = 'none') ) depth_uidx_plt.save(filename="images/1_depth_uidx_plt.png", height=5, width=5, units="in", dpi=1000) depth_uidx_plt
Amb l’excepció de la Mapa del lloc XML URL, la distribució dels URL subenllaçats sembla normal tal com indica la forma de campana propera. La majoria dels URL subenllaçats es troben als nivells 3 i 4 del lloc.
Anunci
Continueu llegint a continuació
Exportació de la llista d’URL subenllaçats
Ara que tenim un control dels URL subenllaçats per nivell de lloc, podem exportar les dades i proposar solucions creatives per salvar els buits en profunditat del lloc, tal com es mostra a continuació.
# data dump of under performing backlinks underlinked_urls = redir_live_urls_underidx.loc[redir_live_urls_underidx.sd_int_uidx == 1] underlinked_urls = underlinked_urls.sort_values(['crawl_depth', 'no_internal_links_to_url']) underlinked_urls.to_csv('exports/underlinked_urls.csv') underlinked_urls
Altres tècniques de ciència de dades per a l’enllaç intern
Vam cobrir breument la motivació per millorar els enllaços interns d’un lloc abans d’explorar com es distribueixen els enllaços interns al lloc per nivell de lloc.
Anunci
Continueu llegint a continuació
A continuació, vam procedir a quantificar l’abast del problema de subenllaç tant numèrica com visualment abans d’exportar els resultats per a recomanacions.
Naturalment, el nivell de lloc és només un aspecte dels enllaços interns que es poden explorar i analitzar estadísticament.
Altres aspectes que podrien aplicar tècniques de ciència de dades als enllaços interns inclouen i òbviament no es limiten a:
- Autoritat a nivell de pàgina fora del lloc.
- Rellevància del text d’ancoratge.
- Intenció de cerca.
- Cerca el recorregut de l’usuari.
Quins aspectes t’agradaria que es cobrissin?
Si us plau, deixeu un comentari a continuació.
Més recursos:
Anunci
Continueu llegint a continuació
Imatge destacada: Shutterstock/Optimarc