Ana içeriğe atla

Arama Motoru Pazarlaması (SEM) için Veri Bilimi

Bu eğitimde, veri bilimi Arama Motoru Pazarlaması ile buluşuyor: Python ile anahtar kelimeler ve reklam şablonları oluşturarak Google AdWords kampanyaları hazırlamayı öğrenin!
Güncel 3 Eki 2026  · 15 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

İki yıldır yoğun bir DataCamp kullanıcısı olarak çok şey öğrendim. Ana işim çevrim içi pazarlama ve edindiğim veri bilimi becerilerinden çok faydalandım. Artık çok daha büyük ve karmaşık kampanyaları yönetebiliyor ve verimli şekilde sürdürebiliyorum. İçeriğe, farklı konulara ve R ile Python’daki paketlere epey aşina olduğum için, bir alıştırma olarak DataCamp için arama kampanyaları nasıl oluşturabileceğimi düşündüm.

Bu eğitimde şu konuların üzerinden geçeceksiniz:

  • Önce Arama Motoru Pazarlaması (SEM) ve arama kampanyaları hakkında daha fazla bilgi edineceksiniz;
  • Ardından ele alacağınız iş senaryosuna daha yakından bakacaksınız;
  • Sonrasında DataCamp’in eğitmenleri, teknolojileri, kursları ve konuları için anahtar kelimeler oluşturacaksınız.
  • Elinizde anahtar kelimeler varken reklam üretimine başlayabilirsiniz. Önce bir strateji belirleyecek, ardından reklam şablonları oluşturacaksınız.

Arama Motoru Pazarlaması (SEM) ve Kampanyalar

SEM nedir?

SEM, rekabetin giderek arttığı bir pazarda işletmenizi büyütmenin en etkili yollarından biridir. Arama motorlarında reklam satın alarak web sitesi trafiği elde etme sürecidir. Google AdWords, çevrim içi reklamcılığın en popüler biçimlerinden biridir: İşletmenizle ilgili anahtar kelimeler için arama motorunun sponsorlu bağlantılar bölümünde reklam yeri için teklif verirsiniz, sonra da her tıklama için arama motoruna bir ücret ödersiniz.

Tıklama başına ödeme ciddi bir maliyete dönüşebilir; bu nedenle maliyetinizi kontrol edebilmek ve tercihen kârlı kampanyalar yürütebilmek için anahtar kelimelerinizi ve reklamlarınızı doğru şekilde planlayıp gruplamanız çok önemlidir.

Tıklama başına fiyatın nasıl belirlendiğine dair kesin süreç çok iyi korunan bir sırdır ve birçok faktöre bağlıdır; ancak temel fikir şudur: Reklamlarınız ne kadar alakalıysa, tıklama başına maliyetiniz o kadar düşük olur.

Bir Arama Kampanyası Kurmak

Bir kampanya kurmadan önce genellikle bir bütçe belirlersiniz, anahtar kelimeleri seçersiniz ve rekabeti incelersiniz. Ayrıca açılış sayfanızın hazır olduğundan emin olursunuz. Sonra kampanyayı kurabilirsiniz: İlk reklamınızı yazar, ayrıntılarını belirlersiniz ve ardından dönüşüm izlemeyi ayarlarsınız. Bu eğitim, ağırlıklı olarak elimizdeki farklı açılış sayfalarına dayanarak çok sayıda anahtar kelime ve reklam üretme sürecini kapsayacaktır.

Ancak başlamadan önce, bu arama kampanyalarının tam olarak ne olduğuna bir göz atalım!

Reklam Grupları

Bir arama kampanyasına başlamak için önce reklam gruplarınız için bir plan geliştirmeniz gerekir. Bu, anahtar kelimeleri, reklamları ve açılış sayfalarını eşlediğiniz temel organizasyon birimidir. Peki bu üç bileşen tam olarak nedir?

  1. Anahtar kelimeler: kullanıcının niyeti, ne aradığı.
  2. Reklamlar: o niyet için kullanıcıya verdiğiniz söz.
  3. Açılış sayfaları: bu sözün teslimi.

