Chuyển đến nội dung chính

Khoa học dữ liệu cho Tiếp thị qua Công cụ Tìm kiếm (SEM)

Trong hướng dẫn này, khoa học dữ liệu gặp gỡ Tiếp thị qua Công cụ Tìm kiếm: học cách tạo chiến dịch Google AdWords bằng cách tạo từ khóa và mẫu quảng cáo với Python!
Đã cập nhật 5 thg 10, 2026  · 15 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Là người dùng DataCamp “nặng đô” suốt hai năm qua, tôi đã học được rất nhiều. Công việc chính của tôi là tiếp thị trực tuyến, và tôi đã hưởng lợi đáng kể từ các kỹ năng khoa học dữ liệu mình học được. Giờ đây tôi có thể quản lý các chiến dịch lớn hơn, phức tạp hơn và duy trì chúng hiệu quả. Vì đã khá quen với nội dung, các chủ đề và các package trong R và Python, tôi nghĩ thử bài tập xây dựng các chiến dịch tìm kiếm cho DataCamp.

Trong hướng dẫn này, bạn sẽ xử lý các chủ đề sau:

  • Trước hết, bạn sẽ tìm hiểu thêm về Tiếp thị qua Công cụ Tìm kiếm (SEM) và các chiến dịch tìm kiếm;
  • Sau đó, bạn sẽ xem xét kỹ hơn bài toán kinh doanh cụ thể;
  • Tiếp theo, bạn sẽ tạo từ khóa cho giảng viên, công nghệ, khóa học và chủ đề của DataCamp.
  • Với bộ từ khóa trong tay, bạn có thể bắt đầu tạo quảng cáo. Trước tiên, bạn sẽ đề ra chiến lược, sau đó bắt đầu tạo mẫu quảng cáo.

Tiếp thị qua Công cụ Tìm kiếm (SEM) và Chiến dịch

SEM là gì?

SEM là một trong những cách hiệu quả nhất để phát triển doanh nghiệp trong một thị trường ngày càng cạnh tranh. Đây là quá trình thu hút lưu lượng truy cập website bằng cách mua quảng cáo trên công cụ tìm kiếm. Google AdWords là một trong những hình thức quảng cáo trực tuyến phổ biến nhất: bạn đấu giá vị trí hiển thị trong liên kết tài trợ của công cụ tìm kiếm cho các từ khóa liên quan đến doanh nghiệp, rồi trả phí cho mỗi lượt nhấp.

Trả tiền theo lượt nhấp có thể trở thành chi phí đáng kể, vì vậy rất quan trọng phải lập kế hoạch và nhóm từ khóa, quảng cáo sao cho bạn kiểm soát được chi phí và hy vọng đạt chiến dịch có lợi nhuận.

Mặc dù quy trình xác định giá mỗi lượt nhấp là bí mật được giữ kín và phụ thuộc nhiều yếu tố, ý tưởng chính là quảng cáo của bạn càng phù hợp, chi phí mỗi lượt nhấp sẽ càng thấp.

Thiết lập Chiến dịch Tìm kiếm

Trước khi thiết lập chiến dịch, bạn thường đưa ra ngân sách, chọn từ khóa và xem xét đối thủ. Đồng thời, bạn đảm bảo trang đích đã sẵn sàng. Sau đó, bạn có thể thiết lập chiến dịch: viết quảng cáo đầu tiên, chỉnh sửa chi tiết và thiết lập theo dõi chuyển đổi. Hướng dẫn này chủ yếu bao quát quy trình tạo số lượng lớn từ khóa và quảng cáo dựa trên các trang đích khác nhau mà chúng ta có.

Nhưng trước khi bắt đầu, hãy xem các chiến dịch tìm kiếm thực chất là gì!

Nhóm quảng cáo

