SEO görevlerini otomatikleştirmek için 5 Python betiği
Yayınlanan: 2023-04-12Python, son birkaç yıldır SEO endüstrisinde popülerlik kazanan güçlü bir programlama dilidir.
Nispeten basit sözdizimi, verimli performansı ve kitaplık ve çerçevelerin bolluğu ile Python, birçok SEO'nun işlerine yaklaşımında devrim yarattı.
Python, optimizasyon sürecini daha hızlı, daha doğru ve daha etkili hale getirmeye yardımcı olabilecek çok yönlü bir araç seti sunar.
Bu makale, SEO çabalarınızı artırmanıza yardımcı olacak beş Python komut dosyasını incelemektedir.
- Yönlendirme haritasını otomatikleştirin.
- Meta açıklamaları toplu olarak yazın.
- N-gram ile anahtar kelimeleri analiz edin.
- Anahtar kelimeleri konu kümelerinde gruplandırın.
- Anahtar kelime listesini önceden tanımlanmış bir konu listesiyle eşleştirin.
Python'a başlamanın en kolay yolu
Python programlamaya başlamak istiyorsanız, Google Colab dikkate alınmaya değer.
Karmaşık bir yerel kurulum gerektirmeden Python kodu yazmak ve çalıştırmak için uygun bir oyun alanı sağlayan ücretsiz, web tabanlı bir platformdur.
Temel olarak, tarayıcınızdan Jupyter Not Defterlerine erişmenizi sağlar ve veri bilimi ve makine öğrenimi için bir dizi önceden yüklenmiş kitaplık sağlar.
Ayrıca, Google Drive üzerine inşa edilmiştir, böylece çalışmanızı kolayca kaydedebilir ve başkalarıyla paylaşabilirsiniz.
Başlamak için şu adımları izleyin:
Dosya yüklemelerini etkinleştir
Google Colab'ı açtığınızda, öncelikle geçici bir dosya deposu oluşturma özelliğini etkinleştirmeniz gerekir. Klasör simgesine tıklamak kadar basit.
Bu, geçici dosyaları karşıya yüklemenizi ve ardından herhangi bir sonuç dosyasını indirmenizi sağlar.
Kaynak verileri yükleyin
Python betiklerimizin çoğu çalışmak için bir kaynak dosya gerektirir. Bir dosyayı karşıya yüklemek için yükle düğmesini tıklamanız yeterlidir.
Kurulumu tamamladıktan sonra, aşağıdaki Python betiklerini test etmeye başlayabilirsiniz.
Komut Dosyası 1: Yönlendirme haritasını otomatikleştirin
Büyük siteler için yönlendirme haritaları oluşturmak inanılmaz derecede zaman alabilir. Süreci otomatikleştirmenin yollarını bulmak, zamandan tasarruf etmemize ve diğer görevlere odaklanmamıza yardımcı olabilir.
Bu komut dosyası nasıl çalışır?
Bu komut dosyası, yakından eşleşen makaleleri bulmak için web içeriğini analiz etmeye odaklanır.
- İlk olarak, URL'lerin iki TXT dosyasını içe aktarır: biri yeniden yönlendirilen web sitesi (source_urls.txt) içindir, diğeri ise yeniden yönlendirilen web sitesini emen site içindir (target_urls.txt).
- Ardından, sayfadaki ana gövde içeriğini almak için bir web kazıyıcı oluşturmak üzere Python kitaplığı Beautiful Soup'u kullanıyoruz. Bu betik, üst bilgi ve alt bilgi içeriğini yok sayar.
- Tüm sayfalardaki içeriği taradıktan sonra, URL'ler arasındaki içeriği benzerlik yüzdesiyle eşleştirmek için Python kitaplığı Polyfuzz'u kullanır.
- Son olarak, benzerlik yüzdesi de dahil olmak üzere sonuçları bir CSV dosyasında yazdırır.
Buradan, bir sonraki en yakın eşleşmeyi bulmak için benzerlik yüzdesi düşük olan tüm URL'leri manuel olarak inceleyebilirsiniz.
Komut dosyasını al
#import libraries from bs4 import BeautifulSoup, SoupStrainer from polyfuzz import PolyFuzz import concurrent.futures import csv import pandas as pd import requests #import urls with open("source_urls.txt", "r") as file: url_list_a = [line.strip() for line in file] with open("target_urls.txt", "r") as file: url_list_b = [line.strip() for line in file] #create a content scraper via bs4 def get_content(url_argument): page_source = requests.get(url_argument).text strainer = SoupStrainer('p') soup = BeautifulSoup(page_source, 'lxml', parse_only=strainer) paragraph_list = [element.text for element in soup.find_all(strainer)] content = " ".join(paragraph_list) return content #scrape the urls for content with concurrent.futures.ThreadPoolExecutor() as executor: content_list_a = list(executor.map(get_content, url_list_a)) content_list_b = list(executor.map(get_content, url_list_b)) content_dictionary = dict(zip(url_list_b, content_list_b)) #get content similarities via polyfuzz model = PolyFuzz("TF-IDF") model.match(content_list_a, content_list_b) data = model.get_matches() #map similarity data back to urls def get_key(argument): for key, value in content_dictionary.items(): if argument == value: return key return key with concurrent.futures.ThreadPoolExecutor() as executor: result = list(executor.map(get_key, data["To"])) #create a dataframe for the final results to_zip = list(zip(url_list_a, result, data["Similarity"])) df = pd.DataFrame(to_zip) df.columns = ["From URL", "To URL", "% Identical"] #export to a spreadsheet with open("redirect_map.csv", "w", newline="") as file: columns = ["From URL", "To URL", "% Identical"] writer = csv.writer(file) writer.writerow(columns) for row in to_zip: writer.writerow(row)
Komut Dosyası 2: Meta açıklamaları toplu olarak yazın
Meta açıklamaları doğrudan bir sıralama faktörü olmasa da, organik tıklama oranlarımızı geliştirmemize yardımcı olur. Meta açıklamalarını boş bırakmak, Google'ın kendi meta açıklamalarını oluşturma şansını artırır.
SEO denetiminiz çok sayıda URL'nin bir meta açıklamasının eksik olduğunu gösteriyorsa, özellikle e-ticaret web siteleri için hepsini elle yazmak için zaman ayırmak zor olabilir.
Bu komut dosyası, bu işlemi sizin için otomatikleştirerek zamandan tasarruf etmenize yardımcı olmayı amaçlamaktadır.
Komut dosyası nasıl çalışır?
- İlk olarak komut dosyası, bir TXT dosyasından (urls.txt) bir URL listesi içe aktarır.
- Ardından, URL'lerdeki tüm içeriği ayrıştırır.
- İçerik ayrıştırıldıktan sonra 155 karakterin altında olmayı hedefleyen meta açıklamaları oluşturur.
- Sonuçları bir CSV dosyasına aktarır.
Komut dosyasını al
!pip install sumy from sumy.parsers.html import HtmlParser from sumy.nlp.tokenizers import Tokenizer from sumy.nlp.stemmers import Stemmer from sumy.utils import get_stop_words from sumy.summarizers.lsa import LsaSummarizer import csv #1) imports a list of URLs from a txt file with open('urls.txt') as f: urls = [line.strip() for line in f] results = [] # 2) analyzes the content on each URL for url in urls: parser = HtmlParser.from_url(url, Tokenizer("english")) stemmer = Stemmer("english") summarizer = LsaSummarizer(stemmer) summarizer.stop_words = get_stop_words("english") description = summarizer(parser.document, 3) description = " ".join([sentence._text for sentence in description]) if len(description) > 155: description = description[:152] + '...' results.append({ 'url': url, 'description': description }) # 4) exports the results to a csv file with open('results.csv', 'w', newline='') as f: writer = csv.DictWriter(f, fieldnames=['url','description']) writer.writeheader() writer.writerows(results)
Komut Dosyası 3: Anahtar kelimeleri N-gramlarla analiz edin
N-gramlar yeni bir kavram değil ama yine de SEO için faydalıdır. Büyük anahtar kelime verileri kümelerindeki temaları anlamamıza yardımcı olabilirler.
Bu komut dosyası nasıl çalışır?
Bu komut dosyası, anahtar sözcükleri unigramlara, bigramlara ve trigramlara bölen bir TXT dosyasındaki sonuçları verir.
- İlk olarak, tüm anahtar kelimelerinizin (keyword.txt) bir TXT dosyasını içe aktarır.
- Ardından, N-gramları analiz etmek ve çıkarmak için Counter adlı bir Python kitaplığı kullanır.
- Ardından sonuçları yeni bir TXT dosyasına aktarır.
Bu betiği al
#Import necessary libraries import re from collections import Counter #Open the text file and read its contents into a list of words with open('keywords.txt', 'r') as f: words = f.read().split() #Use a regular expression to remove any non-alphabetic characters from the words words = [re.sub(r'[^a-zA-Z]', '', word) for word in words] #Initialize empty dictionaries for storing the unigrams, bigrams, and trigrams unigrams = {} bigrams = {} trigrams = {} #Iterate through the list of words and count the number of occurrences of each unigram, bigram, and trigram for i in range(len(words)): # Unigrams if words[i] in unigrams: unigrams[words[i]] += 1 else: unigrams[words[i]] = 1 # Bigrams if i < len(words)-1: bigram = words[i] + ' ' + words[i+1] if bigram in bigrams: bigrams[bigram] += 1 else: bigrams[bigram] = 1 # Trigrams if i < len(words)-2: trigram = words[i] + ' ' + words[i+1] + ' ' + words[i+2] if trigram in trigrams: trigrams[trigram] += 1 else: trigrams[trigram] = 1 # Sort the dictionaries by the number of occurrences sorted_unigrams = sorted(unigrams.items(), key=lambda x: x[1], reverse=True) sorted_bigrams = sorted(bigrams.items(), key=lambda x: x[1], reverse=True) sorted_trigrams = sorted(trigrams.items(), key=lambda x: x[1], reverse=True) # Write the results to a text file with open('results.txt', 'w') as f: f.write("Most common unigrams:\n") for unigram, count in sorted_unigrams[:10]: f.write(unigram + ": " + str(count) + "\n") f.write("\nMost common bigrams:\n") for bigram, count in sorted_bigrams[:10]: f.write(bigram + ": " + str(count) + "\n") f.write("\nMost common trigrams:\n") for trigram, count in sorted_trigrams[:10]: f.write(trigram + ": " + str(count) + "\n")
Komut Dosyası 4: Anahtar kelimeleri konu kümelerinde gruplandırın
Yeni SEO projelerinde, anahtar kelime araştırması her zaman erken aşamalardadır. Bazen bir veri kümesindeki binlerce anahtar kelimeyle uğraşıyoruz ve bu da gruplandırmayı zorlaştırıyor.
Python, trend trendlerini belirlemek ve anahtar kelime eşlememizi tamamlamak için anahtar kelimeleri otomatik olarak benzer gruplar halinde kümelememize olanak tanır.
Bu komut dosyası nasıl çalışır?
- Bu betik, önce bir anahtar sözcük TXT dosyasını (keywords.txt) içe aktarır.
- Ardından komut dosyası, TfidfVectorizer ve AffinityPropagation kullanarak anahtar sözcükleri analiz eder.
- Ardından her konu kümesine sayısal bir değer atar.
- Sonuçlar daha sonra bir csv dosyasına aktarılır.
Bu betiği al
import csv import numpy as np from sklearn.cluster import AffinityPropagation from sklearn.feature_extraction.text import TfidfVectorizer # Read keywords from text file with open("keywords.txt", "r") as f: keywords = f.read().splitlines() # Create a Tf-idf representation of the keywords vectorizer = TfidfVectorizer() X = vectorizer.fit_transform(keywords) # Perform Affinity Propagation clustering af = AffinityPropagation().fit(X) cluster_centers_indices = af.cluster_centers_indices_ labels = af.labels_ # Get the number of clusters found n_clusters = len(cluster_centers_indices) # Write the clusters to a csv file with open("clusters.csv", "w", newline="") as f: writer = csv.writer(f) writer.writerow(["Cluster", "Keyword"]) for i in range(n_clusters): cluster_keywords = [keywords[j] for j in range(len(labels)) if labels[j] == i] if cluster_keywords: for keyword in cluster_keywords: writer.writerow([i, keyword]) else: writer.writerow([i, ""])
Komut Dosyası 5: Anahtar kelime listesini önceden tanımlanmış konular listesiyle eşleştirin
Bu, önceki komut dosyasına benzer, ancak bu, bir anahtar kelime listesini önceden tanımlanmış bir konu grubuyla eşleştirmenize izin verir.
Bu, büyük anahtar kelime kümeleri için harikadır çünkü sistem çökmelerini önlemek için bunları 1.000'lik gruplar halinde işler.
Bu komut dosyası nasıl çalışır?
- Bu komut dosyası, bir anahtar kelime listesi (keywords.txt) ve bir konu listesi (topics.txt) içe aktarır.
- Daha sonra konuları ve anahtar kelime listelerini analiz eder ve bunları en yakın eşleşmeyle eşleştirir. Bir eşleşme bulamazsa, onu diğer olarak sınıflandırır.
- Sonuçlar daha sonra bir CSV dosyasına aktarılır.
Bu betiği al
import pandas as pd import spacy from spacy.lang.en.stop_words import STOP_WORDS # Load the Spacy English language model nlp = spacy.load("en_core_web_sm") # Define the batch size for keyword analysis BATCH_SIZE = 1000 # Load the keywords and topics files as Pandas dataframes keywords_df = pd.read_csv("keywords.txt", header=None, names=["keyword"]) topics_df = pd.read_csv("topics.txt", header=None, names=["topic"]) # Define a function to categorize a keyword based on the closest related topic def categorize_keyword(keyword): # Tokenize the keyword tokens = nlp(keyword.lower()) # Remove stop words and punctuation tokens = [token.text for token in tokens if not token.is_stop and not token.is_punct] # Find the topic that has the most token overlaps with the keyword max_overlap = 0 best_topic = "Other" for topic in topics_df["topic"]: topic_tokens = nlp(topic.lower()) topic_tokens = [token.text for token in topic_tokens if not token.is_stop and not token.is_punct] overlap = len(set(tokens).intersection(set(topic_tokens))) if overlap > max_overlap: max_overlap = overlap best_topic = topic return best_topic # Define a function to process a batch of keywords and return the results as a dataframe def process_keyword_batch(keyword_batch): results = [] for keyword in keyword_batch: category = categorize_keyword(keyword) results.append({"keyword": keyword, "category": category}) return pd.DataFrame(results) # Initialize an empty dataframe to hold the results results_df = pd.DataFrame(columns=["keyword", "category"]) # Process the keywords in batches for i in range(0, len(keywords_df), BATCH_SIZE): keyword_batch = keywords_df.iloc[i:i+BATCH_SIZE]["keyword"].tolist() batch_results_df = process_keyword_batch(keyword_batch) results_df = pd.concat([results_df, batch_results_df]) # Export the results to a CSV file results_df.to_csv("results.csv", index=False)
SEO için Python ile Çalışmak
Python, SEO uzmanları için inanılmaz derecede güçlü ve çok yönlü bir araçtır.
İster yeni başlayan ister deneyimli bir uygulayıcı olun, bu makalede paylaştığım ücretsiz komut dosyaları SEO'da Python'un olanaklarını keşfetmek için harika bir başlangıç noktası sunuyor.
Sezgisel sözdizimi ve geniş kitaplık yelpazesiyle Python, sıkıcı görevleri otomatikleştirmenize, karmaşık verileri analiz etmenize ve web sitenizin performansı hakkında yeni bilgiler edinmenize yardımcı olabilir. Öyleyse neden denemiyorsunuz?
İyi şanslar ve mutlu kodlamalar!
Bu makalede ifade edilen görüşler, konuk yazara aittir ve Search Engine Land olmak zorunda değildir. Personel yazarları burada listelenir.