Bu üç unsuru doğru şekilde eşlemek işin yaklaşık %70-80’idir. Bunu doğru yaparsanız, bakım ve değişiklikler çok daha kolay hale gelir.

Bu, kullanıcılara spesifik ve ilgili olabilmek için elinizdeki ürünü tanıtmanız ve esas olarak doğru kişiyi doğru mesaja/expectation ile doğru sayfaya yönlendirmeye odaklanmanız gerektiği anlamına gelir. İyi bir kampanya yapısı, esasen iş stratejisini yansıtan web sitesi yapısını yansıtır ve onu takip eder.

Not: Her reklam grubu bir kampanyanın parçası olmalıdır. Kampanya seviyesinde, dil hedefleme, konumlar, cihazlar, günün saatleri gibi kampanyadaki tüm reklam gruplarını yöneten ayarlar bulunur.

Adım Adım Arama Kampanyası

Önceki bölümde arama kampanyalarına kuşbakışı baktınız: Anahtar kelimelerin, reklamların ve açılış sayfalarının bir reklam grubunun parçası olduğunu ve bu üç bileşeni iş stratejinizi yansıtacak şekilde eşleyeceğiniz bu temel organizasyon birimi için bir plan geliştirmeniz gerektiğini gördünüz. Bu bölümde, bu eğitimde ilerleyeceğiniz adımlara odaklanarak kampanya kurmak için neler yapabileceğinize daha derinlemesine ineceksiniz.

Arama Motoru Pazarlaması Kampanyaları Veri Bilimi

Yukarıda gösterildiği gibi, ulaşmak istediğiniz eşleme budur. Çıktı olarak iki ana DataFrame’e sahip olmayı hedeflersiniz: biri anahtar kelimeler, diğeri reklamlar için. Bunun nasıl görüneceğini aşağıda görebilirsiniz.

Kampanya Reklam Grubu Anahtar Kelime
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
Kampanya Reklam Grubu Görünen URL Nihai URL Başlık 1 Başlık 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

Bunlar hazır olduğunda, Virgülle Ayrılmış Değer (CSV) dosyaları olarak Google AdWords’e veya aynı şekilde çalışan diğer platformlara yüklemeye hazırsınız demektir. Google AdWords, Bing Ads, Yandex, Baidu ve diğerlerine ek olarak arama pazarlamacıları tarafından kullanılan açık ara en popüler ücretli arama platformudur.

Not: Verilerinizi Google Adwords veya Bing Ads dışındaki platformlara aktarmak isterseniz küçük ayarlamalar yapmanız gerekecektir!

İş Senaryosu: DataCamp

Girişte okuduğunuz gibi, DataCamp için arama kampanyaları oluşturmak istiyorsunuz. Bu şirketin sunduğu ürüne, yani veri bilimi eğitimine birinin ilgi gösterebileceği farklı yolları düşünürken, bu yollardan bazılarına dair ilk bir listeyi kolayca çıkarabilirsiniz:

  1. Eğitmenler: 'Hadley Wickham course', 'courses by Garrett Grolemund' vb.
  2. Teknolojiler: 'python course', 'r courses', 'sql data science course' vb.
  3. Kurslar: elimizdeki belirli kursların adları; 'unsupervised learning in python', 'deep learning in python' vb.
  4. Konular: 'machine learning courses', 'data visualization course' vb.
  5. Paketler/kütüphaneler: 'learn ggplot', 'matplotlib tutorial' vb.

Bu eğitimde, geleneksel anahtar kelime araştırması aşamasından geçmeyeceksiniz; çünkü tüm olası kombinasyonları oluşturmak ve bunları ilgili kampanya ve reklam gruplarında gruplamak için programlama dilinin gücüne sahipsiniz.

Dolayısıyla bu kurulum için bilmeniz gereken iki ana şey vardır:

  • Ürün bilgisi: DataCamp’in hangi kurs ve konulara sahip olduğunu, web sitesinde nasıl organize edildiğini ve nasıl gruplandığını bilmek. Bunu gezerek öğrenebilirsiniz; dahili bilgiyle (özellikle planlanan değişiklikler varsa!) çok daha iyi içgörüler elde edersiniz.
  • İlgili anahtar kelimeler: Sunduğunuz şeylere birinin ilgi ifade edebileceği tüm olası yollar. DataCamp’in durumunda bu 'course', 'learn', 'education', 'tutorial' vb. olabilir. Bunu beyin fırtınasıyla, anahtar kelime araçlarına bakarak ve diğer yöntemlerle yapabilirsiniz.