Để bắt đầu với chiến dịch tìm kiếm, trước tiên bạn cần xây dựng kế hoạch cho các nhóm quảng cáo. Đây là đơn vị tổ chức cơ bản, nơi bạn ánh xạ từ khóa, quảng cáo và trang đích. Nhưng chính xác ba thành phần này là gì?

  1. Từ khóa: ý định của người dùng, họ đang tìm gì.
  2. Quảng cáo: lời hứa của bạn đáp ứng ý định đó.
  3. Trang đích: phần bạn thực hiện lời hứa.

Ánh xạ đúng ba yếu tố này chiếm khoảng 70–80% công việc. Nếu làm đúng, việc bảo trì và thay đổi sẽ dễ dàng hơn nhiều.

Điều này có nghĩa là, để cụ thể và phù hợp với người dùng, bạn cần quảng bá đúng sản phẩm mình có, và chủ yếu tập trung đưa đúng người đến đúng trang, qua đúng thông điệp hoặc kỳ vọng. Cấu trúc chiến dịch tốt phản ánh và bám sát cấu trúc website, vốn về bản chất phản ánh chiến lược kinh doanh.

Lưu ý mỗi nhóm quảng cáo cần thuộc về một chiến dịch. Ở cấp chiến dịch, bạn có các thiết lập chi phối mọi nhóm quảng cáo như nhắm mục tiêu ngôn ngữ, vị trí, thiết bị, thời gian trong ngày, v.v.

Chiến dịch Tìm kiếm, từng bước

Ở phần trước, bạn đã nhìn chiến dịch tìm kiếm từ góc độ tổng quan: bạn thấy rằng từ khóa, quảng cáo và trang đích là một phần của nhóm quảng cáo và bạn cần lập kế hoạch cho đơn vị tổ chức cơ bản này sao cho phản ánh chiến lược kinh doanh. Trong phần này, bạn sẽ đi sâu vào những việc cần làm để thiết lập chiến dịch, tập trung vào các bước bạn sẽ đi qua trong hướng dẫn.

Search Engine Marketing Campaigns Data Science

Như minh họa ở trên, đây là ánh xạ bạn muốn đạt được. Kết quả đầu ra, bạn muốn có hai DataFrame chính: một cho từ khóa và một cho quảng cáo. Bạn có thể xem chúng trông như thế nào bên dưới.

Campaign Ad Group Keyword
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
Campaign Ad Group Display URL Final URL 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

Khi hoàn tất, bạn sẵn sàng tải chúng lên Google AdWords hoặc các nền tảng khác hoạt động tương tự dưới dạng tệp CSV (Comma-separated Value). Google AdWords là nền tảng tìm kiếm trả phí phổ biến nhất được các nhà tiếp thị tìm kiếm sử dụng, bên cạnh Bing Ads, Yandex, Baidu và các nền tảng khác.

Lưu ý nếu bạn muốn nhập dữ liệu lên các nền tảng khác không phải Google Adwords hoặc Bing Ads, bạn sẽ cần điều chỉnh nhẹ!

Bài toán kinh doanh: DataCamp

Như đã nêu ở phần mở đầu, bạn muốn tạo chiến dịch tìm kiếm cho DataCamp. Xét những cách khác nhau mà ai đó có thể bày tỏ sự quan tâm đến sản phẩm của công ty này, tức là giáo dục khoa học dữ liệu, bạn có thể dễ dàng đưa ra danh sách ban đầu về một số cách đó:

  1. Giảng viên: 'khóa học Hadley Wickham', 'các khóa của Garrett Grolemund', v.v.
  2. Công nghệ: 'khóa python', 'các khóa r', 'khóa khoa học dữ liệu sql', v.v.
  3. Khóa học: tên các khóa cụ thể mà chúng tôi có; 'unsupervised learning in python', 'deep learning in python', v.v.
  4. Chủ đề: 'các khóa học machine learning', 'khóa học trực quan hóa dữ liệu', v.v.
  5. Gói/thư viện: 'học ggplot', 'hướng dẫn matplotlib', v.v.

