Lewati ke konten utama

Data Science untuk Search Engine Marketing (SEM)

Dalam tutorial ini, data science berpadu dengan Search Engine Marketing: pelajari membuat kampanye Google AdWords dengan menghasilkan kata kunci dan templat iklan menggunakan Python!
Diperbarui 28 Sep 2026  · 15 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Selama dua tahun menjadi pengguna setia DataCamp, saya banyak belajar. Bisnis utama saya adalah pemasaran online, dan saya sangat terbantu oleh keterampilan data science yang saya pelajari. Sekarang saya mampu mengelola kampanye yang jauh lebih besar dan kompleks, serta memeliharanya secara efisien. Karena saya sudah cukup akrab dengan konten, berbagai topik, dan paket di R dan Python, saya berpikir bagaimana cara membuat kampanye penelusuran untuk DataCamp sebagai latihan.

Dalam tutorial ini, Anda akan membahas topik-topik berikut:

  • Pertama, Anda akan mempelajari lebih lanjut tentang Search Engine Marketing (SEM) dan kampanye penelusuran;
  • Kemudian, Anda akan menelaah lebih dekat studi kasus bisnis yang ada;
  • Selanjutnya, Anda akan menghasilkan kata kunci untuk instruktur, teknologi, kursus, dan topik DataCamp.
  • Dengan kata kunci yang sudah siap, Anda dapat mulai membuat iklan. Anda akan menyusun strategi terlebih dahulu, lalu mulai membuat templat iklan.

Search Engine Marketing (SEM) dan Kampanye

Apa itu SEM?

SEM adalah salah satu cara paling efektif untuk mengembangkan bisnis Anda di pasar yang semakin kompetitif. Ini adalah proses mendapatkan lalu lintas situs web dengan membeli iklan di mesin telusur. Google AdWords adalah salah satu bentuk iklan online paling populer: Anda menawar penempatan iklan di tautan bersponsor mesin telusur untuk kata kunci yang terkait dengan bisnis Anda, lalu membayar biaya kepada mesin telusur untuk setiap klik.

Pembayaran per klik bisa menjadi biaya yang cukup besar, sehingga sangat penting untuk merencanakan dan mengelompokkan kata kunci serta iklan sedemikian rupa agar Anda dapat mengendalikan biaya dan, semoga, mendapatkan kampanye yang menguntungkan.

Meskipun proses pasti untuk menentukan harga per klik merupakan rahasia yang dijaga ketat dan bergantung pada banyak faktor, gagasan utamanya adalah semakin relevan iklan Anda, semakin rendah biaya per kliknya.

Menyiapkan Kampanye Penelusuran

Sebelum menyiapkan kampanye, biasanya Anda akan menentukan anggaran, memilih kata kunci, dan memeriksa kompetitor. Selain itu, Anda akan memastikan halaman arahan sudah siap. Setelah itu, Anda dapat menyiapkan kampanye: menulis iklan pertama, menetapkan detailnya, lalu menyiapkan pelacakan konversi. Tutorial ini terutama akan membahas proses menghasilkan banyak kata kunci dan iklan, berdasarkan berbagai halaman arahan yang kita miliki.

Nah, sebelum mulai, mari kita lihat dulu apa sebenarnya kampanye penelusuran ini!

Grup Iklan

Untuk memulai kampanye penelusuran, pertama-tama Anda perlu menyusun rencana untuk grup iklan Anda. Ini adalah unit organisasi dasar tempat Anda memetakan kata kunci, iklan, dan halaman arahan. Namun, apa sebenarnya ketiga komponen ini?

  1. Kata kunci: niat pengguna, apa yang mereka cari.
  2. Iklan: janji Anda kepada pengguna untuk niat tersebut.
  3. Halaman arahan: realisasi janji Anda.

Pemetaan ketiga elemen tersebut dengan benar mencakup sekitar 70–80% pekerjaan. Jika Anda benar di bagian ini, pemeliharaan dan perubahan akan menjadi jauh lebih mudah.

Ini berarti, agar spesifik dan relevan bagi pengguna, Anda perlu mempromosikan produk yang Anda miliki, dan terutama fokus mengarahkan orang yang tepat ke halaman yang tepat, melalui pesan atau ekspektasi yang tepat. Struktur kampanye yang baik mencerminkan dan mengikuti struktur situs web, yang pada dasarnya mencerminkan strategi bisnis.

Catatan bahwa setiap grup iklan perlu menjadi bagian dari sebuah kampanye. Pada level kampanye, Anda memiliki pengaturan yang mengatur semua grup iklan dalam kampanye, seperti penargetan bahasa, lokasi, perangkat, waktu dalam sehari, dan sebagainya.

Kampanye Penelusuran, Langkah demi Langkah

Pada bagian sebelumnya, Anda melihat kampanye penelusuran dari tingkat tinggi: Anda melihat bahwa kata kunci, iklan, dan halaman arahan adalah bagian dari grup iklan dan bahwa Anda perlu menyusun rencana untuk unit organisasi dasar ini, tempat Anda memetakan ketiga komponen sehingga mencerminkan strategi bisnis Anda. Pada bagian ini, Anda akan menyelami lebih dalam apa yang dapat Anda lakukan untuk menyiapkan kampanye, dengan fokus pada langkah-langkah yang akan Anda jalani dalam tutorial ini.

Search Engine Marketing Campaigns Data Science

Seperti yang ditunjukkan di atas, inilah pemetaan yang ingin Anda capai. Sebagai keluaran, Anda ingin memiliki dua DataFrame utama: satu untuk kata kunci dan satu lagi untuk iklan. Anda dapat melihat seperti apa tampilannya di bawah.