SEM Kampanyanız için Anahtar Kelime Üretimi

Hadi anahtar kelimeleri oluşturarak başlayalım!

1. Eğitmen Anahtar Kelimeleri Oluşturun

Bu kampanya, DataCamp’teki eğitmenlerden herhangi birinin kurslarını arayan kişileri hedefleyecektir.

Anahtar kelimeleri "course by <instructor name>" ile sınırlayabilir veya yalnızca eğitmen adını hedefleyen geniş bir anahtar kelime setine gidebilirsiniz. Başlangıçta, adları 'course' veya 'courses' ile hedeflemek ve etkisini görmek daha iyidir.

Elinizdeki bazı adların başka ünlü kişilerin adıyla aynı olup olmadığını veya çok yaygın bir ad olup olmadığını da kontrol etmeniz gerekir; bu durumda o eğitmen için anahtar kelimeleri kısıtlamanız gerekir.

Önce eğitmenlerin adlarını ve her biri için URL’leri alarak başlarsınız:

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]

Bunları ileride kullanmak üzere bir DataFrame’e koyarsınız. URL’ler daha sonra reklam oluşturmak için kullanılacaktır.

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


Artık eğitmenlerin adlarına sahipsiniz; şimdi her adı konunuzla ilgili bir anahtar kelime setiyle birleştirdiğiniz bir şablon kullanacaksınız; bu da esasen eğitmen tarafından verilen kurslardır.

Aşağıdaki kodda kullanılan değişkenler:

col_names: Google AdWords’e yükleyeceğimiz tablonun başlık adlarının listesi.
words: Tam anahtar kelimeleri/ifadeleri üretmek için eğitmen adlarıyla birleştireceğiniz kelimeler.
match_types: Daha fazla ayrıntı için AdWords yardım merkezine bakabilirsiniz; ancak temelleri şöyle.
[data science course], "data science course" ve data science course teknik olarak üç farklı anahtar kelimedir.

  • tam eşleme (köşeli parantez içinde), yalnızca bir kullanıcı örneğin 'data science course' anahtar kelimesini aynen bu şekilde ararsa reklamları tetikler.
  • ifade eşleme (tırnak içinde), kullanıcı tam dizgeyi başına veya sonuna bir şey ekleyerek ararsa reklamlarınızı tetikler. Dolayısıyla "best data science course" veya "data science course online" reklamlarımızı tetikler.
  • geniş eşleme (noktalama yok) birisi 'data science course' ile benzer veya ilişkili bir şey ararsa reklamlarımızı tetikler. Bu, Google’ın algoritmalarına bağlıdır; dikkatli olmalısınız çünkü örneğin 'data science platform' arandığında da reklamları tetikleyebilir; bu ise tam olarak tanıtmaya çalıştığımız şey değildir. Ben, hedeflemeyi biraz daha kısıtladığı için değiştirilmiş geniş eşlemeyi daha çok seviyorum. Bu, temelde birisi kelimenin herhangi bir türevini aradığında reklamları tetikler; anlamca benzer herhangi bir kelimeyi değil. Bu, kelimenin başına '+' işareti konularak gösterilir. Örneğin '+game', 'gaming', 'gamers' tarafından tetiklenir ancak 'play' tarafından tetiklenmez.
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
  Campaign Ad Group Keyword Criterion Type
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


Esasen yaptığınız şey, tüm olası kombinasyonlara sahip olmak için eğitmen adları, farklı anahtar kelimeler ve eşleme türleri üzerinde döngü kurmaktır. Bunu iki kez yapıyoruz: Birinde 'eğitmen adı anahtar kelime', diğerinde 'anahtar kelime eğitmen adı' şablonunu elde etmek için.