Trong hướng dẫn này, bạn sẽ không đi theo giai đoạn nghiên cứu từ khóa truyền thống, vì bạn có sức mạnh của ngôn ngữ lập trình để tạo mọi tổ hợp có thể và nhóm chúng vào các chiến dịch và nhóm quảng cáo tương ứng.

Vì vậy, bạn cần hai điều chính để thực hiện thiết lập này:

  • Hiểu sản phẩm: biết DataCamp có những khóa và chủ đề gì, cách chúng được tổ chức trên website và cách nhóm. Bạn có thể tìm hiểu bằng cách duyệt trang, và chắc chắn có được hiểu biết tốt hơn nhờ kiến thức nội bộ (đặc biệt nếu có kế hoạch thay đổi!).
  • Từ khóa liên quan: tất cả những cách có thể mà ai đó bày tỏ nhu cầu với những gì bạn cung cấp. Với DataCamp, đó là 'course', 'learn', 'education', 'tutorial', v.v. Bạn có thể làm điều này bằng động não, dùng công cụ từ khóa và các phương pháp khác.

Tạo từ khóa cho chiến dịch SEM của bạn

Bắt đầu tạo từ khóa nhé!

1. Tạo từ khóa theo giảng viên

Chiến dịch này sẽ nhắm tới những người tìm khóa học theo giảng viên của DataCamp.

Bạn có thể giới hạn từ khóa ở dạng "course by <instructor name>" hoặc chọn bộ từ khóa rộng chỉ nhắm vào tên giảng viên. Ban đầu, tốt hơn là nhắm tới các cụm có 'course' hoặc 'courses' kèm tên và theo dõi hiệu quả.

Bạn cũng sẽ cần kiểm tra xem tên nào trùng với người nổi tiếng khác hoặc là tên quá phổ biến, khi đó cần siết chặt từ khóa cho giảng viên đó.

Bạn bắt đầu bằng cách lấy tên giảng viên và URL tương ứng:

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]

Bạn đưa chúng vào một DataFrame để dùng sau. Các URL sẽ dùng để tạo quảng cáo.

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


Giờ bạn đã có tên giảng viên, bạn sẽ dùng một mẫu trong đó kết hợp từng tên với bộ từ liên quan đến chủ đề của bạn, chủ yếu là khóa học của giảng viên.

Các biến dùng trong đoạn mã dưới đây:

col_names: Danh sách tiêu đề cột của bảng sẽ tải lên Google AdWords.
words: Các từ sẽ kết hợp với tên giảng viên để tạo từ khóa/cụm từ đầy đủ.
match_types: Có thêm chi tiết tại Trung tâm trợ giúp AdWords, nhưng đây là những điều cơ bản.
[data science course], "data science course", và data science course về kỹ thuật là ba từ khóa khác nhau.

  • exact match (trong ngoặc vuông) chỉ kích hoạt quảng cáo nếu người dùng tìm đúng từ khóa đó, ví dụ 'data science course', viết chính xác như vậy.
  • phrase match (trong dấu ngoặc kép) sẽ kích hoạt quảng cáo nếu người dùng tìm chuỗi chính xác kèm bất kỳ nội dung trước hoặc sau. Vì vậy "best data science course" hoặc "data science course online" sẽ kích hoạt quảng cáo.
  • broad match (không dấu câu) sẽ kích hoạt quảng cáo nếu ai đó tìm thứ gì tương tự hoặc liên quan tới 'data science course'. Điều này phụ thuộc thuật toán của Google, bạn phải cẩn trọng, vì có thể kích hoạt khi ai đó tìm 'data science platform' chẳng hạn, không đúng thứ bạn muốn quảng bá. Tôi thích dùng broad match có sửa đổi hơn, vì siết nhắm mục tiêu chặt hơn. Về cơ bản, nó kích hoạt nếu ai đó tìm dẫn xuất của từ, chứ không phải từ tương tự về nghĩa. Ký hiệu bằng dấu '+' đầu từ. Ví dụ '+game' sẽ kích hoạt bởi 'gaming', 'gamers' nhưng không bởi '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
  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