Kampanye Grup Iklan Kata Kunci
campaign 1 adgroup 1 keyword 1
campaign 1 adgroup 2 keyword 2
campaign 2 adgroup 1 keyword 3
campaign 2 adgroup 1 keyword 4
campaign 2 adgroup 2 keyword 5
Kampanye Grup Iklan URL Tampilan URL Final Headline 1 Headline 2
campaign 1 adgroup 1 datacamp.com datacamp.com/a Headline 1 Headline 1a
campaign 1 adgroup 2 datacamp.com datacamp.com/b Headline 1 Headline 1a
campaign 2 adgroup 1 datacamp.com datacamp.com/c Headline 1 Headline 1a
campaign 2 adgroup 2 datacamp.com datacamp.com/d Headline 2 Headline 2a
campaign 2 adgroup 3 datacamp.com datacamp.com/e Headline 3 Headline 1a

Setelah ini selesai, Anda siap mengunggahnya sebagai file Comma-separated Value (CSV) ke Google AdWords atau platform lain yang bekerja dengan cara yang sama. Google AdWords adalah platform penelusuran berbayar yang paling populer digunakan oleh pemasar penelusuran, selain Bing Ads, Yandex, Baidu, dan lainnya.

Catatan bahwa jika Anda ingin mengimpor data ke platform lain dan bukan Google Adwords atau Bing Ads, Anda perlu melakukan penyesuaian kecil!

Kasus Bisnis: DataCamp

Seperti yang Anda baca di pendahuluan, Anda ingin membuat kampanye penelusuran untuk DataCamp. Melihat berbagai cara seseorang dapat menunjukkan minat pada produk yang ditawarkan perusahaan ini, yakni pendidikan data science, Anda dapat dengan mudah menyusun daftar awal beberapa cara tersebut:

  1. Instruktur: 'Hadley Wickham course', 'courses by Garrett Grolemund', dan sebagainya.
  2. Teknologi: 'python course', 'r courses', 'sql data science course', dan sebagainya.
  3. Kursus: nama kursus spesifik yang kami miliki; 'unsupervised learning in python', 'deep learning in python', dan sebagainya.
  4. Topik: 'machine learning courses', 'data visualization course', dan sebagainya.
  5. Paket/pustaka: 'learn ggplot', 'matplotlib tutorial', dan sebagainya.

Dalam tutorial ini, Anda tidak akan melalui fase riset kata kunci tradisional, karena Anda memiliki kekuatan bahasa pemrograman untuk menghasilkan semua kombinasi yang mungkin dan mengelompokkannya ke dalam kampanye serta grup iklan masing-masing.

Karena itu, Anda membutuhkan dua hal utama untuk melakukan penyiapan ini:

  • Pengetahuan produk: mengetahui kursus dan topik apa yang dimiliki DataCamp, bagaimana mereka diorganisasi di situs, dan bagaimana dikelompokkan. Anda dapat mengetahuinya dengan menjelajah, dan Anda pasti akan mendapatkan wawasan yang lebih baik dengan pengetahuan internal (terutama jika ada perubahan yang direncanakan!).
  • Kata kunci relevan: semua cara yang mungkin digunakan seseorang untuk menyatakan minat pada hal yang Anda sediakan. Dalam kasus DataCamp, itu adalah 'course', 'learn', 'education', 'tutorial', dan sebagainya. Anda dapat melakukannya dengan brainstorming, melihat alat kata kunci, dan metode lain.

Pembuatan Kata Kunci untuk Kampanye SEM Anda

Mari mulai dengan menghasilkan kata kunci!

1. Hasilkan Kata Kunci Instruktur

Kampanye ini akan menargetkan orang yang mencari kursus oleh salah satu instruktur di DataCamp.

Anda dapat membatasi kata kunci pada "course by <instructor name>" atau memilih set kata kunci luas yang hanya menargetkan nama instruktur. Pada awalnya, lebih baik menargetkan nama dengan 'course' atau 'courses' dan melihat hasilnya.

Anda juga perlu memeriksa apakah ada nama yang juga kebetulan merupakan nama tokoh terkenal lain, atau nama yang sangat umum, maka Anda perlu membatasi kata kunci untuk instruktur tersebut.

Mulailah dengan mengambil nama instruktur dan URL masing-masing:

import requests
from bs4 import BeautifulSoup


instructors_page = 'https://www.datacamp.com/instructors?all=true'
instructor_link_selector = '.instructor-block__description .instructor-block__link' # CSS class of the link
instructor_name_selector = '.mb-sm'  # CSS class of the name

instructor_resp = requests.get(instructors_page)
soup = BeautifulSoup(instructor_resp.text, 'lxml')

instructor_urls = [url['href'] for url in soup.select(instructor_link_selector)]
instructor_names = [name.text.strip() for name in soup.select(instructor_name_selector)]
instructor_urls = ['https://www.datacamp.com' + url for url in instructor_urls]

Masukkan ke dalam DataFrame untuk digunakan nanti. URL akan digunakan kemudian untuk membuat iklan.

instructor_df = pd.DataFrame({
    'name': instructor_names,
    'url': instructor_urls
})
print(instructor_df.shape)
instructor_df.head()
(72, 2)
  name url
0 Filip Schouwenaars https://www.datacamp.com/instructors/filipsch
1 Jonathan Cornelissen https://www.datacamp.com/instructors/jonathana...
2 Hugo Bowne-Anderson https://www.datacamp.com/instructors/hugobowne
3 Greg Wilson https://www.datacamp.com/instructors/greg48f64...
4 Nick Carchedi https://www.datacamp.com/instructors/nickyc


Sekarang setelah Anda memiliki nama instruktur, Anda akan menggunakan templat di mana Anda menggabungkan setiap nama dengan sekumpulan kata kunci terkait topik Anda, yang utamanya adalah kursus oleh instruktur.

Variabel yang digunakan dalam kode di bawah:

col_names: Ini adalah daftar nama header tabel yang akan kita unggah ke Google AdWords.
words: Kata yang akan Anda gabungkan dengan nama instruktur untuk menghasilkan kata kunci/frasa lengkap.
match_types: Detail lebih lanjut dapat ditemukan di Pusat bantuan AdWords, namun berikut dasarnya.
[data science course], "data science course", dan data science course secara teknis adalah tiga kata kunci berbeda.

  • exact match (di dalam tanda kurung), hanya akan memicu iklan jika pengguna mencari kata kunci itu persis, misalnya 'data science course', ditulis persis seperti ini.
  • phrase match (dengan tanda kutip), akan memicu iklan jika pengguna mencari string yang persis sama ditambah apa pun sebelum atau sesudahnya. Jadi "best data science course", atau "data science course online" akan memicu iklan kita.
  • broad match (tanpa tanda baca) akan memicu iklan jika seseorang mencari apa pun yang mirip atau terkait dengan 'data science course'. Ini tergantung algoritma Google, dan Anda harus berhati-hati, karena iklan mungkin terpicu saat seseorang mencari 'data science platform' misalnya, yang tidak persis seperti yang kita promosikan. Saya lebih suka menggunakan modified broad match, karena sedikit membatasi penargetan. Ini pada dasarnya memicu iklan jika seseorang mencari turunan dari kata tersebut, dan bukan kata lain yang mirip makna. Ditandai dengan tanda '+' di awal kata. Jadi, '+game' akan memicu iklan oleh 'gaming', 'gamers', tetapi tidak oleh 'play'.
col_names = ['Campaign', 'Ad Group', 'Keyword', 'Criterion Type']
instructor_keywords = []

words = ['course', 'courses', 'learn', 'data science', 'data camp', 'datacamp']
match_types = ['Exact', 'Phrase', 'Broad']
for instructor in instructor_df['name']:
    for word in words:
        for match in match_types:
            if match == 'Broad':
                keyword = '+' + ' +'.join([instructor.replace(' ', ' +').lower(), word])  # modified broach match
            else:
                keyword = instructor.lower() + ' ' + word
            row = ['SEM_Instructors',  # campaign name
                   instructor,  # ad group name
                   keyword, # instructor <keyword>
                   match]  # keyword match type
            instructor_keywords.append(row)

# do the same by having the keywords come before the instructor name
for instructor in instructor_df['name']:
    for word in words:
        for match in match_types:
            if match == 'Broad':
                keyword = '+' + ' +'.join([word, instructor.replace(' ', ' +').lower()])
            else:
                keyword = word + ' ' + instructor.lower() 
            row = ['SEM_Instructors',  # campaign name
                   instructor,  # ad group name
                   keyword, # <keyword> instructor 
                   match]  # keyword match type
            instructor_keywords.append(row)


instructor_keywords_df = pd.DataFrame.from_records(instructor_keywords, 
                                                   columns=col_names)
print('total keywords:', instructor_keywords_df.shape[0])
instructor_keywords_df.head()
total keywords: 2592
  Kampanye Grup Iklan Kata Kunci Jenis Kriteria
0 SEM_Instructors Filip Schouwenaars filip schouwenaars course Exact
1 SEM_Instructors Filip Schouwenaars filip schouwenaars course Phrase
2 SEM_Instructors Filip Schouwenaars +filip +schouwenaars +course Broad
3 SEM_Instructors Filip Schouwenaars filip schouwenaars courses Exact
4 SEM_Instructors Filip Schouwenaars filip schouwenaars courses Phrase


Pada dasarnya, yang Anda lakukan adalah melakukan loop pada nama instruktur, semua kata kunci yang berbeda, dan semua jenis kecocokan yang kita miliki, sehingga kita memiliki semua kombinasi yang mungkin. Kita melakukannya dua kali, sekali untuk templat 'nama instruktur kata kunci' dan 'kata kunci nama instruktur'.

Sekarang Anda cukup mengulang hal yang sama untuk semua segmen kita dengan sedikit modifikasi pada kata kunci, dan bagaimana kita mengekstrak data.

Pedoman bagus yang saya pelajari dari R for Data Science adalah jika Anda akan menyalin dan menempel lebih dari dua kali, saatnya menulis fungsi!

def generate_keywords(topics, keywords, match_types=['Exact', 'Phrase', 'Broad'],
                     campaign='SEM_Campaign'):
    col_names = ['Campaign', 'Ad Group', 'Keyword', 'Criterion Type']
    campaign_keywords = []

    for topic in topics:
        for word in keywords:
            for match in match_types:
                if match == 'Broad':
                    keyword = '+' + ' +'.join([topic.lower().replace(' ', ' +'), word.replace(' ', ' +')])
                else:
                    keyword = topic.lower() + ' ' + word
                row = [campaign,  # campaign name
                       topic,  # ad group name
                       keyword, # instructor <keyword>
                       match]  # keyword match type
                campaign_keywords.append(row)

    # I said more than twice! :)             
    for topic in topics:
        for word in keywords:
            for match in match_types:
                if match == 'Broad':
                    keyword = '+' + ' +'.join([word.replace(' ', ' +'), topic.lower().replace(' ', ' +')])
                else:
                    keyword = word + ' ' + topic.lower()
                row = [campaign,  # campaign name
                       topic,  # ad group name
                       keyword, # <keyword> instructor
                       match]  # keyword match type
                campaign_keywords.append(row)

    return pd.DataFrame.from_records(campaign_keywords, columns=col_names)

Mari kita coba:

topics = ['Data Science', 'Machine Learning']
keywords = ['course', 'tutorial']
generate_keywords(topics, keywords).head(10)
  Kampanye Grup Iklan Kata Kunci Jenis Kriteria