Şimdi küçük değişikliklerle tüm segmentlerimiz için aynısını tekrar edersiniz; anahtar kelimelerde ve veriyi nasıl çıkardığımızda ufak uyarlamalar yaparız.

R for Data Science’tan öğrendiğim iyi bir kılavuz şudur: Bir şeyi ikiden fazla kez kopyalayıp yapıştıracaksanız, artık bir fonksiyon yazmanın zamanı gelmiş demektir!

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)

Bir deneyelim:

topics = ['Data Science', 'Machine Learning']
keywords = ['course', 'tutorial']
generate_keywords(topics, keywords).head(10)
  Campaign Ad Group Keyword Criterion Type
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


Güzel görünüyor. Şimdi her bir segmentiniz için ilgili konuları ve anahtar kelimeleri oluşturalım!

2. Teknoloji Anahtar Kelimeleri

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
  Campaign Ad Group Keyword Criterion Type
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. Kurs Anahtar Kelimeleri Oluşturma

Bu muhtemelen en spesifik ve dolayısıyla insanları hedeflemek açısından en ilgili segmenttir. Birisi "data visualization with r" araması yapıyorsa ve DataCamp’te bu kurs varsa, reklam son derece ilgili olacaktır; çünkü o kullanıcının ihtiyacını tam karşılayan doğru açılış sayfasına sahip olursunuz.

Ancak küçük bir sorun var. Bazı kurs adları, bir kullanıcının tipik olarak arayacağı ifade ile örtüşmeyebilir: 'Machine Learning with the Experts: School Budgets', 'Sentiment Analysis in R: The Tidy Way'. Bunlar kötü kurs adları değildir; fakat insanlar tarafından aranabilecek uygun anahtar kelimelerin seçimi açısından dikkat gerektirir.

Yine, eğitmen kampanyasında yaptığınız gibi adları ve karşılık gelen URL’leri kazıyabilirsiniz:

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


Kurslar için de aynı şeyi (generate_keywords() fonksiyonunu) yapacaksınız; ancak dikkatli olmanız gerekir: Yukarıda belirtildiği gibi bazı adlar gerçekten insanların arayacağı şeyler değil; bunu vaka bazında ele almak gerekir. Aşağıdakiler başlangıç için yeterli olmalı; ardından veriyi görüp kararlar verebilirsiniz.

Aşağıda boş karakter kullanmak hata değildir. Kurs adları başlı başına yeterince uzun ve spesifik olduğundan 'learn' veya 'course' gibi niteleyici anahtar kelimeler eklemeye gerek kalmadan tek başlarına anahtar kelime olmaya uygundur. Bu yüzden kurs adlarını tek başına ve niteleyici anahtar kelimelerle birlikte kullanacaksınız.

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
  Campaign Ad Group Keyword Criterion Type
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. Konular için Anahtar Kelimeler

Bunlar, insanların aramakla ilgilenebileceği temel konulardır. 'Track'ler bölümü tarafından kapsanır; burada beceri ve kariyer alt bölümleri vardır. Amacınız için aynı kampanya altında gruplandırılabilirler. Süreç yine önceki bölümlerde yaptığınızla aynıdır!

Beceriler

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]

Kariyerler

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
  Campaign Ad Group Keyword Criterion Type
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

Son olarak, tüm anahtar kelimeleri instructor_keywords, tech_keywords, course_keywords ve tracks_keywords içinde birleştirirsiniz; böylece hepsi tek bir büyük DataFrame’de toplanır:

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
  Campaign Ad Group Keyword Criterion Type
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

Artık anahtar kelimeleriniz hazır! Tüm veri setine göz atmak isterseniz, buradan edinin. Sırada, her bir reklam grubunuz için reklam üretmek var.

Hadi reklamları oluşturalım.

Reklam Üretimi ve Metin Yazımı

Şu anda elinizde şunlar var:

  • full_keywords_df DataFrame’inde birbirine doğru biçimde eşlenmiş kampanya ve reklam grubu adları
  • Önceki kazımadan (kurslar, eğitmenler ve track’ler) reklam grubu adı ve karşılık gelen URL; teknolojiler için de bir tane üretmeniz gerekiyor.

