Cara Gila Tiara Sunflower Otomatisasi SEO Joomla Pakai Python Tanpa Capek
Biasa kita membuat website melalui blogspot atau situs wordpress, tetapi untuk situs bersifat open source semuanya berbeda.
Mulai dari setting web hingga mendorong “Otomatisasi SEO Joomla pakai Phyton”, nah ini dinamakan situs open source.
Di tahun 2023, Tiara Sunflower pernah menulis artikel SEO untuk klien kami dan mereka menggunakan CMS berbasis Joomla, tentu SEO disana tidak mudah bahkan harus menyelipkan script Phyton di sekitar heading.

Saat nulis disana itu lebih mudah dan simpel dibandingkan nulis di WordPress.
Biasa Joomla menggunakan editor utama bawaan atau pengaturan “TinyMCE” untuk menulis isi artikel.
Saat menulis artikel tetap mengutamakan iOS tetapi ketika diberi imbalan di editor sana= menggunakan editor TinyMCE itu lebih baik.
Dalam Artikel Ini: 2 Pembahasan Otomatisasi SEO Joomla Pakai Python
Ketika membangun website, wordpress dan Blogspot mengatur SEO dengan memasukkan beberapa plugin tanpa input kode melalui javascript.
Python juga mengatasi masalah itu. Dengan memasukkan beberapa baris kode, Anda dapat mengaudit seluruh situs untuk tautan yang rusak, mengambil metadata dari ratusan halaman.
Hingga: mengurai file log untuk mendapatkan wawasan perayapan, atau terhubung ke API apa pun yang menawarkan data SEO terstruktur.
Istilahnya dari pengalaman Tiara Sunflower saat belajar dari praktisi SEO Development dari karyawan sendiri:
“Saat profesional website membangun situs untuk terlihat anggun, enak dilihat bahkan SEO Friendly mereka biasa menggunakan elemen, dan plugin.
Sementara ketika menggunakan Python: hanya dengan menyalin skrip itu lebih cepat dan lebih andal daripada manusia mana pun”.
Begitu dengan CMS Joomla. Pendekatan paling “gila” dan efektif di era modern saat ini adalah menggabungkan AI (Kecerdasan Buatan), Python, dan Joomla REST API menjadi satu mesin otomatis yang bekerja 24 jam.
1. Optimasi Lewat Artikel
Sama seperti cara lainnya, Anda bisa “mengoptimasi artikel melalui Joomla”.
Dilaporkan dari laman Search Engine Land dimana untuk menulis artikel SEO melalui Joomla dan ini wajib menyalin script Python maka caranya bisa kami lansir begini:
Python adalah bahasa pemrograman yang ampuh dan telah mendapatkan popularitas di industri SEO selama beberapa tahun terakhir.
Dengan sintaksnya yang relatif sederhana, kinerja yang efisien, dan banyaknya pustaka serta kerangka kerja, Python telah merevolusi cara banyak praktisi SEO mendekati pekerjaan mereka.
Python menawarkan serangkaian alat serbaguna yang dapat membantu membuat proses optimasi lebih cepat, lebih akurat, dan lebih efektif.
Jika Anda ingin mencoba pemrograman Python, Google Collab layak dipertimbangkan.
Ini adalah platform berbasis web gratis yang menyediakan tempat yang nyaman untuk menulis dan menjalankan kode Python tanpa memerlukan pengaturan lokal yang rumit.
Pada dasarnya, ini memungkinkan Anda mengakses Jupyter Notebook di dalam browser Anda dan menyediakan sejumlah pustaka yang sudah terinstal untuk ilmu data dan pembelajaran mesin.
Selain itu, aplikasi ini dibangun di atas Google Drive, sehingga Anda dapat dengan mudah menyimpan dan berbagi pekerjaan Anda dengan orang lain.
Untuk memulai, ikuti langkah-langkah berikut:
Aktifkan unggahan file
Setelah membuka Google Colab, pertama-tama Anda perlu mengaktifkan kemampuan untuk membuat repositori file sementara. Caranya sangat mudah, cukup klik ikon folder. Ini memungkinkan Anda mengunggah file sementara dan kemudian mengunduh file hasil apa pun.
Akses folder
Unggah data sumber
Banyak skrip Python kami memerlukan file sumber agar dapat berfungsi. Untuk mengunggah file, cukup klik tombol unggah.
Tombol unggah file
Setelah Anda menyelesaikan pengaturan, Anda dapat mulai menguji skrip Python berikut.
Skrip 1: Mengotomatiskan peta pengalihan
Membuat peta pengalihan (redirect map) untuk situs web besar bisa sangat memakan waktu. Menemukan cara untuk mengotomatiskan proses ini dapat membantu kita menghemat waktu dan fokus pada tugas-tugas lain.
Cara kerja skrip ini
Skrip ini berfokus pada analisis konten web untuk menemukan artikel yang sangat cocok.
Pertama, ia mengimpor dua file TXT berisi URL: satu untuk situs web yang dialihkan (source_urls.txt), dan yang lainnya untuk situs yang menyerap situs web yang dialihkan (target_urls.txt).
Kemudian, kita menggunakan pustaka Python Beautiful Soup untuk membuat web scraper guna mendapatkan konten utama halaman. Skrip ini mengabaikan konten header dan footer.
Setelah merayapi konten di semua halaman, ia menggunakan pustaka Python Polyfuzz untuk mencocokkan konten antar URL dengan persentase kemiripan.
Terakhir, program ini mencetak hasilnya dalam file CSV, termasuk persentase kemiripan.
Dari sini, Anda dapat meninjau secara manual URL apa pun dengan persentase kemiripan yang rendah untuk menemukan kecocokan terdekat berikutnya.
Dapatkan naskahnya
#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)
Skrip 2: Menulis meta deskripsi secara massal
Meskipun meta deskripsi bukanlah faktor peringkat langsung, meta deskripsi membantu kita meningkatkan rasio klik-tayang organik. Membiarkan meta deskripsi kosong meningkatkan kemungkinan Google akan membuat meta deskripsinya sendiri.
Jika audit SEO Anda menunjukkan sejumlah besar URL yang tidak memiliki meta deskripsi, mungkin akan sulit untuk meluangkan waktu menulis semuanya secara manual, terutama untuk situs web e-commerce.
Skrip ini bertujuan untuk membantu Anda menghemat waktu dengan mengotomatiskan proses tersebut untuk Anda.
Cara kerja skrip
Pertama, skrip mengimpor daftar URL dari file TXT (urls.txt).
Kemudian, ia menganalisis seluruh konten pada URL tersebut.
Setelah konten diuraikan, sistem akan membuat deskripsi meta yang bertujuan agar panjangnya kurang dari 155 karakter.
Hasilnya diekspor ke dalam file CSV.
Dapatkan naskahnya
!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)
Skrip 3: Menganalisis kata kunci dengan N-gram
N-gram bukanlah konsep baru, tetapi tetap berguna untuk SEO. N-gram dapat membantu kita memahami tema di antara kumpulan data kata kunci yang besar.
Cara kerja skrip ini
Skrip ini menghasilkan output dalam file TXT yang memisahkan kata kunci menjadi unigram, bigram, dan trigram.
Pertama, ia mengimpor file TXT yang berisi semua kata kunci Anda (keyword.txt).
Kemudian, ia menggunakan pustaka Python bernama Counter untuk menganalisis dan mengekstrak N-gram.
Kemudian, hasilnya diekspor ke dalam file TXT baru.
Dapatkan skrip ini
#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”)
Skrip 4: Mengelompokkan kata kunci ke dalam klaster topik
Dalam proyek SEO baru, riset kata kunci selalu berada di tahap awal. Terkadang kita berurusan dengan ribuan kata kunci dalam sebuah dataset, sehingga pengelompokan menjadi sulit.
Python memungkinkan kita untuk secara otomatis mengelompokkan kata kunci ke dalam kelompok yang serupa untuk mengidentifikasi tren dan menyelesaikan pemetaan kata kunci kita.
Cara kerja skrip ini: Skrip ini pertama-tama mengimpor file TXT berisi kata kunci (keywords.txt). Kemudian skrip menganalisis kata kunci menggunakan TfidfVectorizer dan AffinityPropagation. Lalu: sistem akan memberikan nilai numerik pada setiap klaster topik. Hasilnya kemudian diekspor ke dalam file CSV.
Dapatkan skrip ini
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, “”])
Skrip 5: Mencocokkan daftar kata kunci dengan daftar topik yang telah ditentukan sebelumnya
Ini mirip dengan skrip sebelumnya, kecuali bahwa ini memungkinkan Anda untuk mencocokkan daftar kata kunci dengan serangkaian topik yang telah ditentukan sebelumnya.
Ini sangat bagus untuk kumpulan kata kunci yang besar karena memprosesnya dalam kelompok 1.000 kata kunci untuk mencegah kerusakan sistem.
Cara kerja skrip ini
Skrip ini mengimpor daftar kata kunci (keywords.txt) dan daftar topik (topics.txt).
Kemudian, sistem menganalisis topik dan daftar kata kunci, lalu mencocokkannya dengan yang paling sesuai. Jika tidak menemukan kecocokan, sistem akan mengkategorikannya sebagai “lainnya”.
Hasilnya kemudian diekspor ke dalam file CSV.
Dapatkan skrip ini
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)
Bagaimana Cara Menyalinnya?
Pertama:
Anda wajib mengimpor dua file TXT berisi URL: satu untuk situs web yang dialihkan (source_urls.txt), dan yang lainnya untuk situs yang menyerap situs web yang dialihkan (target_urls.txt).
Kemudian Kedua:
Kita menggunakan pustaka Python Beautiful Soup untuk membuat web scraper guna mendapatkan konten utama halaman.
Skrip ini mengabaikan konten header dan footer. Setelah merayapi konten di semua halaman, ia menggunakan pustaka Python Polyfuzz untuk mencocokkan konten antar URL dengan persentase kemiripan.
Terakhir:
Program ini mencetak hasilnya dalam file CSV, termasuk persentase kemiripan. Jadi saat Anda menyalin script ini maka wajib “input secara manual”.
2. Lewat Situs Website
Nah kami juga menyarankan untuk menyalin script Phyton melalui laman “edit html”. Disitu Anda bisa menyalin secara manual.
√ Login ke Joomla Administrator ( Dibagian Menu Setting )
√ Masuk ke System -> Manage -> Plugins, lalu pastikan plugin Web Services dan API Authentication sudah aktif.
√ Masuk ke profil User Anda (Super User), cari tab Joomla API Token, lalu Generate Token. Simpan token rahasia ini baik-baik.
Masukkan script dibawah ini:
name: Auto SEO Joomla
on:
schedule:
– cron: ‘0 8 * * *’ # Berjalan otomatis setiap jam 8 pagi setiap hari
jobs:
run-script:
runs-on: ubuntu-latest
steps:
– nama: Checkout Repo
penggunaan: actions/checkout@v4
– nama: Menyiapkan Python
penggunaan: actions/setup-python@v5
dengan:
versi python: ‘3.10’
– nama: Instal Dependensi
jalankan: pip install requests openai
– nama: Jalankan Skrip
lingkungan:
OPENAI_API_KEY: ${{ rahasia.OPENAI_API_KEY }}
JOOMLA_TOKEN: ${{ rahasia.JOOMLA_TOKEN }}
jalankan: python autoblog.py
Nah sekarang jika semua sudah selesai dilakukan, Anda perlu menunggu waktu sampai 1 bulan penuh agar script di atas bekerja dengan baik.