0 SEM_Campaign Data Science data science course Exact
1 SEM_Campaign Data Science data science course Phrase
2 SEM_Campaign Data Science +data +science +course Broad
3 SEM_Campaign Data Science data science tutorial Exact
4 SEM_Campaign Data Science data science tutorial Phrase
5 SEM_Campaign Data Science +data +science +tutorial Broad
6 SEM_Campaign Machine Learning machine learning course Exact
7 SEM_Campaign Machine Learning machine learning course Phrase
8 SEM_Campaign Machine Learning +machine +learning +course Broad
9 SEM_Campaign Machine Learning machine learning tutorial Exact


Ini terlihat bagus. Sekarang mari hasilkan topik dan kata kunci yang relevan untuk masing-masing segmen Anda!

2. Kata Kunci Teknologi

topics = ['R', 'Python', 'SQL', 'Git', 'Shell']  # listed on the /courses page
keywords = ['data science', 'programming', 'analytics', 'data analysis', 'machine learning',
            'deep learning', 'financial analysis', 'data viz', 'visualization', 'data visualization',
            'learn', 'course', 'courses', 'education', 'data import', 'data cleaning', 
            'data manipulation', 'probability', 'stats', 'statistics', 'course', 'courses',
           'learn', 'education', 'tutorial']  # @marketing_team: this list can / should be refined or 
                                              # expanded based on the strategy and how specific the 
                                              # targeting needs to be
tech_keywords = generate_keywords(topics, keywords, campaign='SEM_Technologies')
print('total keywords:', tech_keywords.shape[0])
tech_keywords.head()
total keywords: 750
  Kampanye Grup Iklan Kata Kunci Jenis Kriteria
0 SEM_Technologies R r data science Exact
1 SEM_Technologies R r data science Phrase
2 SEM_Technologies R +r +data +science Broad
3 SEM_Technologies R r programming Exact
4 SEM_Technologies R r programming Phrase

3. Menghasilkan Kata Kunci Kursus

Ini mungkin yang paling spesifik, dan karenanya paling relevan untuk menargetkan orang. Jika seseorang mencari "data visualization with r" dan DataCamp memiliki kursus tersebut, maka iklannya akan sangat relevan, karena Anda akan memiliki halaman arahan yang tepat untuk memenuhi kebutuhan pengguna itu.

Namun ada satu masalah kecil. Beberapa nama kursus tidak sesuai dengan apa yang biasanya dicari pengguna: 'Machine Learning with the Experts: School Budgets', 'Sentiment Analysis in R: The Tidy Way'. Ini bukan nama kursus yang buruk, tetapi perlu perhatian dalam memilih kata kunci yang mungkin digunakan orang untuk mencarinya.

Sekali lagi, Anda dapat melakukan scrape nama dan URL terkait seperti yang Anda lakukan pada kampanye instruktur:

courses_page = 'https://www.datacamp.com/courses/all'
course_link_selector = '.courses__explore-list .course-block'

course_resp = requests.get(courses_page)
soup = BeautifulSoup(course_resp.text, 'lxml')

course_urls = [link.contents[1]['href'] for link in soup.select(course_link_selector)] 
course_urls = ['https://www.datacamp.com' + url for url in course_urls]
course_names = [link.h4.text for link in soup.select(course_link_selector)]
course_df = pd.DataFrame({
    'name': course_names,
    'url': course_urls
})
course_df['name_clean'] = course_df.name.str.replace('\(.*\)', '').str.strip()  # remove (part x)
print('total keywords:', course_df.shape[0])
course_df.head()
total keywords: 104
  name url name_clean
0 Intro to Python for Data Science https://www.datacamp.com/courses/intro-to-python-for-data-science... Intro to Python for Data Science
1 Introduction to R https://www.datacamp.com/courses/free-introduction-to-r... Introduction to R
2 Intermediate Python for Data Science https://www.datacamp.com/courses/intermediate-python... Intermediate Python for Data Science
3 Introduction to Git for Data Science https://www.datacamp.com/courses/introduction-to-git... Introduction to Git for Data Science
4 Intermediate R https://www.datacamp.com/courses/intermediate-r Intermediate R


Anda akan melakukan hal yang sama (menggunakan fungsi generate_keywords()) untuk kursus, tetapi Anda perlu berhati-hati, karena perlu ditinjau, seperti disebutkan di atas, beberapa nama tidak benar-benar sesuai dengan apa yang dicari orang, dan Anda hanya perlu menangani itu kasus per kasus. Berikut ini cukup baik untuk awal, lalu Anda dapat melihat datanya dan mengambil keputusan.

Perlu dicatat bahwa penggunaan karakter kosong di bawah ini bukanlah kesalahan. Nama kursus cukup panjang dan spesifik sehingga layak menjadi kata kunci itu sendiri, tanpa harus menambahkan kata kualifikasi lain seperti 'learn' atau 'course'. Jadi Anda akan menggunakan nama kursus saja, serta dengan kata kualifikasi.

keywords = ['', 'learn', 'course', 'courses', 'tutorial', 'education']
course_keywords = generate_keywords(course_df['name_clean'], keywords, campaign='SEM_Courses')
print('total keywords:', course_keywords.shape[0])
course_keywords.head(10)
total keywords: 3744
  Kampanye Grup Iklan Kata Kunci Jenis Kriteria
0 SEM_Courses Intro to Python for Data Science intro to python for data science Exact
1 SEM_Courses Intro to Python for Data Science intro to python for data science Phrase
2 SEM_Courses Intro to Python for Data Science +intro +to +python +for +data +science + Broad
3 SEM_Courses Intro to Python for Data Science intro to python for data science learn Exact
4 SEM_Courses Intro to Python for Data Science intro to python for data science learn Phrase
5 SEM_Courses Intro to Python for Data Science +intro +to +python +for +data +science +learn Broad
6 SEM_Courses Intro to Python for Data Science intro to python for data science course Exact
7 SEM_Courses Intro to Python for Data Science intro to python for data science course Phrase
8 SEM_Courses Intro to Python for Data Science +intro +to +python +for +data +science +course Broad
9 SEM_Courses Intro to Python for Data Science intro to python for data science courses Exact