Bunlarla birlikte şu planı izleyebilirsiniz:

  1. Kullanılacak reklam şablonları oluşturun (başlamak için 2-3 yeterlidir)
  2. Campaign sütunu oluşturun ve ('name', 'url') DataFrame’lerine ekleyin
  3. Tüm ('name', 'url') DataFrame’lerini tek bir büyük DataFrame’de birleştirin
  4. Tüm reklam grupları için tüm reklamları üretin; her reklam için şu alanlardan oluşur (bunlar üzerinde çalıştığınız aynı DataFrame’de yeni sütunlar olacaktır):

    • Başlık 1: en fazla 30 karakter
    • Başlık 2: en fazla 30 karakter
    • Görünen URL: nihai URL’den otomatik çıkarılır
    • Nihai URL: kullanıcının ulaşacağı tam yol (görünen URL ile aynı alan adında olmalıdır)
  5. Çalışmanın keywords DataFrame’i ile tutarlı olduğundan emin olun

  6. Yükleyin ve kampanyaları başlatın!

Reklam üretmek, şablonda konu adını (kurs, teknoloji, eğitmen vb.) yerine koymak ve elinizdeki her reklam grubu için 2-3 reklam varyasyonu oluşturmak demektir.

Python SEM Kampanyası

Reklam Şablonları

Dikkat edilmesi gereken önemli bir husus şu: Reklam grubu adlarını ait oldukları yerlere yerleştirmek düz bir süreç olsa da alan uzunluklarını yukarıda belirtilen sınırlar içinde tutmanız gerekir. Kurs ve konu adlarınız çok farklılık gösterdiğinden bununla ilgili neler yapabileceğinizi görmeniz gerekir.

Bu ne kadar büyük bir sorun, bakalım:

%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()

Arama Motoru Pazarlaması Veri Bilimi Python

Görünüşe göre sorununuz önemsiz değil ve bununla başa çıkmanın doğrudan bir yolu yok. İdeal olarak, iki başlığın da tanıttığımız ürünün (kurs) tam adını içermesini isterdiniz.

Farklı yollar düşündüm ve adı iki ifadeye bölen, her biri en fazla otuz karakter olan basit bir algoritma yazmaya karar verdim.

Algoritma genel kullanım için uygun değildir ve genellemek için bazı ince ayarlar gerekir; ancak bu veri seti için yeterince iyi çalışıyor:

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', '')

Bu, genelde yaptığım bir şey değil; ama bu tekniği sevdim ve başka kampanyalar oluştururken de kullanacağımı düşünüyorum. Bir eğitim yazmanın güzel bir yan etkisi!

Şimdi yazmak istediğiniz şablonlar hakkında düşünelim.

Kullandığım genel reklam şablonu aşağıdaki unsurlardan oluşur (genellikle bu sırayla).

  • Ürün: Google’da 'data science course' arıyorsam, bağlantılarda/reklamlarda bir yerde 'data science course' görmem gerekir.
  • Faydalar: bu, insanların kursu tamamlamanın ötesinde aslında peşinde oldukları duygusal/psikolojik şeydir: 'kariyerinizi hızlandırın', 'kalabalığın arasından sıyrılın'.
  • Özellikler: Madem bana ayı vaadettiniz, oraya nasıl götüreceğinizi gösterin! '100’den fazla veri bilimi kursu', 'alanının en iyilerinden öğrenin', 'kodlama becerileriniz hakkında anında geri bildirim alın'.
  • Eylem çağrısı: Tamam, bana ne sunduğunuzu söylediniz, almam için beni motive ettiniz ve oraya nasıl varacağımı gösterdiniz. İkna oldum. Şimdi ne yapıyorum? 'Ücretsiz deneme için kaydolun', 'ilk bölümleri ücretsiz deneyin', 'yıllık aboneliklerde %20 tasarruf edin'