Về cơ bản, bạn đang lặp qua tên giảng viên, toàn bộ từ khóa khác nhau và tất cả kiểu đối sánh để có mọi tổ hợp có thể. Bạn làm hai lần: một lần theo mẫu 'tên giảng viên + từ khóa' và một lần 'từ khóa + tên giảng viên'.

Giờ bạn chỉ việc lặp lại tương tự cho tất cả phân khúc của mình với chút điều chỉnh về bộ từ khóa và cách trích xuất dữ liệu.

Một nguyên tắc hay mà tôi học được từ R for Data Science là nếu bạn chuẩn bị sao chép-dán hơn hai lần, đã đến lúc viết hàm!

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)

Hãy thử nhé:

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


Trông ổn. Giờ hãy tạo các chủ đề và từ khóa phù hợp cho từng phân khúc!

2. Từ khóa theo công nghệ

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. Tạo từ khóa theo khóa học

Đây có lẽ là phân khúc cụ thể nhất, và vì thế phù hợp nhất để nhắm tới người dùng. Nếu ai đó tìm "data visualization with r" và DataCamp có khóa đó, quảng cáo sẽ cực kỳ phù hợp vì bạn có trang đích đáp ứng chính xác nhu cầu người dùng.

Tuy nhiên có một vấn đề nhỏ. Một số tên khóa không khớp với cách người dùng thường tìm kiếm: 'Machine Learning with the Experts: School Budgets', 'Sentiment Analysis in R: The Tidy Way'. Đây không phải tên khóa tệ, nhưng cần chú ý chọn các từ khóa phù hợp mà mọi người có thể dùng để tìm.

Một lần nữa, bạn có thể thu thập tên và URL tương ứng như đã làm với chiến dịch giảng viên:

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


Bạn sẽ làm tương tự (dùng hàm generate_keywords()) với các khóa học, nhưng cần cẩn trọng, vì chúng cần được rà soát: như đã đề cập, một số tên không phải những gì mọi người thường tìm, bạn cần xử lý từng trường hợp. Phần sau đây đủ tốt để bắt đầu, rồi bạn có thể xem dữ liệu và quyết định.

Lưu ý việc dùng ký tự rỗng bên dưới không phải lỗi. Tên khóa học đủ dài và cụ thể để tự nó đã là từ khóa, không cần thêm từ bổ nghĩa như 'learn' hay 'course'. Vì vậy bạn sẽ dùng tên khóa học riêng lẻ, cũng như kèm theo các từ bổ nghĩa.

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. Từ khóa theo chủ đề

Đây về cơ bản là các chủ đề chung mà mọi người có thể tìm kiếm. Chúng được bao phủ bởi phần 'tracks', gồm nhánh kỹ năng và nghề nghiệp. Với mục đích của bạn, chúng có thể được nhóm trong cùng một chiến dịch. Quy trình vẫn như trước!

Kỹ năng

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]

Nghề nghiệp

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

Cuối cùng, bạn nối tất cả từ khóa trong instructor_keywords, tech_keywords, course_keywords và tracks_keywords để gom về một DataFrame lớn:

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

Giờ bạn đã sẵn sàng với bộ từ khóa! Nếu muốn xem toàn bộ tập dữ liệu, tải tại đây. Tiếp theo, bạn cần tạo quảng cáo cho từng nhóm quảng cáo.

Bắt đầu tạo quảng cáo.

Tạo quảng cáo và viết nội dung

Hiện bạn có:

  • Các chiến dịch và tên nhóm quảng cáo đã được ánh xạ đúng trong DataFrame full_keywords_df
  • Tên nhóm quảng cáo và URL tương ứng từ lần thu thập trước (khóa học, giảng viên và track), và bạn cần tạo một bộ cho công nghệ.

