How I Used AI & Machine Learning to Transform SEO Keyword Strategy

Posted on June 2025 ยท Tags: AI, Machine Learning, SEO, Data Analysis

This project started as a personal experiment in analyzing keyword data from mock Google Ads campaigns. What it became was a full-stack, ML-powered SEO tool capable of identifying high-potential keywords, generating intelligent recommendations, and visualizing strategic insights โ€” all backed by machine learning and natural language processing.

๐Ÿง  ML Techniques I Learned

I learned to combine traditional ML methods like KMeans clustering and TF-IDF vectorization with modern NLP techniques such as SentenceTransformer embeddings and UMAP for dimensionality reduction. These tools helped me group semantically similar keywords and visualize their relationships in 2D space.

Here's a key part of the system: a reusable KeywordClusterer class that performs clustering based on either traditional or transformer-based embeddings:


class KeywordClusterer:
    def __init__(self, n_clusters: int = 5, use_transformer: bool = False):
        self.n_clusters = n_clusters
        self.use_transformer = use_transformer
        self.vectorizer = None
        self.kmeans = None
        self.umap = None

        if self.use_transformer:
            try:
                from .embedding_helpers import initialize_transformer
                if not initialize_transformer():
                    logger.warning("SentenceTransformer not available. Falling back to TF-IDF.")
                    self.use_transformer = False
            except ImportError:
                logger.warning("Embedding helpers not available. Falling back to TF-IDF.")
                self.use_transformer = False

    def _get_embeddings(self, keywords: List[str]) -> np.ndarray:
        if self.use_transformer:
            try:
                from .embedding_helpers import get_transformer_embeddings
                embeddings = get_transformer_embeddings(keywords)
                if embeddings is not None:
                    return embeddings
            except Exception:
                self.use_transformer = False

        if self.vectorizer is None:
            self.vectorizer = TfidfVectorizer(max_features=1000)
        return self.vectorizer.fit_transform(keywords).toarray()

    def cluster_keywords(self, keywords: List[str]) -> Tuple[np.ndarray, np.ndarray]:
        if len(keywords) < 2:
            raise ValueError("At least 2 keywords are required for clustering")

        n_clusters = min(self.n_clusters, len(keywords))
        self.kmeans = KMeans(n_clusters=n_clusters, random_state=42)
        self.umap = UMAP(n_components=2, n_neighbors=min(15, len(keywords) - 1), min_dist=0.1, random_state=42)

        embeddings = self._get_embeddings(keywords)
        reduced_embeddings = self.umap.fit_transform(embeddings)
        labels = self.kmeans.fit_predict(reduced_embeddings)

        return reduced_embeddings, labels

This logic allowed the system to group terms like "running shoes" and "best sneakers" together โ€” even if they shared no direct words โ€” and then assign performance-based tags across entire clusters. It made strategic gaps more visible, like overused branded terms or neglected niche opportunities.

๐Ÿค– Using AI to Make Real Decisions

Rather than just analyze keywords, I wanted my system to recommend actions: which terms to cut, which to test, and where the upside might be highest. With CTR uplift logic, performance quartiles, and dynamic scoring, the tool surfaces actionable insights in a clean dashboard.

I also created an opportunity tagging system: ๐Ÿ”ฅ High Potential, ๐Ÿšง Low CTR, ๐Ÿ’ก Niche Opportunity โ€” simple labels that help even non-technical marketers identify what to focus on next.

๐Ÿ’ฌ Thought-Provoking Questions

This project also raised deeper questions that go beyond implementation:

These questions push me to not only build smarter systems, but also more human-aware ones. Marketing isn't just numbers โ€” it's psychology, timing, and trust. And AI should reflect that.