Tüm bunları bir tweet uzunluğundaki tek bir reklama sığdırmak kolay değildir ve bazıları üst üste binebilir. Ama elinizden gelenin en iyisini yapacaksınız.

  • Başlık 1: Her zaman kurs adını (veya ilk yarısını) içerir.
  • Başlık 2: Kurs adının ikinci yarısı veya aşağıdakilerden biri:
    • Boost Your Data Science Career
    • Stand Out From the Crowd
    • Tackle Complex Questions
  • Açıklama: Her reklam grubunda aşağıdaki üç varyasyon bulunur ve dönüşümlü olarak gösterilir.
    • Learn Directly From the Top Experts in the Field. 20% off Annual Subscriptions
    • Get 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

Campaign Sütunları Oluşturun

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

Tüm ('name', 'url') DataFrame’lerini Birleştirin

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

Reklamları Üretin

Nerede olduğunuzu takip etmek için: Şimdi doğru şekilde eşlenmiş Campaign, Ad Group ve Final URL sütunlarını içeren reklam veri çerçevesine sahipsiniz. Headline 1, Headline 2 ve Description alanlarını eklemeniz gerekiyor.

Her reklam grubu için üç farklı reklam varyasyonu ekleyeceğinizi unutmayın. Bu, insanların neye tıkladığını, hangi reklamların dönüşüm sağladığını görmek için iyi bir uygulamadır. Sonuçta, mevcut satır sayısının üç katına sahip bir DataFrame elde etmelisiniz.

full_ads_df içinde her satırı üç kez çoğaltarak başlayalım:

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...


Şimdi yukarıda oluşturduğunuz üç farklı açıklamayı ekleyin.

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...


Sırada DataFrame’e Headline 1 ve Headline 2 eklemek var. Neredeyse bitti!

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

Faydalar, reklam grubu uzunluğunun 30 veya daha az olduğu durumlarda Headline 2 olarak eklenecektir. Bu durumda boş bir alanınız olur; bunu elinizdeki faydalardan biriyle doldurursunuz.

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


Gördüğünüz gibi, "Intro to Python for Data Science" iki alana sığacak kadar uzundu; bunu netliği korumak için olduğu gibi bırakırsınız. İkinci durumda "Introduction to R" ilk başlığa sığar; bu nedenle Headline 2’ye oluşturduğunuz üç farklı faydayı eklersiniz.

Ve işiniz bitti!

Ayrıntıları Çift Kontrol Edin

Hızlı bir kontrol: Her iki DataFrame’deki kampanya ve reklam grubu adlarının aynı olduğundan emin olun.

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)

Yükleyin ve Başlatın

Tartışıldığı gibi, bu eğitim SEM kampanyaları içinde belirli adımları kapsadı ve bu nedenle arama motoru pazarlamasının nasıl çalıştığına dair temel bir anlayış gerektirir. Reklam gruplarınızı yükleme ve başlatmanın mekanikleri ve ayrıntıları hakkında daha fazla bilgi edinmek isterseniz, nasıl başlayacağınıza ilişkin AdWords rehberine göz atabilirsiniz. Farklı alanlardaki tam kurslara erişmek için Google Academy for Ads’i inceleyebilirsiniz.

Veri Bilimi ve SEM: Keşfedilecek Daha Çok Şey Var!

Artık elinizdeki iki CSV dosyasıyla bunları yükleyebilir ve kampanyalarınızı çalıştırmaya başlayabilirsiniz. Günlük bütçeleri, coğrafi hedeflemeyi ve birkaç başka parametreyi ayarlamanız gerekecek; ancak büyük ölçüde hazırsınız.

CSV dosyalarına göz atmak isterseniz, onları burada bulabilirsiniz:

Umarım bu eğitimi faydalı bulmuşsunuzdur. Okuduğunuz için teşekkürler; Python’un yardımıyla yaptığınız herhangi bir büyüme projesini paylaşmak isterseniz, Twitter’da bana @eliasdabbas üzerinden ulaşmaktan çekinmeyin.

Konular
Veri Bilimi
Python

Python hakkında daha fazla bilgi edinin

Kurs

Python’a Giriş

4 sa
7.1M
Python ile veri analizi temellerini sadece dört saatte öğrenin. Bu çevrimiçi kurs, Python arayüzünü tanıtacak ve popüler paketleri keşfedecektir.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Devamını GörDevamını Gör