Với những thứ này, bạn có thể theo kế hoạch sau:

  1. Tạo mẫu quảng cáo để dùng (2–3 mẫu là đủ để bắt đầu)
  2. Tạo cột Campaign và thêm vào các DataFrame ('name', 'url')
  3. Gộp tất cả các DataFrame ('name', 'url') thành một DataFrame lớn
  4. Tạo toàn bộ quảng cáo cho tất cả nhóm quảng cáo; mỗi quảng cáo gồm các trường sau (sẽ là cột mới trong cùng DataFrame bạn đang dùng):

    • Headline 1: tối đa 30 ký tự
    • Headline 2: tối đa 30 ký tự
    • Display URL: suy ra tự động từ Final URL
    • Final URL: đường dẫn đầy đủ nơi người dùng sẽ đến (phải cùng tên miền với Display URL)
  5. Đảm bảo công việc nhất quán với DataFrame keywords

  6. Tải lên và khởi chạy chiến dịch!

Tạo quảng cáo đơn giản là thay thế tên chủ đề (khóa học, công nghệ, giảng viên, v.v.) vào đúng vị trí trong mẫu, và tạo 2–3 biến thể quảng cáo cho mỗi nhóm quảng cáo bạn có.

Python SEM Campaign

Mẫu quảng cáo

Một điều quan trọng cần lưu ý là dù việc cắm tên nhóm quảng cáo vào vị trí tương ứng khá đơn giản, vấn đề là bạn cần đảm bảo độ dài các trường nằm trong giới hạn ở trên. Và vì tên khóa học, chủ đề của bạn rất đa dạng, bạn cần xem có thể làm gì.

Hãy xem vấn đề nghiêm trọng đến đâu:

%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

Có vẻ vấn đề của bạn không hề nhỏ, và không có cách xử lý thẳng thắn. Lý tưởng là bạn muốn hai tiêu đề chứa đầy đủ tên sản phẩm (khóa học) đang quảng bá.

Tôi đã nghĩ các cách khác nhau và quyết định viết một thuật toán đơn giản tách tên thành hai cụm, mỗi cụm tối đa 30 ký tự.

Thuật toán không phù hợp dùng chung và cần tinh chỉnh để tổng quát hơn, nhưng hoạt động đủ tốt với bộ dữ liệu này:

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

Đây không phải điều tôi thường làm, nhưng tôi thích kỹ thuật này, và nghĩ sẽ dùng khi tạo các chiến dịch khác. Một tác dụng phụ thú vị của việc viết hướng dẫn!

Giờ hãy nghĩ về các mẫu bạn muốn viết.

Mẫu quảng cáo chung mà tôi dùng gồm các yếu tố sau (thường theo thứ tự này).

  • Sản phẩm: nếu tôi tìm 'data science course' trên Google, tôi cần thấy 'data science course' ở đâu đó trong liên kết/quảng cáo.
  • Lợi ích: đây là khía cạnh cảm xúc/tâm lý mà mọi người thực sự theo đuổi, vượt ra ngoài việc hoàn thành khóa học, 'thúc đẩy sự nghiệp', 'nổi bật giữa đám đông'.
  • Tính năng: sau khi bạn đã hứa hẹn, hãy cho tôi thấy bạn sẽ giúp tôi đạt được điều đó như thế nào! 'hơn 100 khóa khoa học dữ liệu', 'học từ các chuyên gia hàng đầu', 'nhận phản hồi tức thì về kỹ năng code'.
  • Kêu gọi hành động: bạn đã nói mình có gì, thúc đẩy tôi mua, và cho thấy tôi sẽ đạt được điều đó ra sao. Tôi bị thuyết phục rồi. Giờ tôi làm gì? 'đăng ký dùng thử miễn phí', 'xem miễn phí các chương đầu', 'tiết kiệm 20% khi đăng ký năm'