4. Kata Kunci untuk Topik

Ini pada dasarnya adalah topik generik yang mungkin diminati orang untuk dicari. Topik-topik ini tercakup oleh bagian 'tracks', yang memiliki subbagian skills dan career. Untuk tujuan Anda, semuanya dapat dikelompokkan dalam kampanye yang sama. Prosesnya kembali sama, seperti yang telah Anda lakukan pada bagian sebelumnya!

Skills

skills_page = 'https://www.datacamp.com/tracks/skill'
skills_link_selector = '#all .shim'

skills_resp = requests.get(skills_page)
skill_soup = BeautifulSoup(skills_resp.text, 'lxml')

skills_urls = [link['href'] for link in skill_soup.select(skills_link_selector)] 
skills_names = [skill.replace('/tracks/', '').replace('-', ' ') for skill in skills_urls]
skills_urls = ['https://www.datacamp.com' + url for url in skills_urls]

Careers

career_page = 'https://www.datacamp.com/tracks/career'
career_link_selector = '#all .shim'

career_resp = requests.get(career_page)
career_soup = BeautifulSoup(career_resp.text, 'lxml')

career_urls = [link['href'] for link in career_soup.select(career_link_selector)] 

career_names = [career.replace('/tracks/', '').replace('-', ' ') for career in career_urls]
career_urls = ['https://www.datacamp.com' + url for url in career_urls]
tracks_df = pd.DataFrame({
    'name': skills_names + career_names,
    'url': skills_urls + career_urls
})
tracks_df['name'] = [x.title() for x in tracks_df['name']]
tracks_df.head()
tracks_keywords = generate_keywords(tracks_df['name'], keywords, campaign='SEM_Tracks')
print('total keywords:', tracks_keywords.shape[0])
tracks_keywords.head()
total keywords: 720
  Kampanye Grup Iklan Kata Kunci Jenis Kriteria
0 SEM_Tracks R Programming r programming Exact
1 SEM_Tracks R Programming r programming Phrase
2 SEM_Tracks R Programming +r +programming + Broad
3 SEM_Tracks R Programming r programming learn Exact
4 SEM_Tracks R Programming r programming learn Phrase

Terakhir, gabungkan semua kata kunci yang tercantum dalam instructor_keywords, tech_keywords, course_keywords, dan tracks_keywords agar semuanya terkumpul dalam satu DataFrame besar:

full_keywords_df = pd.concat([instructor_keywords_df, tech_keywords, course_keywords, tracks_keywords])
print('total keywords:', full_keywords_df.shape[0])
print('total campaigns:', len(set(full_keywords_df['Campaign'])))
print('total ad groups:', len(set(full_keywords_df['Ad Group'])))
full_keywords_df.to_csv('keywords.csv', index=False)
full_keywords_df.head()
total keywords: 7806
total campaigns: 4
total ad groups: 191
  Kampanye Grup Iklan Kata Kunci Jenis Kriteria
0 SEM_Instructors Filip Schouwenaars filip schouwenaars course Exact
1 SEM_Instructors Filip Schouwenaars filip schouwenaars course Phrase
2 SEM_Instructors Filip Schouwenaars +filip +schouwenaars +course Broad
3 SEM_Instructors Filip Schouwenaars filip schouwenaars courses Exact
4 SEM_Instructors Filip Schouwenaars filip schouwenaars courses Phrase

Sekarang Anda siap melangkah dengan kata kunci Anda! Jika Anda ingin melihat seluruh set data, dapatkan di sini. Berikutnya, Anda perlu membuat iklan untuk masing-masing grup iklan.

Mari kita buat iklannya.

Pembuatan Iklan dan Copywriting

Saat ini Anda memiliki hal-hal berikut:

  • Nama kampanye dan grup iklan yang sudah dipetakan dengan benar satu sama lain dalam DataFrame full_keywords_df
  • Nama grup iklan dan URL terkait dari scraping sebelumnya (kursus, instruktur, dan tracks), dan Anda perlu membuatnya untuk teknologi.

