SEO Automation Tools: How Jexii's Weekly Content Suggestion Engine Works

SEO Automation Tools: How Jexii's Weekly Content Suggestion Engine Works

Rex Jones··2 min read

Jexii is the SEO engine I built to run underneath my own sites, and one of its quieter features is a thing I call the weekly content suggestion. Every Monday, it looks at real keyword-gap data and hands me exactly one idea: write this, about this keyword, for this reason. Not five ideas. Not a content calendar. One.

The first time I used it, I wanted more. I was doing a bulk backfill on rexjones.photo at the time, trying to close a ten-week gap in the blog, and I remember thinking: just let me force it to spit out suggestions for the next two months so I can batch this. It won't. I went looking through the code to see if there was a flag I was missing. There isn't. generate_weekly_suggestion() is hardcoded to the current calendar week, full stop, and run_manual() — the "just give me one now" button — is a thin wrapper around the exact same call.

At first that felt like a limitation I'd need to work around. It's not. It's the actual point.

Why It Won't Look Ahead

The suggestion isn't generated from nothing. It pulls from a keyword-gap cache that's already been scanned against real DataForSEO data, scores fifteen real candidates, throws out anything that scores below a relevance floor of 40, and refuses to repeat a keyword it already suggested in the last 60 days. Every one of those numbers only means something if the underlying gap data is current. Suggest three weeks out and you're not predicting anything — you're asking the engine to guess what a keyword gap will look like after three more weeks of rankings, competitor content, and search trends have already moved. That's not a suggestion anymore. That's a hallucination with a due date attached.

There's a detail in the code I like more than I expected to: the "why now" behind every suggestion — the trigger, the actual reason it's worth writing this particular thing this particular week — gets computed in plain PHP from the real matched keyword data, not generated by the AI model. If a suggestion says "you're ranking #4 for this and just need a push," that number came from a database row, not a language model's best guess. I built it that way on purpose, because I've seen enough AI tools confidently state a ranking that wasn't real to know I didn't want mine doing that.

So the tradeoff is explicit: you lose the convenience of planning six suggestions in advance, and you gain a suggestion that's never lying to you about being current.

What It Actually Looks Like in Practice

The suggestions don't just sit in a list somewhere. Each one lands in a real table with a status — new, dismissed, drafted, or published — and when I actually act on one, it doesn't just disappear. It gets marked drafted and linked to the real post ID it turned into. One from a recent week suggested "professional headshots" as underused given the real search volume behind it. I wrote the post, dropped it into rexjones.photo as a draft, and the suggestion row updated itself to point at that exact post. Not a checkbox I ticked. A real link between an idea and the thing it became.

That's the part that makes the "only one, only this week" constraint feel less like a limitation and more like a filing system. Nothing suggested ever gets lost in a spreadsheet tab I forgot about. It's either sitting there waiting, or it's linked to something I actually shipped.

The Part I Still Have to Do Manually

None of this replaces the bulk backfill work. When a blog's ten weeks behind, I'm not waiting for ten Mondays to pass — I'm doing real keyword research by hand and writing a real editorial calendar, the same way I would for any site that doesn't have this running yet. The suggestion engine isn't a content calendar generator. It's a weekly nudge that happens to be honest about its own limits, which is a stranger thing to say about a piece of software than it should be.

I'd rather have one good idea a week that's actually grounded in this week's real data than a queue of ten that are quietly going stale the moment I stop looking at them.