Không dễ để đưa tất cả vào một quảng cáo ngắn như tweet, và một số phần có thể chồng lấn. Nhưng bạn sẽ cố gắng hết sức.

  • Headline 1: Luôn chứa tên khóa học (hoặc nửa đầu).
  • Headline 2: Nửa còn lại của tên khóa học, hoặc một trong các câu sau:
    • Boost Your Data Science Career
    • Stand Out From the Crowd
    • Tackle Complex Questions
  • Mô tả: mỗi nhóm quảng cáo sẽ có ba biến thể dưới đây và sẽ luân phiên hiển thị.
    • 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

Tạo cột 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

Gộp tất cả 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

Tạo quảng cáo

Để theo dõi tiến độ: hiện bạn có DataFrame quảng cáo chứa các cột Campaign, Ad Group và Final URL đã ánh xạ đúng. Bạn cần thêm các trường Headline 1, Headline 2 và Description.

Lưu ý rằng với mỗi nhóm quảng cáo bạn sẽ thêm ba biến thể quảng cáo. Đây là thực hành tốt chủ yếu cho mục đích thử nghiệm: xem mọi người nhấp vào đâu, quảng cáo nào chuyển đổi tốt hơn, v.v. Bạn sẽ có DataFrame có số dòng gấp ba lần hiện tại.

Bắt đầu bằng cách nhân ba mỗi dòng trong 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...


Giờ bạn thêm ba mô tả khác nhau đã tạo ở trên.

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


Tiếp theo, bạn thêm Headline 1 và Headline 2 vào DataFrame. Gần xong rồi!

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

Các lợi ích sẽ được dùng làm Headline 2 trong trường hợp độ dài tên nhóm quảng cáo bằng hoặc dưới 30. Khi đó bạn sẽ có trường trống, và bạn sẽ điền một trong các lợi ích này vào.

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


Như bạn thấy, "Intro to Python for Data Science" đủ dài để chia thành hai trường, nên bạn giữ nguyên để rõ ràng. Ở trường hợp thứ hai "Introduction to R" vừa trong tiêu đề đầu, nên bạn chèn ba lợi ích khác nhau vào Headline 2.

Và bạn đã xong!

Kiểm tra lại chi tiết

Một bước kiểm tra nhanh để đảm bảo tất cả tên chiến dịch và nhóm quảng cáo trong cả hai DataFrame là giống nhau.

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)

Tải lên và khởi chạy

Như đã thảo luận, hướng dẫn này chỉ bao quát một số bước cụ thể trong chiến dịch SEM và do đó cần sự hiểu biết cơ bản về cách hoạt động của tiếp thị qua công cụ tìm kiếm. Nếu bạn muốn biết thêm về cơ chế và chi tiết tải lên, khởi chạy nhóm quảng cáo, bạn có thể xem hướng dẫn của AdWords về cách bắt đầu. Để tiếp cận các khóa học đầy đủ ở nhiều lĩnh vực, bạn có thể xem Google Academy for Ads.

Khoa học dữ liệu và SEM: Còn rất nhiều điều để khám phá!

Với hai tệp CSV hiện có, bạn có thể tải lên và bắt đầu chạy chiến dịch. Bạn sẽ cần đặt ngân sách hằng ngày, nhắm mục tiêu theo địa lý và vài tham số khác, nhưng về cơ bản là sẵn sàng.

Nếu muốn xem các tệp CSV, bạn có thể tìm ở đây:

Hy vọng bạn thấy hướng dẫn này hữu ích. Cảm ơn đã đọc và nếu bạn muốn chia sẻ bất kỳ dự án tăng trưởng nào bạn làm với Python, đừng ngần ngại liên hệ tôi trên Twitter @eliasdabbas.

Chủ đề
Khoa học Dữ liệu
Python

Tìm hiểu thêm về Python

Khóa học

Nhập môn Python

4 giờ
7.1M
Nắm vững phân tích dữ liệu với Python chỉ trong 4 giờ. Khóa học online này giúp bạn làm quen với giao diện Python và các thư viện phổ biến.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem ThêmXem Thêm