Dengan ini, Anda dapat mengikuti rencana berikut:

  1. Buat templat iklan untuk digunakan (2–3 sudah cukup untuk memulai)
  2. Buat kolom Campaign dan tambahkan ke DataFrame ('name', 'url')
  3. Gabungkan semua DataFrame ('name', 'url') menjadi satu yang besar
  4. Hasilkan semua iklan untuk semua grup iklan; ini terdiri dari bidang-bidang berikut untuk setiap iklan (ini akan menjadi kolom baru dalam DataFrame yang sama yang sedang Anda kerjakan):

    • Headline 1: maksimal 30 karakter
    • Headline 2: maksimal 30 karakter
    • URL Tampilan: diinferensi otomatis dari URL final
    • URL Final: jalur lengkap tempat pengguna akan berakhir (harus domain yang sama dengan URL tampilan
  5. Pastikan pekerjaan konsisten dengan DataFrame keywords

  6. Unggah dan luncurkan kampanye!

Menghasilkan iklan berarti mengganti nama topik (kursus, teknologi, instruktur, dll.) pada tempatnya di templat, dan membuat 2–3 variasi iklan untuk masing-masing grup iklan yang Anda miliki.

Python SEM Campaign

Templat Iklan

Satu hal penting untuk diperhatikan adalah meskipun memasukkan nama grup iklan ke tempatnya merupakan proses yang mudah, masalahnya adalah Anda perlu memastikan panjang setiap bidang berada di bawah batas yang disebutkan di atas. Dan karena nama kursus dan topik Anda sangat bervariasi, Anda perlu melihat apa yang bisa dilakukan.

Mari kita lihat seberapa besar masalahnya:

%matplotlib inline
import matplotlib.pyplot as plt
adgroup_lengths = pd.Series([len(adgrp) for adgrp in full_keywords_df['Ad Group'].unique()])
long_adgroups = sum(adgroup_lengths > 30)
plt.figure(figsize=(9,6))
plt.hist(adgroup_lengths, rwidth=0.9, bins=50)
plt.vlines(x=30, ymin=0, ymax=10, colors='red')
plt.title(str(long_adgroups) + ' ad group name lenghts > 30 (don\'t fit in a headline)',  fontsize=17)
plt.xlabel('Ad Group Name Lengths', fontsize=15)
plt.ylabel('Count', fontsize=15)
plt.yticks(range(11))
plt.xticks(range(0, 51, 5))
plt.grid(alpha=0.5)
plt.show()

Search Engine Marketing Data Science Python

Tampaknya masalah Anda tidak sepele, dan tidak ada cara langsung untuk menanganinya. Idealnya, Anda ingin kedua headline memuat judul lengkap produk (kursus) yang kita promosikan.

Saya memikirkan berbagai cara untuk mengatasinya, dan memutuskan menulis algoritma sederhana yang membagi nama menjadi dua frasa, masing-masing berisi maksimal tiga puluh karakter.

Algoritma ini tidak cocok untuk penggunaan umum, dan perlu sedikit penyesuaian agar umum, tetapi cukup baik untuk kumpulan data ini:

def split_string(string, splits=2, max_len=60):
    """Split `string` into `splits` words, each shorter than `max_len` / `splits`"""
    if len(string) < max_len / splits:
        return string, ''
    str_words = string.split(' ')
    result = ''
    for i, word in enumerate(str_words):
        if len(result + ' ' + word) <= max_len / splits:
            result += word + ' '
        else:
            break
    spaces = result.strip().count(' ')
    result2 = string[string[len(result):].index(word) + len(result):]
    return result.strip(), result2
print(split_string('this is a very long course name that needs splitting', 2, 60))
print(split_string('short course name', 2, 60))
('this is a very long course', 'name that needs splitting')
('short course name', '')

Ini bukan sesuatu yang biasanya saya lakukan, tetapi saya menyukai teknik ini, dan saya pikir saya akan menggunakannya saat membuat kampanye lain. Itu efek samping yang menyenangkan dari menulis tutorial!

Sekarang mari pikirkan templat yang ingin Anda tulis.

Templat iklan umum yang saya gunakan terdiri dari elemen berikut (biasanya dalam urutan ini).

  • Produk: jika saya mencari 'data science course' di Google, saya perlu melihat 'data science course' di tautan/iklan di suatu tempat.
  • Manfaat: ini adalah hal emosional/psikologis yang sebenarnya dicari orang, di luar sekadar menyelesaikan kursus, 'tingkatkan karier Anda', 'menonjol dari kerumunan'.
  • Fitur: setelah Anda menjanjikan bulan, tunjukkan bagaimana Anda akan membawa saya ke sana! 'lebih dari 100 kursus data science', 'belajar dari pakar teratas', 'dapatkan umpan balik instan atas keterampilan coding Anda'.
  • Ajakan bertindak: baik, Anda sudah memberi tahu saya apa yang Anda punya, memotivasi saya untuk membeli, dan menunjukkan bagaimana saya akan sampai ke sana. Saya yakin. Apa yang harus saya lakukan sekarang? 'daftar uji coba gratis', 'coba bab pertama gratis', 'hemat 20% untuk langganan tahunan'

Tidak mudah memasukkan semuanya dalam satu iklan sepanjang tweet, dan beberapa mungkin tumpang tindih. Namun Anda akan berusaha sebaik mungkin.

  • Headline 1: Ini selalu memuat nama kursus (atau paruh pertama).
  • Headline 2: Paruh kedua nama kursus, atau salah satu dari berikut ini:
    • Tingkatkan Karier Data Science Anda
    • Menonjol dari Keramaian
    • Tangani Pertanyaan yang Kompleks
  • Deskripsi: setiap grup iklan akan memiliki tiga variasi di bawah ini dan akan diputar.
    • Belajar Langsung dari Pakar Teratas di Bidangnya. Diskon 20% untuk Langganan Tahunan
    • Melangkah Lebih Maju, Kuasai Keterampilan Data Science. $29 / Bulan. Bisa Batalkan Kapan Saja
    • Pilih dari Beragam Topik yang Diajarkan oleh yang Terbaik di Dunia. Mulai Sekarang

Buat Kolom Campaign

full_keywords_df.Campaign.unique()  # just to make sure you have consistent naming conventions
array(['SEM_Instructors', 'SEM_Technologies', 'SEM_Courses', 'SEM_Tracks'], dtype=object)
course_df['Campaign'] = 'SEM_Courses'
course_df = course_df.rename(columns={'name_clean': 'name', 'name': 'old_name'})
course_df.head()
  old_name url name Campaign
0 Intro to Python for Data Science https://www.datacamp.com/courses/intro-to-python-for-data-science... Intro to Python for Data Science SEM_Courses
1 Introduction to R https://www.datacamp.com/courses/free-introduction-to-r... Introduction to R SEM_Courses
2 Intermediate Python for Data Science https://www.datacamp.com/courses/intermediate-python... Intermediate Python for Data Science SEM_Courses
3 Introduction to Git for Data Science https://www.datacamp.com/courses/introduction-to-git... Introduction to Git for Data Science SEM_Courses
4 Intermediate R https://www.datacamp.com/courses/intermediate-r Intermediate R SEM_Courses
instructor_df['Campaign'] = 'SEM_Instructors'
instructor_df.head()
  name url Campaign
0 Filip Schouwenaars https://www.datacamp.com/instructors/filipsch SEM_Instructors
1 Jonathan Cornelissen https://www.datacamp.com/instructors/jonathana... SEM_Instructors
2 Hugo Bowne-Anderson https://www.datacamp.com/instructors/hugobowne SEM_Instructors
3 Greg Wilson https://www.datacamp.com/instructors/greg48f64... SEM_Instructors
4 Nick Carchedi https://www.datacamp.com/instructors/nickyc SEM_Instructors
tracks_df['Campaign'] = 'SEM_Tracks'
tracks_df.head()
  name url Campaign
0 R Programming https://www.datacamp.com/tracks/r-programming SEM_Tracks
1 Importing Cleaning Data With R https://www.datacamp.com/tracks/importing-cleaning-data-with-r... SEM_Tracks
2 Data Manipulation With R https://www.datacamp.com/tracks/data-manipulation-with-r... SEM_Tracks
3 Python Programming https://www.datacamp.com/tracks/python-programming... SEM_Tracks
4 Importing Cleaning Data With Python https://www.datacamp.com/tracks/importing-cleaning-data-with-python... SEM_Tracks
tech_domain = 'https://www.datacamp.com/courses/tech:'
tech_domain_list = []
for tech in ['R', 'Python', 'SQL', 'Git', 'Shell']:
    tech_domain_list.append((tech, tech_domain + tech))
tech_df = pd.DataFrame.from_records(tech_domain_list, columns=['name', 'url'])
tech_df['Campaign'] = 'SEM_Technologies'
tech_df
  name url Campaign
0 R https://www.datacamp.com/category/r SEM_Technologies
1 Python https://www.datacamp.com/category/python SEM_Technologies
2 SQL https://www.datacamp.com/category/sql SEM_Technologies
3 Git https://www.datacamp.com/courses/tech:Git SEM_Technologies
4 Shell https://www.datacamp.com/category/shell SEM_Technologies

Gabungkan Semua DataFrame ('name', 'url')

full_ads_df = pd.concat([course_df[['Campaign', 'name', 'url']],
                        instructor_df,
                        tracks_df,
                        tech_df], ignore_index=True)
full_ads_df = full_ads_df.rename(columns={'name': 'Ad Group', 'url': 'Final URL'})
print('total rows:', full_ads_df.shape[0])
n_adgroups = full_ads_df.shape[0]
full_ads_df.head()
total rows: 201
  Campaign Ad Group Final URL
0 SEM_Courses Intro to Python for Data Science https://www.datacamp.com/courses/intro-to-python-for-data-science...
1 SEM_Courses Introduction to R https://www.datacamp.com/courses/free-introduction-to-r...
2 SEM_Courses Intermediate Python for Data Science https://www.datacamp.com/courses/intermediate-python...
3 SEM_Courses Introduction to Git for Data Science https://www.datacamp.com/courses/introduction-to-git...
4 SEM_Courses Intermediate R https://www.datacamp.com/courses/intermediate-r

Buat Iklan

Sekadar melacak posisi Anda. Sekarang Anda memiliki data frame iklan yang berisi kolom Campaign, Ad Group, dan Final URL yang sudah dipetakan dengan benar. Anda perlu menambahkan bidang Headline 1, Headline 2, dan Description.

Ingat bahwa untuk setiap grup iklan Anda akan menambahkan tiga variasi iklan berbeda. Ini praktik yang baik terutama untuk tujuan pengujian, melihat apa yang orang klik, iklan mana yang lebih banyak konversi, dan sebagainya. Anda akan berakhir dengan DataFrame yang jumlah barisnya tiga kali lipat dari yang sekarang.

Mari mulai dengan menggandakan setiap baris tiga kali, di full_ads_df:

full_ads_df = full_ads_df.iloc[[x  for x in range(n_adgroups) for i in range(3)], :] 
print('total rows:', full_ads_df.shape[0])
full_ads_df.head(9)
total rows: 603
  Campaign Ad Group Final URL
0 SEM_Courses Intro to Python for Data Science https://www.datacamp.com/courses/intro-to-python-for-data-science...
0 SEM_Courses Intro to Python for Data Science https://www.datacamp.com/courses/intro-to-python-for-data-science...
0 SEM_Courses Intro to Python for Data Science https://www.datacamp.com/courses/intro-to-python-for-data-science...
1 SEM_Courses Introduction to R https://www.datacamp.com/courses/free-introduction-to-r...
1 SEM_Courses Introduction to R https://www.datacamp.com/courses/free-introduction-to-r...
1 SEM_Courses Introduction to R https://www.datacamp.com/courses/free-introduction-to-r...
2 SEM_Courses Intermediate Python for Data Science https://www.datacamp.com/courses/intermediate-python...
2 SEM_Courses Intermediate Python for Data Science https://www.datacamp.com/courses/intermediate-python...
2 SEM_Courses Intermediate Python for Data Science https://www.datacamp.com/courses/intermediate-python...


Sekarang tambahkan tiga deskripsi berbeda yang Anda buat di atas.

Description = [
    'Learn Directly From the Top Experts in the Field. 20% off Annual Subcriptions',
    'Be Ahead of the Curve, Master Data Science Skills. $29 / Month. Cancel Anytime',
    'Choose From a Wide Variety of Topics Tuaght by the Best in the World. Start Now'   
]
Description = [x for i in range(n_adgroups) for x in Description ]
full_ads_df['Description'] = Description
full_ads_df.head()
  Campaign Ad Group Final URL Description
0 SEM_Courses Intro to Python for Data Science https://www.datacamp.com/courses/intro-to-python-for-data-science... Learn Directly From the Top Experts in the Fie...
0 SEM_Courses Intro to Python for Data Science https://www.datacamp.com/courses/intro-to-python-for-data-science... Be Ahead of the Curve, Master Data Science Ski...
0 SEM_Courses Intro to Python for Data Science https://www.datacamp.com/courses/intro-to-python-for-data-science... Choose From a Wide Variety of Topics Tuaght by...
1 SEM_Courses Introduction to R https://www.datacamp.com/courses/free-introduction-to-r... Learn Directly From the Top Experts in the Fie...
1 SEM_Courses Introduction to R https://www.datacamp.com/courses/free-introduction-to-r... Be Ahead of the Curve, Master Data Science Ski...


Berikutnya, tambahkan Headline 1 dan Headline 2 ke DataFrame. Anda hampir selesai!

benefits = [
    'Boost Your Data Science Career',
    'Stand Out From the Crowd',
    'Tackle Complex Questions'    
]

Manfaat akan dimasukkan sebagai Headline 2 pada kasus di mana panjang nama grup iklan adalah 30 atau kurang. Dalam kasus ini, Anda akan memiliki bidang kosong, yang akan Anda isi dengan salah satu manfaat yang Anda miliki.

benefits = [x for i in range(n_adgroups) for x in benefits]
headlines = [split_string(x) for x in full_ads_df['Ad Group']]
full_ads_df['Headline 1'] = [x[0] for x in headlines]
full_ads_df['Headline 2'] = [x[1] if x[1] else benefits[i] for i, x in enumerate(headlines)]
print('total ads:', full_ads_df.shape[0])
full_ads_df.head(9)
total ads: 603
  Campaign Ad Group Final URL Description Headline 1 Headline 2
0 SEM_Courses Intro to Python for Data Science https://www.datacamp.com/courses/intro-to-python-for-data-science... Learn Directly From the Top Experts in the Fie... Intro to Python for Data Science
0 SEM_Courses Intro to Python for Data Science https://www.datacamp.com/courses/intro-to-python-for-data-science... Be Ahead of the Curve, Master Data Science Ski... Intro to Python for Data Science
0 SEM_Courses Intro to Python for Data Science https://www.datacamp.com/courses/intro-to-python-for-data-science... Choose From a Wide Variety of Topics Tuaght by... Intro to Python for Data Science
1 SEM_Courses Introduction to R https://www.datacamp.com/courses/free-introduction-to-r... Learn Directly From the Top Experts in the Fie... Introduction to R Boost Your Data Science Career
1 SEM_Courses Introduction to R https://www.datacamp.com/courses/free-introduction-to-r... Be Ahead of the Curve, Master Data Science Ski... Introduction to R Stand Out From the Crowd
1 SEM_Courses Introduction to R https://www.datacamp.com/courses/free-introduction-to-r... Choose From a Wide Variety of Topics Tuaght by... Introduction to R Tackle Complex Questions
2 SEM_Courses Intermediate Python for Data Science https://www.datacamp.com/courses/intermediate-python... Learn Directly From the Top Experts in the Fie... Intermediate Python for Data Science
2 SEM_Courses Intermediate Python for Data Science https://www.datacamp.com/courses/intermediate-python... Be Ahead of the Curve, Master Data Science Ski... Intermediate Python for Data Science
2 SEM_Courses Intermediate Python for Data Science https://www.datacamp.com/courses/intermediate-python... Choose From a Wide Variety of Topics Tuaght by... Intermediate Python for Data Science


Seperti yang Anda lihat, "Intro to Python for Data Science" cukup panjang hingga membutuhkan dua bidang, sehingga Anda biarkan apa adanya agar tetap jelas. Pada kasus kedua "Introduction to R" muat di headline pertama, jadi Anda masukkan tiga manfaat berbeda yang Anda buat di Headline 2.

Dan selesai!

Periksa Ulang Detail

Pemeriksaan cepat, untuk memastikan semua nama kampanye dan grup iklan pada kedua DataFrame sama.

ads_check = (full_ads_df[['Campaign', 'Ad Group']]
             .drop_duplicates()
             .sort_values(['Campaign', 'Ad Group'])
             .reset_index(drop=True))
keywords_check = (full_keywords_df[['Campaign', 'Ad Group']]
                  .drop_duplicates()
                  .sort_values(['Campaign', 'Ad Group'])
                  .reset_index(drop=True))

all(ads_check == keywords_check)
True
full_ads_df.to_csv('ads.csv', index=False)

Unggah dan Luncurkan

Seperti dibahas, tutorial ini hanya mencakup langkah-langkah tertentu dalam kampanye SEM dan oleh karena itu memerlukan pemahaman dasar tentang cara kerja pemasaran mesin telusur. Jika Anda ingin mengetahui lebih banyak tentang mekanisme dan detail pengunggahan serta peluncuran grup iklan, Anda dapat melihat panduan AdWords untuk memulai. Untuk mengakses kursus lengkap di berbagai area, Anda dapat melihat Google Academy for Ads.

Data Science dan SEM: Masih Banyak yang Bisa Dieksplorasi!

Dengan dua file CSV yang Anda miliki sekarang, Anda dapat mengunggahnya dan mulai menjalankan kampanye. Anda perlu menetapkan anggaran harian, penargetan geografis, dan beberapa parameter lain, tetapi untuk sebagian besar, Anda sudah siap.

Jika Anda ingin melihat file CSV, Anda dapat menemukannya di sini:

Saya harap Anda merasa tutorial ini bermanfaat. Terima kasih sudah membaca dan jika Anda ingin berbagi proyek pertumbuhan yang Anda lakukan dengan bantuan Python, jangan ragu untuk menghubungi saya di Twitter @eliasdabbas.

Topik
Data Science
Python

Pelajari lebih lanjut tentang Python

{count, plural, one {Kursus} other {Kursus}}

Pengantar Python

{hours} jam
7.1M
Kuasai dasar-dasar analisis data dengan Python dalam 4 jam. Kursus online ini memperkenalkan antarmuka Python dan pustaka populer.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

{count, plural, one {blog} other {blogs}}

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

{count, plural, one {blog} other {blogs}}

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

{count, plural, one {blog} other {blogs}}

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

{count, plural, one {blog} other {blogs}}

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya