<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SEO Brothers product updates</title><link>https://seobrothers.com/updates/</link><atom:link href="https://seobrothers.com/updates/rss.xml" rel="self" type="application/rss+xml"/><description>What changed on the Tideworthy platform, and what we learned building it.</description><language>en-us</language><item><title>Service pages get their own brief writer and writer</title><link>https://seobrothers.com/updates/2026-09-30/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-30/</guid><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><description>Service page content now has a brief in front of it, the auditor counts ignore rules across every page an issue touches, and one website carries one ongoing SEO campaign.</description><content:encoded><![CDATA[<p>Nothing moved on the surface today. The work was all underneath: two new content agents, a clearer rule about how campaigns attach to a website, and a long sitting with the agents that write geo pages.</p>
<h2 id="for-our-partners">For our partners</h2>
<p>Nothing changed on the surface today. Everything below is work you will feel later rather than see now.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>Service pages now have a brief writer and a writer of their own, the last content kind that was still being drafted without a brief in front of it.</li>
<li>The auditor adds up ignore rules across every page an issue touches, so an issue that appears on five pages closes once all five are handled.</li>
<li>One website carries one ongoing SEO campaign, and a second is refused with the name of the one that already exists.</li>
</ol>
<h3 id="1-service-page-agents">1. Service page agents</h3>
<p>Every other content kind we produce goes through a brief first: someone (now something) decides what the piece is about, who it is for and what has to be in it, and the writer works to that. Service pages were the exception, drafted straight from the task. The two new agents close that gap, built from the pair we use for location pages and then cut back to what a service page actually is: one service, for the business as a whole, or for one place when the keyword names a place. The place-specific parts only apply in that second case; otherwise the supporting material is what a customer actually weighs when choosing that service.</p>
<p>Both agents are off until the lab reps are read. We clone, then we test, then we turn on.</p>
<h3 id="2-issues-that-span-several-pages">2. Issues that span several pages</h3>
<p>Some findings are not about one page. A placeholder string left in a template, an image with no alt text in a shared block, a duplicate cluster: the issue is one thing, and it shows up on every page that uses the thing. Our rules for telling an agent to leave something alone are written one page at a time, on purpose, which meant an issue spanning five pages stayed open even after all five pages had been handled. It now adds the coverage up, and closes when the whole set is covered. Identical rules also collapse into one row instead of being written again each time.</p>
<h3 id="3-one-campaign-per-website">3. One campaign per website</h3>
<p>An earlier version of the services model let a client carry two ongoing SEO services at once, with machinery to keep them from colliding. Nobody wanted that. What people actually wanted was clients with more than one website, and the website model handles that directly: each website gets one SEO campaign. So the second plan is refused, by name, with a suggestion to widen the scope of the one that exists or end it first. One-time and custom work is unaffected, and the extra machinery that existed only to keep two plans apart is gone with it.</p>
<p>The rest of the day was lab work: reps on the geo brief writer and geo page writer, both now live, and the start of notes on the two new service page agents. Each agent’s notebook now ends with a list of optimisations we know about and have not done, with the measurement that shows the gap, so the next session picks one up instead of rediscovering it.</p>]]></content:encoded></item><item><title>Client setup now says which steps are yours and which are ours</title><link>https://seobrothers.com/updates/2026-09-29/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-29/</guid><pubDate>Tue, 29 Sep 2026 00:00:00 GMT</pubDate><description>The setup checklist splits into the steps an agency does and the steps our team carries, and the Google accounts row names the account that is still missing. Underneath, our agents learned to work more directories and to read pages as words instead of markup.</description><content:encoded><![CDATA[<p>Most of today was underneath: directory listings and the agents that write briefs. On the surface, the changes all came from things partners said out loud on calls this month.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>The client setup checklist now shows two lists: the steps you set up and the steps we carry from there.</li>
<li>The “Google accounts confirmed” row names the account that is still missing and links to the page that fixes it.</li>
<li>When a plan goes back for approval after your feedback, the notice reaches you.</li>
<li>Pasting a few hundred keywords keeps the Add keywords button in view, and the discovery request form now submits only from its button.</li>
</ol>
<h3 id="1-who-owns-which-setup-step">1. Who owns which setup step</h3>
<p>The strategic alignment checklist used to list all twelve steps in one box with no owner, so it was not obvious where your part ended. It now reads as two boxes. Yours holds the things that need your knowledge of the business: the profile, the brief, competitors, the goal, the Google accounts and the locations. Ours holds keyword research, tracking, mapping, the technical audit, work plans and monitoring. The client portal keeps its single list.</p>
<h3 id="3-approval-notices">3. Approval notices</h3>
<p>A partner told us that a notice about a plan coming back for approval had not arrived. That is resolved. The notice is now recorded first and sent afterwards, and a send that does not go through raises an alert on our side instead of passing quietly.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<p>Most of the day went into listings. For a growing set of directories, an agent now opens the account, fills in the business details, follows the confirmation email and stops only where the site asks for something a person has to give: an identity document, a PIN read off the business phone, a category judgement nothing on the record can answer. Each of those stops hands over with the form already filled and written instructions for the next step. Where a site refuses an automated browser outright, we record its steps in plain language instead of pretending. Directories also gained correction, takedown and duplicate-report paths, so a wrong listing can be put right, not just created, and every form now carries the business’s own contact person rather than anyone on our team.</p>
<p>The brief writer changed how it reads. A ranking page is mostly markup and the markup carries no meaning, so we had it read pages as words: about a tenth of the characters, with the same counts, quotes and sources coming out in the brief. We also made the brief name the piece. The working title is a keyword placeholder, and writers were choosing between two titles; now the title comes from what the piece actually covers.</p>
<p>Underneath the app, a client can hold more than one thing. A website now belongs to the client rather than to the SEO campaign, and each thing a client buys is recorded as its own line with its own definition and scope, so a one-time project can sit beside ongoing work instead of bolting onto it. Every existing campaign behaves exactly as it did.</p>]]></content:encoded></item><item><title>Choosing your rank tracker is now a toggle beside the project list</title><link>https://seobrothers.com/updates/2026-09-28/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-28/</guid><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate><description>The rank tracker choice moved out of the project list and into a toggle next to it. Underneath, our crawl learned to see links a page carries in script, and our directory reader learned to get through doors that used to refuse it.</description><content:encoded><![CDATA[<p>One change on the surface today. The rest of the day went into how our agents read a page they do not own, and how we rehearse an agent before it touches anything real.</p>
<h2 id="for-our-partners">For our partners</h2>
<p>Keyword Tracking now has a two-sided toggle beside the project list: track with the platform, or track with your own rank tracking tool. The list of projects appears only on the tool side, and it only ever shows your projects.</p>
<p>Flipping the toggle saves nothing by itself. The change lands when you press Link or Change, and changing a saved link still asks you to confirm first. The roll-up counts the two kinds of client separately, so you can see at a glance which are tracked where.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>An orphan page finding now says when the only route to a page is a link carried in script rather than an ordinary one.</li>
<li>Our citation reader drives a real browser, so directory pages that used to refuse us answer.</li>
<li>Proposal options are built from the partner’s own packages, and no option may drop a process.</li>
<li>Agents can be rehearsed on a copy, woken exactly the way the platform wakes them.</li>
</ol>
<h3 id="1-links-a-crawler-cannot-follow">1. Links a crawler cannot follow</h3>
<p>Some page builders make a card clickable by storing the link in a script and attaching a click handler, leaving no ordinary link on the page. A crawler follows ordinary links, so those pages read as orphans while anyone looking at the site can plainly click through to them. The crawl now records script-carried links as their own kind, the orphan finding says when a page is reached only that way, and the agent reading the page sees the same note. The conclusion usually still stands, because search engines follow ordinary links too. It can now be argued with, which is the point.</p>
<h3 id="2-reading-pages-that-do-not-want-to-be-read">2. Reading pages that do not want to be read</h3>
<p>Our reader works through an ordered set of routes and now reaches for the slow, costly ones only when a page has actually been refused, a tightening we made the same day after watching the first live batch. Company pages on a large professional network are readable for the first time. Every address an audit considers is kept on record with the reason it was read or skipped, so we can see what our own filters throw away.</p>
<h3 id="3-options-are-packages">3. Options are packages</h3>
<p>An agent drafting a proposal invented two tiers that did not exist, priced just above the shelf. Now the options are the partner’s packages, a hand-built option needs a stated reason from the intake, and no option, custom or not, may quietly leave out one of the processes.</p>]]></content:encoded></item><item><title>Citation audits now find far more of a location's listings</title><link>https://seobrothers.com/updates/2026-09-27/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-27/</guid><pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate><description>We measured our citation audits against an independent scan of the same locations, found we were recovering a small fraction of what it knew about, and spent the day closing the gap. Audits also come back sooner and read pages the cheap way first.</description><content:encoded><![CDATA[<p>A day spent entirely under the surface. We put a number on how good our citation audits actually are, did not like it, and rebuilt the parts the number pointed at.</p>
<h2 id="for-our-partners">For our partners</h2>
<p>Nothing moved on the surface today. The one thing you might notice is a citation audit that comes back sooner and with more listings on it.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>We measured our citation audits against an independent scan of the same locations and found we were recovering a small fraction of the listings it knew about. Most of the day went into closing that gap.</li>
<li>An audit that sat for ten to twelve minutes now spends a fraction of that waiting, because searches and page reads happen side by side and long lookups are started and collected later instead of held open.</li>
<li>Listing pages are read the cheap way first and only escalate when the page will not give up a phone and a street.</li>
<li>When an agent asks a question, the options are now the edits it would make rather than the facts it is missing.</li>
<li>The keyword, content, crawl and citation services are now built, checked and updated the same way as the rest of the platform.</li>
</ol>
<h3 id="1-what-the-measurement-changed">1. What the measurement changed</h3>
<p>The rules that decide whether a page belongs to a business are strict on purpose, and they were throwing away pages a person would recognise at once: an old trading name with the right phone, a suite number the record does not carry. Those now get a second look, where an agent reads the page beside the record and answers whether it is the same business, and only when the page states a name and either a phone or a street. We also record the Google Business Profile as a listing, search every directory we hold a working search for instead of a shortlist, retry a town-scoped search without the town, and look up Apple Maps places directly, since nothing indexes them and nothing readable renders on the page.</p>
<p>Recall against the outside scan went from a handful of listings to just under half, measured the same way each time. Not finished, but we can now tell which way the number moves.</p>
<h3 id="3-a-ladder-for-reading-pages">3. A ladder for reading pages</h3>
<p>Every listing page used to go through a paid extraction step. On a sample of real listing pages, most already stated a phone and a street in the page itself, so the read now starts with a plain request, then a rendered page, then a light fetch, and only pays for extraction when the page comes up short. Pages behind bot walls get the heavier route automatically instead of being given up on. Each read records which rung answered, so we can see where the cost actually sits.</p>
<h3 id="4-asks-that-offer-edits">4. Asks that offer edits</h3>
<p>An ask once offered two phone numbers and the option “both are correct, keep both”. Both were correct, so picking one resolved nothing. Every option is now something the agent would do with the answer, with the one it recommends first and a few words on why. The agent that plans page work went through repeated dry runs on live campaigns in the same spirit: it leaves intents and pages already at the top alone, and any decision resting on a campaign fact names where that fact is written.</p>]]></content:encoded></item><item><title>A client can be tracked on the platform even when the agency uses its own tracker</title><link>https://seobrothers.com/updates/2026-09-26/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-26/</guid><pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate><description>Keyword tracking is now a per-client choice rather than one answer for the whole agency, and citation audits look further out from the obvious directories and read more of what they find.</description><content:encoded><![CDATA[<p>Most of today sat under the surface, in the citation audit and in how one of our agents is offered its options. One change will be visible tomorrow morning, on the keyword tracking screens.</p>
<h2 id="for-our-partners">For our partners</h2>
<p>Keyword tracking is now a per-client choice. An agency that connected its own rank tracker used to have one answer for every client on the list: that tracker. The connected tracker is still the default, and now any single client can be set to track on the platform instead.</p>
<p>The picker on the keyword roll-up and on the client card opens with tracking on the platform. Choosing it takes that client off the outside project and moves its live keywords across, history included. The keywords already sitting in the agency’s own account stay exactly where they are, to keep or remove as the agency likes, and the confirmation says so before anything moves.</p>
<p>A client tracked on the platform reads as tracked: no pending proposal, no unlink button. It leaves only by picking a project in the outside tracker, which moves the keywords the other way. This is for the new client who was never added to the agency’s account, and for the agency coming off a tool one client at a time.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>Citation audits now look further out from the obvious directories and read more of what they find.</li>
<li>An agent no longer sees options it is never allowed to use.</li>
<li>Alerts raised while someone is working on a change stay with that person instead of being recorded as real.</li>
</ol>
<h3 id="1-deeper-citation-audits">1. Deeper citation audits</h3>
<p>A full audit used to look at one page of general search results and a fixed slice of what came back. The profiles that quietly go wrong are rarely in the core couple of dozen directories; they sit further down, and a long-tail test showed that is what a full audit was still missing. The sweep now reaches further and reads roughly twice as many candidate pages.</p>
<p>Going wider drags in pages that look like listings and are not: an empty shell profile, an events page. A page that comes back with no business name, no practitioner name, no phone and no street is no longer counted as a listing. We also kept a way to run an audit at the old depth, so we can measure what the extra reach actually buys rather than assume it.</p>
<h3 id="2-options-an-agent-cannot-use">2. Options an agent cannot use</h3>
<p>Telling an agent in writing not to do something is weaker than not offering it. One of our agents could see four kinds of content work among its options that it can never file outside a content plan, with a line in its instructions saying so. The line is gone and so are the options, for the work where they do not apply. Repeated dry runs since: the agent reached for none of them, and every claim it made held up.</p>]]></content:encoded></item><item><title>Link each client to your own keyword tracking</title><link>https://seobrothers.com/updates/2026-09-25/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-25/</guid><pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate><description>Partners who track keywords in their own rank tracking account can now pair each client with its project from Integrations, and content your team writes from our briefs is now published by your team.</description><content:encoded><![CDATA[<p>Most of the day went to keyword tracking: pairing clients with the rank tracking projects partners already keep, and making that pairing answer straight away instead of making you wait on it. The other thread was content, where who writes now decides who publishes.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>If your keywords track in your own rank tracking account, a new Keyword Tracking page under Workspace Settings > Integrations pairs each client with the project that holds its keywords.</li>
<li>When your tracking plan is full, you get a task saying how many keywords are waiting and how far to raise the limit. It updates its own count and closes itself once every keyword is in.</li>
<li>On campaigns where your team writes the content from our briefs, your team publishes it too, and the piece page now leads with the brief.</li>
</ol>
<h3 id="1-linking-clients-to-your-tracking-projects">1. Linking clients to your tracking projects</h3>
<p>Each row shows a client and its domain on the left and a searchable picker of your projects on the right. Where the match is unambiguous the row arrives with a proposal already selected, so you can accept them one at a time or all at once. A project already linked to another client is never proposed, and a project two clients would both claim is proposed to neither. The same picker sits on each client’s Integrations page.</p>
<p>Saving answers immediately and the keywords move onto the project in the background; the row says so while it happens. Until a client is linked, its keywords are stored but not sent anywhere, so this is what starts tracking for a new campaign. Changing or clearing a link never deletes anything inside your own tracking account.</p>
<p>The page lists active clients by default, with a switch for prospects and inactive ones. Campaign history now also records when the tracked keyword list changes and who changed it: you, our team, or someone on your team working directly in your tracker.</p>
<h3 id="3-partner-written-content">3. Partner-written content</h3>
<p>If we did not write the piece, we do not publish it, even on campaigns where we implement website changes. In that mode the piece page puts the plan details and the full brief in the main column, offers our editor as one way to write it, and leaves a single completion: add the live link once it is up, so the piece shows in the client’s report. The Implementation settings confirm the change before you make it, since publishing moves with the writing.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<p>Terms tracked at Canadian cities were coming back as US results pages and “not in top 100”. The ranks were real; the registration was not. Keywords were being registered against the country on the campaign, which defaults to the US, rather than the country of the location they are tracked at. The tracked location now decides, and a term re-registered correctly came back at position one. Our agents’ own searching moved the same way: a search now runs from the location most of the campaign’s keywords are tracked at, so an agent checking a suspicious results page sees what a local searcher sees.</p>
<p>The other correction was franchise locations. A location living at a path on a shared brand domain was getting new pages recommended at the domain root, so the agents now have to name the full address of a page rather than hand us a slug we complete for them. We started with a strict rule that every page must sit under the location’s path, then read a batch of real franchise sites and found locations that legitimately post on the brand’s blog or keep a differently named section. The rule that shipped refuses a bare slug or the wrong site, and treats the location path as guidance the agent is told to follow where the section exists. Both changes came out of rehearsal runs where every claim an agent makes is checked by hand against the page it read.</p>]]></content:encoded></item><item><title>Agent sessions now run on every live campaign</title><link>https://seobrothers.com/updates/2026-09-24/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-24/</guid><pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate><description>The per-campaign switch for agent sessions is gone, so every live campaign gets agent work. Underneath, agents learned to hand heavy reading to a helper and to ask when a client's own pages contradict each other.</description><content:encoded><![CDATA[<p>Most of today was under the surface. The visible part is one fewer thing to turn on, plus a date field that now refuses a date it should never have taken.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>Agent sessions run on every live campaign. There is no switch to turn on.</li>
<li>Recording a draft as published no longer accepts a date in the future.</li>
<li>The “Get Early Access” line under Websites in the sidebar reads on whatever sidebar colour you picked.</li>
</ol>
<h3 id="1-sessions-without-a-switch">1. Sessions without a switch</h3>
<p>Agent work was gated on a per-campaign setting that sat on top of the two conditions that already decide it: the client is active and the campaign’s service is live. That setting is gone, and with it the Sessions page’s “turn on sessions” screen and the settings panel whose only control was that switch. Every campaign now starts in the first phase of its profile.</p>
<h3 id="2-published-dates-stop-at-today">2. Published dates stop at today</h3>
<p>A post scheduled to go live next week is not published yet, and recording it as published leaves a link that does not resolve until the site catches up. Every place that records a publish, including draft review, now refuses a date later than today, and the date pickers stop there too. Today is read generously, so the date you are living in is always accepted.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>An agent can now hand a reading job to a helper: here is the question, here are the pages, come back with a short answer.</li>
<li>Site edits are described at one of two levels, pages or shared, and the implementer decides where a shared change lands.</li>
<li>The agent that plans page optimizations raises a conflict instead of resolving it on its own.</li>
<li>Client sites running no SEO plugin at all can now have their titles, descriptions and canonicals set the same way any other site can.</li>
</ol>
<h3 id="1-reading-handed-off">1. Reading handed off</h3>
<p>A session that reads fifty pages was still carrying all fifty pages an hour later, which made every later step slower and more expensive than the one before it. Letting the session drop old reading helped less than we expected, because dropping has a cost of its own. So the reading leaves the session entirely: a helper opens the pages, answers the question it was given, and returns a short report. On a page-heavy run the main session’s load fell to under a third of what it was.</p>
<h3 id="3-when-the-site-disagrees-with-itself">3. When the site disagrees with itself</h3>
<p>One client’s pages stated three different starting prices. The agent picked one, which is the wrong move: only the practice knows which is current. It now asks, and the ask is scoped to facts it would otherwise state in its own copy. We tested that on four scenarios, with and without the rule, to confirm it asks once rather than turning every small inconsistency into a question.</p>]]></content:encoded></item><item><title>Approvals counts now match what each side is actually waiting on</title><link>https://seobrothers.com/updates/2026-09-23/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-23/</guid><pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate><description>The Clients and Contacts approval columns now count different, correct things: every open approval on the client, and the approvals a given contact has actually been asked to sign off. Behind that, a day spent teaching one agent to hold its own pace and making our own monitoring say when something is getting worse.</description><content:encoded><![CDATA[<p>Tuesday was two kinds of day. One small correction in the portal that changes what a number means, and a long run of work on how we watch our own systems and how one agent decides how much to do in a sitting.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>The Approvals column on Clients counts every open approval on that client, partner-side asks included, and matches the Approvals badge in the campaign sidebar.</li>
<li>The Approvals column on Contacts counts only the approval types that client’s contacts actually see, and the tooltip gives the age of the oldest one.</li>
<li>Product updates can now be delivered by email to people without a platform account, and the newsletter itself has a proper layout.</li>
</ol>
<h3 id="1-two-columns-two-questions">1. Two columns, two questions</h3>
<p>The Clients column was answering the contact’s question: how many approvals are sitting with the client. That left partner-side asks invisible, so a client could read as clear while something waited on the agency. It now counts everything open on the client, and the Access popover uses the same number.</p>
<p>Contacts keeps the narrower count, which is the right one there: the approval types toggled on for that client, the same set the portal and the share link show. Neither column counts asks still held for our review, so nothing appears in your queue before it is yours to decide.</p>
<h3 id="3-updates-by-email">3. Updates by email</h3>
<p>There is now a Product Updates option on the updates page of the website, for people who want these posts in their inbox and do not log in to the platform. Partner users already have a Product updates preference in their communications settings, on by default, so nothing changes for you.</p>
<p>Newsletters and product-update broadcasts also render in a layout built for reading: one column, one card, a callout style and a feature panel, sized to hold together on a phone.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<p>Most of the day went to two threads.</p>
<p>The first is watching our own machinery. Every alert we raise now carries a class (a real fault, a vendor problem, something needing a person, or a note we only want recorded) and a severity, and they route accordingly instead of all setting off the same siren. Each alert also writes an event, so the Platform Issues page shows a rate over seven days and a fourteen-day trend rather than a lifetime count and the latest message. An issue can be acknowledged, assigned, muted for a week or resolved with a link to the fix, and it notifies on news: a new problem, a resolved one recurring on newer code, or a jump in rate. A daily digest covers the steady rest, and nothing is sent on a quiet day. There is a new Jobs view showing every scheduled job, when it last succeeded and whether it is healthy, and a request reference on error pages so a report can be traced to the exact request.</p>
<p>The second is pace. Our crawl maintenance agent had a goal (no issues) and an order to work through them, and nothing telling it how much belongs in one sitting. Two runs on the same site filed three tasks, then eleven. Eleven tasks landing on one queue in a morning and nothing the following month is not maintenance, it is a flood. So the rule is now explicit: decide every critical issue, then one more check, and the rest wait. Saying it in the instructions was not enough; the context the agent woke up to still presented every open check as the job, so it now names this session’s checks as the ask and shows the rest as counts. The tools hold the same line, and the page reader returns a page in windows rather than dumping an entire document, which stopped the long sessions that ran out of room before filing anything.</p>
<p>One more, smaller: when a reviewer cancels an agent’s task, the reason now has to name something wrong with the work. “The page already ranks well” is not a reason, and one of the pages cancelled for that sat at position sixteen. The check reads the reason against the task, refuses the two empty categories, and files the rest as a record of why a person overruled an agent. Calibrated against ten days of real notes, it refused exactly the seven that named nothing and let everything else through.</p>]]></content:encoded></item><item><title>Brand-level approval and implementation rules, and a Contacts page for client portal access</title><link>https://seobrothers.com/updates/2026-09-22/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-22/</guid><pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate><description>Approval policy, auto-approve fallback, implementation mode and content writing can now be set once on a brand and inherited by every client under it. A new Contacts page shows who at each client can sign in to their dashboard, what they receive and what is waiting on them.</description><content:encoded><![CDATA[<p>A day about settings that should only be set once, and about answering a question partners keep asking: who on the client side actually has access. Underneath, most of the work went into agents that read a Business Profile properly and schedules that mean what they say.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>Approval rules and implementation can be set on a brand, and every client under it inherits them.</li>
<li>The Clients list has an Access column and an Approvals column, and a new Contacts page under Clients lists every person who can see a client dashboard.</li>
<li>Websites arrive in October; partners without access now see a Get Early Access door in the sidebar.</li>
</ol>
<h3 id="1-brand-level-rules">1. Brand-level rules</h3>
<p>If you run a franchise or a multi-location group as a brand, the four settings that used to live on each client (approval policy, auto-approve fallback, who implements, and content writing) can now be set once on the brand. The Brand page has two new tabs, Approval rules and Implementation, that mirror the client tabs.</p>
<p>Nothing changes for clients you have already set by hand. A client keeps its own setting when it has one, falls back to the brand when it does not, then to the workspace. Each client page now names the layer it is inheriting from and links to it, so you can see where a value came from without guessing.</p>
<h3 id="2-contacts-and-access">2. Contacts and access</h3>
<p>The Clients list shows an Access column that reads as plain language: how many people can sign in and when they were last seen, an invite pending, notifications only, public link only, or nobody invited with an Add contact link right in the cell. Beside it, an Approvals column badges how many items are waiting on that client and how long the oldest has sat.</p>
<p>The new Contacts page is one row per person per client: what they can do, what they receive, when they last signed in, and how many approvals they have waiting or decided. Invite, resend, cancel and remove all live on the row. The per-client tab formerly called Client Portal is now Contacts &#x26; Portal.</p>
<p>Approvals made from a client’s own dashboard now record which person made them, rather than reading the same as an anonymous visit through a share link.</p>
<h3 id="3-websites-early-access">3. Websites early access</h3>
<p>Websites launch in October. Partners who do not have access yet see Websites, Get Early Access in the sidebar: four questions about how you would want client sites managed, and an optional note. Answers can be changed later.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<p>Most of the day went to the agent that plans Business Profile work. Its main report was being cut short, so on any profile with a few dozen photos everything after the photos (services, attributes, posts, reviews) simply was not there to read. The report is now a structured summary with photo counts instead of photo addresses, and it fits in a third of the space with every section present.</p>
<p>The bigger correction was about what counts as true. A public scrape of a Business Profile cannot read the services tab and often cannot read the description, so an agent reading only the scrape was proposing work that already existed on the profile. The report now carries a second view taken from the connected profile itself, and the agent is told plainly which view is the truth for the client’s own fields and which is what a searcher sees. On the first profile we checked, the scrape said empty and the connection held a description, sixteen services and twenty-two attributes.</p>
<p>Scheduled agents now honour a runs-per-cycle limit, default one. A monthly planner means one planning session that month, whether the run started on the schedule or by hand. We first counted that window rolling from the previous scheduled slot, then corrected it to the calendar month, because that is what “monthly” means to everyone reading it. Replaying two months of history under the calendar rule told us how many double sessions this prevents, and it is not a small number. Running an agent on demand is never blocked.</p>
<p>We also split the planning tools by stream, so a planner working on Business Profile posts can no longer draft a content plan on a campaign that does not buy content, and the agents list now shows paused as its own status instead of reading the same as live.</p>]]></content:encoded></item><item><title>Campaign Library opens to partners</title><link>https://seobrothers.com/updates/2026-09-21/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-21/</guid><pubDate>Mon, 21 Sep 2026 00:00:00 GMT</pubDate><description>The Campaign Library is no longer staff-only: partners see what the campaign knows next to Asks &amp; Approvals. Approvals now read as a dated timeline per checkpoint, and links to a drafted piece open on the first click.</description><content:encoded><![CDATA[<p>A day spent on what partners can see. Two surfaces that had been ours alone opened up, and several pages stopped asking anyone to decode them.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>The Campaign Library renders for every user, under a Collaboration heading in the client sidebar. Notes &#x26; feedback has left the sidebar, and its old address lands on Historic Filings.</li>
<li>Approvals on a task read as one dated timeline per checkpoint, with who sent each ask and who made each decision.</li>
<li>Links to a drafted piece on a WordPress site open on the first click. Some of them were being refused; that is resolved, and the drafts already waiting were corrected.</li>
<li>A site edit now says how wide it lands: named pages, a shared template, or the whole site.</li>
<li>A link written into rewritten page copy renders as a link, with its destination shown on hover.</li>
</ol>
<h3 id="1-campaign-library">1. Campaign Library</h3>
<p>The Library holds what a campaign knows: the notes that came in, what was filed from each one, and the outcome. Partners see their own side. Staff working as the partner see everything and keep the review.</p>
<p>Notes are intake now, handled the moment they land, so the old composer is retired and anything still pointing at it arrives at Historic Filings, where old notes live.</p>
<h3 id="2-approvals-as-a-timeline">2. Approvals as a timeline</h3>
<p>Each checkpoint gets its own headed section, written content and draft on the website, with a dated line per ask and per decision. An info tip on each line says who sent or decided it. On content tasks the card sits in the main column under the task rather than the rail.</p>
<p>Once a piece is approved, the content pages hold it read-only through drafting, review and publishing, so nothing can be marked published while a draft is still waiting on a partner.</p>
<h3 id="4-how-wide-a-site-edit-lands">4. How wide a site edit lands</h3>
<p>A site edit could only name pages. A fix made once in a template that thirteen pages share, or once in something every page inherits, had to be written as a page list, which told the implementer nothing about the change. Tasks now carry a level: pages, templated pages (the layout named in words, with a couple of examples), or site-wide. The approval body reads the same way.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>The Receptionist no longer writes a reply. What the sender gets back is composed from the items a person approved, and a question in a note is now an item with an answer of its own.</li>
<li>Planned content reaches the writing pipeline on one rule: the campaign’s writing mode and an approved plan decide, not who the row happens to be stamped to. Page expansions stay with a person until the workflow can draft them.</li>
<li>We can rehearse an agent locally, with its real instructions, tools and gates, without spending the platform’s own credit.</li>
</ol>
<h3 id="1-composed-outcomes">1. Composed outcomes</h3>
<p>A note is not a chat, so nothing a written reply said could ever be answered, and it kept landing in the wrong tense: recorded before anything was recorded. A dozen rules in the prompt policed it and it still drifted. Now each applied item writes its own line and the outcome is a record of what happened.</p>
<p>We also tightened what counts as an event: something that had already happened when the note was written. A plan or an agreed fix is the work item and nothing else.</p>
<h3 id="3-rehearsing-an-agent">3. Rehearsing an agent</h3>
<p>A rehearsal is a real run with the same gates, including the one that refuses a write until the agent has actually read and looked at the page. It is dry by default, so a task the agent decides to file is captured instead of created, and we can open that capture in the same task view a partner would see. An agent that is still switched off can only be rehearsed, never run live.</p>]]></content:encoded></item><item><title>Specialist agents pick their own tasks, and staff can correct an agent that gets stuck</title><link>https://seobrothers.com/updates/2026-09-19/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-19/</guid><pubDate>Sat, 19 Sep 2026 00:00:00 GMT</pubDate><description>Each specialist agent now says which tasks it picks up, and when one gets stuck a strategist can answer it directly and it finishes the job. Hand-written tasks are read against the task standards before they are saved.</description><content:encoded><![CDATA[<p>A Saturday on the agent system: how specialist agents pick up work, and what happens when one gets stuck.</p>
<h2 id="for-our-partners">For our partners</h2>
<p>The client portal domain field refuses www and the bare domain and says why. Pointing either at the portal would take the client’s website offline, and nothing on the screen said so until a partner nearly did it.</p>
<p><img src="/images/updates/2026-09-19/portal-domain-guard.png" alt="The portal domain field with www typed in, outlined in red, and the message explaining why www is refused"></p>
<p>On Asks &#x26; Approvals, answered questions read as one row each and withdrawn ones fold into a collapsed group.</p>
<p><img src="/images/updates/2026-09-19/asks-answered-withdrawn.png" alt="The Asks tab: an Answered row showing the question, the chosen option and the answer, and a Withdrawn group"></p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>Each specialist agent now says, on its own row, which tasks it picks up: what kind, which lane, what status, whether approved, when due. Seven specialists replaced three catch-all agents that treated every kind of task the same way.</li>
<li>When an agent gets stuck, a staff member replies to the escalation as a correction, their word outranks every rule and note the agent holds, and the agent fixes its notebook and finishes the job.</li>
<li>Tasks our team writes by hand are now read against the task standards before they are saved, the same two documents agents read every time they work.</li>
</ol>
<h3 id="1-specialists-pick-their-tasks">1. Specialists pick their tasks</h3>
<p>The task is assigned to the agent before it starts and it can work only that task, so nothing about which task is left to the agent and nothing about which agent is left to code. The situations they pick up are named and defined in one place, so a wrong definition is fixed once for every agent using it. One visible effect: approved content publishes on the specialist’s next scheduled pass rather than at the moment of approval. Each agent is also labelled for people as Process, Specialist or Feedback, with what starts it shown beside.</p>
<h3 id="2-correcting-a-stuck-agent">2. Correcting a stuck agent</h3>
<p>The escalation now links straight to the agent’s work. A guest post writer had withheld an article because it read a rule naming six on-site surfaces as covering a link on another site, and nobody could tell it otherwise: the alert carried only a reference number and the conversation could not be replied to. A writer that declines never blocks the placement; it waits on the escalation. Every rules block now opens with the reading rule: a rule covers the surfaces it names and nothing else.</p>
<h3 id="3-checking-hand-written-tasks">3. Checking hand-written tasks</h3>
<p>We tried four AI reviewers on twelve tasks we had already judged and kept the one that read all twelve right.</p>]]></content:encoded></item><item><title>Choose which analytics events count as conversions in the report</title><link>https://seobrothers.com/updates/2026-09-18/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-18/</guid><pubDate>Fri, 18 Sep 2026 00:00:00 GMT</pubDate><description>The client report can count the events you name as conversions instead of the property's key events. Every discovery gets a strategist's review before it is ready, and agents read facts but no longer write them.</description><content:encoded><![CDATA[<p>Friday brought one reporting change and a handful of smaller ones.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>The report settings sheet has a Counted as conversions picker: pick one or more of the linked property’s events and every conversion number in the report uses that set. Nothing picked means key events, exactly as before.</li>
<li>Every email to a client can be paused, per client or for every client at once.</li>
<li>Every discovery now gets an agent’s draft followed by a strategist’s review before you are told it is ready.</li>
<li>Tasks are shaped by our team and read on your side; monitoring checks, content generation and campaign scope are set by our team.</li>
</ol>
<h3 id="1-counted-as-conversions">1. Counted as conversions</h3>
<p>Conversions in the Website section of the report have always been the property’s key events, and many partners never set those up, or have them tuned for Ads. The picker lists the events the property recorded over the last 90 days, busiest first, marked where they are already key events. The chosen set drives the KPI, the daily chart and the By type list in the partner view, the client portal, the CRM tab and the PDF.</p>
<p><img src="/images/updates/2026-09-18/counted-as-conversions.png" alt="The report settings sheet with the Counted as conversions picker under the Conversions row"></p>
<h3 id="2-pausing-client-emails">2. Pausing client emails</h3>
<p>The per-client switch sits in the Client notifications card on the client’s Client Portal tab, and Quick actions in the top bar pauses or resumes every client at once.</p>
<p><img src="/images/updates/2026-09-18/pause-client-emails.png" alt="The Client notifications card on a client&#x27;s Client Portal tab with a Pause all emails to this client switch"></p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>Facts are written by people; agents read them and keep their notebooks.</li>
<li>An agent sent to one task now touches that task only.</li>
<li>Page reads got more literal: a 404 is the site’s own answer and counts as having read the page.</li>
<li>Domain monitoring stopped counting down to registration and certificate expiry, which flagged every live site once a year, and watches for a registration actually lapsing.</li>
<li>Link placements survive a paused writer agent, and a placement that fails for a passing reason is tried again on the next pass.</li>
</ol>
<h3 id="1-who-writes-facts">1. Who writes facts</h3>
<p>Agents were briefly able to write facts, and the ability came out. Alongside real ones, such as the company’s history, came logs of what the agent had checked that day. An agent that must look at the site every time it works will always find something to write down.</p>
<h3 id="2-one-task-at-a-time">2. One task at a time</h3>
<p>Approving one draft had set the agent working on all four of the month’s drafts at once, and it rewrote three it was never asked about.</p>
<h3 id="3-literal-page-reads">3. Literal page reads</h3>
<p>Redirects are named hop by hop with their status, and a redirecting link is repointed rather than called dead.</p>]]></content:encoded></item><item><title>Bulk client assignments from the Team page, and a rebuild of what agents remember</title><link>https://seobrothers.com/updates/2026-09-17/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-17/</guid><pubDate>Thu, 17 Sep 2026 00:00:00 GMT</pubDate><description>Assign a teammate to clients in one dialog, see whether every client's data is flowing, and read logins and webhooks as tables. Underneath, what agents remember about a campaign is now typed: facts, notebooks and events.</description><content:encoded><![CDATA[<p>Thursday split between the settings pages partners live in and how campaign knowledge is stored.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>Each member row on Settings > Team shows how many clients that person is assigned to; click it to move that teammate onto or off several clients at once.</li>
<li>Integrations opens with a connected-data table, one row per client, showing which Google data is flowing. The Vault and Webhooks are tables too.</li>
<li>Every rule is now a Rule, never broken, or Guidance, lean this way and say why when you do not.</li>
<li>Notes &#x26; feedback is open to every partner; a note the review finds nothing in closes itself, and one that changed nothing can be deleted.</li>
<li>Review threads show every comment in full.</li>
</ol>
<h3 id="1-client-assignments-from-the-team-page">1. Client assignments from the Team page</h3>
<p>The checklist is searchable and lists your active clients: one save instead of a visit to every client’s Team tab.</p>
<p><img src="/images/updates/2026-09-17/team-client-assignments.png" alt="The client assignments dialog opened from a member&#x27;s row on the Team page: a search field and a checklist of active clients"></p>
<h3 id="2-integrations-tables">2. Integrations tables</h3>
<p>Each row names the Search Console, Analytics, Business Profile and Ads property and the Google account each rides on. Company access accounts now show read-only; when the accounts were ours the page could not answer what a partner opens it for, is my clients’ data flowing.</p>
<p><img src="/images/updates/2026-09-17/integrations-connected-data.png" alt="The Integrations page opening with a Connected data table, one row per client with Search Console, Analytics and Business Profile columns"></p>
<p>The Vault is one row per campaign with its CMS and access state (connected, login on file, connection broken, none), and Webhooks is one row per event, edited one at a time, with a status.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>What agents keep about a campaign is now typed: facts, notebooks and events.</li>
<li>Connected sites on a WordPress host that only allows plugin updates from inside its admin now take connector updates that way.</li>
<li>Agents can be scoped to run everywhere except named partners or campaigns.</li>
</ol>
<h3 id="1-facts-notebooks-and-events">1. Facts, notebooks and events</h3>
<p>Facts are dated, sourced rows about the business and the site, and a fact a person states cannot be corrected by an agent. Each agent has its own notebook in place of a daily handoff log. Events record what changed and why. The existing memory was sorted into those three, the results read, and the rules corrected twice: strategy lifted from an old goal never becomes guidance, and a fact never restates something the platform already holds.</p>
<p>A strategist’s comment had gone into a campaign’s shared memory with “keep flagging this every time until removed”, and every agent on that campaign obeyed it, including ones with no business acting on it. Memory was shared by every agent and never expired, and most of it had become instructions to whichever agent came next.</p>]]></content:encoded></item><item><title>Asks: an agent can now put a question to you</title><link>https://seobrothers.com/updates/2026-09-16/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-16/</guid><pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate><description>Asks are a new output for agents, beside a task and silence: one question put to you. Notes &amp; feedback replaces Comments and turns what you write into proposed changes, and the client workspace navigation was consolidated.</description><content:encoded><![CDATA[<p>A day for asks, notes, and a tidier client workspace.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>An ask is a new kind of agent output: one question, optional proposed answers, and a follow-up as its own thread. Until today an agent had two outputs, a task or silence.</li>
<li>Notes &#x26; feedback replaces Comments in the sidebar, and each note you send becomes a short list of proposed changes. Nothing changes until someone accepts.</li>
<li>The client workspace menu is shorter: Planning &#x26; Tasks, Reporting &#x26; Activity, and Keywords &#x26; Mapping each hold tabs that used to be separate items.</li>
<li>Keywords added by hand now pull Google search volume, research needs a location, and the same term tracked in two locations is two keywords.</li>
<li>Alerts are handled by our team for now and no longer appear in the partner workspace.</li>
<li>The setting asking whether approved changes may be applied on a connected site is gone; connecting the site is the answer.</li>
<li>Discovery reports strike word-order and spelling variants Google reports at the same volume and count the demand once.</li>
</ol>
<h3 id="1-asks">1. Asks</h3>
<p>A question like whether a client would move off a slow host needed a shape of its own. The sidebar entry is now Asks &#x26; Approvals, open asks lead your daily or weekly digest, a task waiting on an answer shows as exactly that on the client’s list, and answering brings back the agent that asked. Our team and the agents can both ask.</p>
<p><img src="/images/updates/2026-09-16/asks-and-approvals.png" alt="The Asks &#x26; Approvals page with two open questions waiting on an answer, one answered, and a collapsed Withdrawn group"></p>
<h3 id="2-notes--feedback">2. Notes &#x26; feedback</h3>
<p>Notes are read as soon as they land. The proposed changes are a rule to add, something to remember, campaign context, or work for the team, and managers can switch on applying automatically. You can upload a call transcript in place of a note, and a note that no longer applies can be withdrawn, with what it changed undone.</p>
<p><img src="/images/updates/2026-09-16/notes-and-feedback.png" alt="The Notes &#x26; feedback page with a switch to apply notes automatically, a note field and an Upload a transcript button"></p>
<h3 id="3-client-workspace-menu">3. Client workspace menu</h3>
<p>Configuration split into SEO Campaign and Client Configuration, and workspace settings have a grouped side nav.</p>
<p><img src="/images/updates/2026-09-16/client-workspace-nav.png" alt="The client workspace sidebar grouped into Communication and SEO Service, with the SEO Campaign tab strip above"></p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>Agents now see every page at desktop and phone width before filing a visible change, and a page that refuses to load is recognised as blocked rather than mistaken for the page itself.</li>
<li>The monthly planners only run where their deliverable is in scope.</li>
<li>The note review was tuned over dozens of dry runs against real notes and invented scenarios before it read a single live note.</li>
<li>The team can send an email thread or a call to a client’s notes straight from our inbox.</li>
</ol>]]></content:encoded></item><item><title>Brands: group clients under a franchise or roll-up with shared rules and context</title><link>https://seobrothers.com/updates/2026-09-15/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-15/</guid><pubDate>Tue, 15 Sep 2026 00:00:00 GMT</pubDate><description>A brand groups the clients that belong to one company and carries rules and context every member campaign inherits. Campaign context, citation notes and a daily digest also arrived, and the Google data sync was rebuilt to scale.</description><content:encoded><![CDATA[<p>A Tuesday for multi-location books and for the data agents read.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>A brand groups clients that belong to one company: a franchise system, a dental service organisation, a roll-up. It carries context every agent working a member campaign reads, and rules every member campaign inherits.</li>
<li>The campaign’s Rules &#x26; Context tab has a Campaign context card: lasting facts about a campaign, read by every agent and never shown to the client.</li>
<li>The Citations page shows notes per listing: what the listings service recorded (a directory login it created, a site it swapped for an alternative) alongside notes you or we add.</li>
<li>Notification settings offer Off, Weekly or Daily for the digest.</li>
<li>The send-back notice now says when the agent will pick it up, and review history shows comments in full, with long links wrapping inside the card.</li>
</ol>
<h3 id="1-brands">1. Brands</h3>
<p>A brand also carries the corporate website and an optional headquarters client. The Clients list has a Brand column, a filter, and a bulk action to add clients to a brand.</p>
<p><img src="/images/updates/2026-09-15/clients-brand-column.png" alt="The Clients list with a Brand column, a brand filter and a Brands button"></p>
<p>Rules now come in three scopes, campaign, brand and workspace-wide, and a rule repeated across several member campaigns can be promoted into one brand rule.</p>
<p><img src="/images/updates/2026-09-15/brand-page.png" alt="A brand page: details, brand context, the rules every member campaign follows, and its clients"></p>
<h3 id="2-campaign-context">2. Campaign context</h3>
<p>What the client’s website platform will and will not allow is the kind of fact that belongs there. Notes are for things that change; context is for things that do not.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<p>The daily refresh of Search Console, Analytics, Ads and call tracking data now works through the connected properties one at a time, so every property refreshes each day however many clients we add.</p>
<p>When an agent reads a page’s Search Console performance it now defaults to 90 days rather than 28. A quarter is what a strategist reads before moving a page; a month is a wobble. One agent had proposed retargeting a page away from its terms on two impressions in the 28-day window; the 90-day read showed hundreds.</p>]]></content:encoded></item><item><title>Rank tracking follows the client's website, and feedback always puts an agent on the rework</title><link>https://seobrothers.com/updates/2026-09-14/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-14/</guid><pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate><description>Tracked keywords now move with a client's website when it changes. Feedback you send back always puts an agent on the rework, the review page shows the full feedback, and agents read a page in full before they touch it.</description><content:encoded><![CDATA[<p>The first day of the week went to the approval loop and to what agents read before they act.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>Rank tracking follows the client’s website: when the primary website changes, the tracked keywords retarget with their ranking history intact.</li>
<li>When you send a task or a draft back with feedback, an agent takes the rework whichever way the task was created, and the notification says so.</li>
<li>Requesting a discovery now includes picking the teammates on the prospect. They are assigned to the client on submit and are the people told when the report is ready.</li>
<li>Owners and admins can choose which clients their notifications cover.</li>
</ol>
<h3 id="1-rank-tracking">1. Rank tracking</h3>
<p>A move from a subdomain to the root domain is the usual case, and an hourly check catches any keywords that drifted.</p>
<h3 id="2-feedback-and-rework">2. Feedback and rework</h3>
<p>On the review page a send-back shows its full feedback in place, with an Actioned badge once a new version has been submitted and Waiting until then. The thread has become History and sits under the decision, and the notes panel is the one place to write. The approval policy pair reads Ask first or Proceed without asking.</p>
<p><img src="/images/updates/2026-09-14/approval-policy-labels.png" alt="Two approval rows, Content plans and Link building plans, reading Ask first and Proceed without asking"></p>
<h3 id="4-notification-audience">4. Notification audience</h3>
<p>The choice is per event, Assigned or All clients, beside the existing Off, Email, In-app and Both.</p>
<p><img src="/images/updates/2026-09-14/notification-audience.png" alt="Client notification settings, each event with an Assigned or All clients choice beside Off, Email, In-app and Both"></p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>Agents now read a page’s full code the way a search engine does and look at it the way a visitor does before they may file an edit.</li>
<li>A campaign agent whose work runs long now carries on in a later sitting.</li>
<li>We stopped importing history-only terms and released them from the platform: one partner’s own rank tracker keeps most of a client’s terms as history, never crawled.</li>
</ol>
<h3 id="1-reading-before-editing">1. Reading before editing</h3>
<p>We reviewed the feedback on agent tasks and the transcripts behind it. The agent had been reading a cut-down text of the page it was about to edit, without looking at the page itself. A read also says when the host served a saved copy, because that saved copy is what visitors are seeing.</p>
<h3 id="3-history-only-terms">3. History-only terms</h3>
<p>The agent’s rank notes now say a term is kept as history instead of asking someone to escalate a registration problem.</p>]]></content:encoded></item><item><title>The WordPress connector reads and edits Divi 5 pages</title><link>https://seobrothers.com/updates/2026-09-13/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-13/</guid><pubDate>Sun, 13 Sep 2026 00:00:00 GMT</pubDate><description>Pages built with the newest Divi builder can now be read and edited through our connector without corrupting the page. The comparison view on a review is read-only while it is open.</description><content:encoded><![CDATA[<p>A Sunday spent on one website builder and on the review page.</p>
<h2 id="for-our-partners">For our partners</h2>
<p>While Show changes is on, the approve and request-changes controls and the notes box step aside, so a note is always written against the draft itself and never against a blend of two versions. Hide changes brings them back. The thread stays readable throughout.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<p>The connector now recognises Divi 5 as its own builder, decodes the copy for reading, and writes edits back the way WordPress itself does, so the page is stored exactly as Divi stores it. Divi 5 stores a page’s copy in a new way, and the connector had been treating those pages as the older Divi. A read came back with no readable text, and an edit would have written code into the page where words should be. A member of the team found it while working a client’s site edits by hand.</p>
<p>A module that carries the same text for desktop and phone counts as one match and the edit lands in both places. Bench-tested on a copy of a live page: a page read and written back comes out identical, and an inserted link appears in the theme’s own styling. Structure edits on Divi 5 pages are refused for now.</p>
<p>While testing we also fixed one thing for every builder: a find and replace that is refused no longer overwrites the saved undo point, so a revert still undoes the last edit that actually landed.</p>]]></content:encoded></item><item><title>Show changes on a resubmitted draft</title><link>https://seobrothers.com/updates/2026-09-12/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-12/</guid><pubDate>Sat, 12 Sep 2026 00:00:00 GMT</pubDate><description>A content review that has come back for a second look now shows exactly what moved since the version you last read. The testing standard became scripts we run before every change.</description><content:encoded><![CDATA[<p>A quiet Saturday with one change for reviewers and a day of work on how we test.</p>
<h2 id="for-our-partners">For our partners</h2>
<p>On a content review that has come back for a second look, the draft carries a Show changes button. It swaps the text for the same article with removed words struck through and added words highlighted, laid out as the article reads, against the version you last reviewed. Hide changes brings the plain draft back. The bar above it says only that the version was updated.</p>
<p>First attempts and decided reviews show nothing new. The button appears only when there is an earlier round to compare against and the text actually differs.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<p>Thursday’s testing standard became commands. One creates a throwaway user and test client for each piece of work, another drives a real browser through the login and the pages the way a person would, a third checks every main page as a partner and as staff, and the last removes only what was created for the test and refuses to touch anything real. Two people testing at once no longer share a login, so nothing one does can trip up the other.</p>]]></content:encoded></item><item><title>Communications settings and a Start Here page for new partners</title><link>https://seobrothers.com/updates/2026-09-11/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-11/</guid><pubDate>Fri, 11 Sep 2026 00:00:00 GMT</pubDate><description>Settings gained a Communications tab and partners without a plan land on Start Here. Staff got a record of every edit the team makes to agent work, and the one-off SEO audit became a project on the platform.</description><content:encoded><![CDATA[<p>A Friday with one long-running build landing in the evening and a cluster of smaller staff tools through the day.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>Settings has a Communications tab beside Notifications, for what the platform sends you outside of campaign activity. The Notifications tab now lists campaign and account events only.</li>
<li>Partners who have not started a plan have a Start Here page: a setup checklist with a short video for each step, and the people on your account.</li>
<li>A new agency can create its own workspace from a form on our website and sign in with a one-time link.</li>
</ol>
<h3 id="1-communications">1. Communications</h3>
<p>It covers product updates, service notices, onboarding emails and our newsletters, each with its own preference.</p>
<p><img src="/images/updates/2026-09-11/communications-tab.png" alt="The Communications settings tab listing product updates, service notices, onboarding emails and newsletters, each with a switch"></p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>Staff have a new page listing every agent task a person edited, left feedback on, or cancelled while it was held, with the before and after of each edit and the notes that went with it.</li>
<li>The one-off SEO audit we have been running by hand for one partner’s clients is now a project on the platform.</li>
<li>We wrote down what “tested” means before a change ships: a separate copy of the app, an automated check of the code, a throwaway user and client, and a real browser journey as that user. Until today it lived in one person’s head.</li>
</ol>
<h3 id="1-the-review-record">1. The review record</h3>
<p>Work released without a change is not a row, and a cancel with nothing said is not a row either, which cut the table to the rows worth reading. Each row can take notes and be marked actioned with a takeaway, so what we learn from one review is kept where the next reviewer sees it.</p>
<h3 id="2-the-audit-as-a-project">2. The audit as a project</h3>
<p>An agent does the first pass on the client’s campaign without touching it, a strategist reviews the findings tab by tab, and the deliverable spreadsheet is generated from one master template. Each audit starts from the client’s own campaign.</p>]]></content:encoded></item><item><title>Every rank cell says what it knows</title><link>https://seobrothers.com/updates/2026-09-10/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-10/</guid><pubDate>Thu, 10 Sep 2026 00:00:00 GMT</pubDate><description>The Keywords page names each rank state instead of one catch-all, reports gain two more trend switches, and the branded WordPress plugin gets a share link. Agents read real server response time before recommending speed work and must open a page before writing a task about it.</description><content:encoded><![CDATA[<p>A Thursday split between the Sessions and Keywords pages and a long pass on how agents read a website.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>On the Keywords page, a rank cell names its state instead of collapsing everything into Not in top 100.</li>
<li>Reports gain two more switches under Website and Business Profile: hide the six-month trend chart itself, or hide only the dashed year-prior line on it.</li>
<li>The WordPress Plugin tab gains a share link that always serves your current branded build, and the plugin now updates from a neutral service address that carries no agency’s name.</li>
<li>Tasks our side cancelled as triage no longer appear in your task list or activity; a cancel made by your own team still does.</li>
</ol>
<h3 id="1-rank-states">1. Rank states</h3>
<p>The states are checked with a date, an older check with its date, awaiting first check, tracking not started, tracking paused.</p>
<p><img src="/images/updates/2026-09-10/keyword-rank-states.png" alt="The Keyword Rankings table with the Rank column reading Tracking not started on every row"></p>
<h3 id="2-trend-switches">2. Trend switches</h3>
<p>Both came from a partner who sent a screenshot while reviewing the report.</p>
<p><img src="/images/updates/2026-09-10/report-trend-switches.png" alt="Two report settings, Six-month trend and Year-prior line on the trend, each with its own switch"></p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>The crawler now records the server’s answer time only when it reached the server directly. Our site-wide optimization agent had been recommending caching and hosting work built on the wrong number.</li>
<li>Agents read pages properly now: an outline first, and no task about a page they have not opened live in that sitting.</li>
<li>Agents know what a connected site actually runs: WordPress and PHP versions, theme, SEO plugin, caching.</li>
<li>Search Console auto-linking picks the property that covers exactly the campaign’s site, so franchise campaigns on a shared domain no longer land on another territory’s property.</li>
</ol>
<h3 id="1-server-answer-time">1. Server answer time</h3>
<p>The crawler’s response time was how long the whole page took to arrive, not how long the server took to answer. The speed check grades the server’s answer time in bands, and it no longer counts toward the technical score.</p>
<h3 id="2-reading-a-page">2. Reading a page</h3>
<p>The outline is the headings, every link with its text and where it sits on the page, images with their alt text, canonical, robots and schema types. The live-read rule came from one agent that had ordered links from two posts that already carried them, working from an earlier crawl.</p>]]></content:encoded></item><item><title>Your own branded WordPress plugin, and a fallback when a client never answers a review</title><link>https://seobrothers.com/updates/2026-09-09/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-09/</guid><pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate><description>Each partner gets their own branded build of the WordPress connector from a new Settings tab. Written Content approvals can fall back to approved after a set number of days. Reports gain a Website toggle and per-section comparison switches.</description><content:encoded><![CDATA[<p>A day for the white label: the plugin now looks like yours, and the approval flow gets a way to move on when a client does not answer.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>Settings has a new WordPress Plugin tab: set the plugin’s name, author, website and support email, and download your own build of the connector. Every connected site runs your build.</li>
<li>Written Content approvals get an optional fallback: if a client does not answer inside a set number of days, the platform approves the piece as is and proceeds. Off everywhere by default.</li>
<li>Reports gain a Website toggle and per-section comparison switches, and anything hidden from the client’s report is now an amber banner listing everything hidden.</li>
<li>Every filtered table works at phone width: the search stays inline and the dropdowns open in a Filters sheet, with an active-filter count and a Clear button.</li>
<li>A content piece closed while its review was still out reads Pending approval on the planning page, not Published.</li>
</ol>
<h3 id="1-your-own-wordpress-plugin">1. Your own WordPress plugin</h3>
<p>The tab previews how the plugin reads on a site’s Plugins screen, and the account the plugin signs in with carries your team’s name.</p>
<p><img src="/images/updates/2026-09-09/wordpress-plugin-tab.png" alt="The WordPress Plugin settings tab: download your build, and a preview of how it reads on a site&#x27;s Plugins screen"></p>
<h3 id="2-approval-fallback">2. Approval fallback</h3>
<p>Partners who send content to clients for approval report that clients sit on reviews for months. Turn it on in Settings > Approvals with a number of days; a client can override or opt out on its own Approval rules. The platform asks first. The clock starts when the review was requested, a send-back resets it, only reviews opened after you turn it on qualify, and a reminder goes out two days before the window closes.</p>
<h3 id="3-report-switches">3. Report switches</h3>
<p>The Website toggle lets a client with Analytics linked get a keyword-only report, and each KPI section has its own switches for the previous-period and year-over-year comparisons. The banner came from a partner who toggled Conversions off and on during a client call and could not tell whether it worked.</p>
<p><img src="/images/updates/2026-09-09/hidden-from-report-banner.png" alt="A client&#x27;s Reporting page with an amber banner listing what is hidden from the client&#x27;s report"></p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<p>Every ranking an agent reads now carries the current time, when the keyword was registered, when it was last checked and how often it is checked, and every session opens with the time of day. The change came from an agent that raised an alarm that the rank tracker had returned no data two days after keywords were added. They had been added that morning; the agent had been started by hand four times within half an hour and treated each start as a new day. Escalations name the agent that raised them.</p>]]></content:encoded></item><item><title>Workspace-wide defaults for the client portal and client reports</title><link>https://seobrothers.com/updates/2026-09-08/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-08/</guid><pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate><description>Set once which portal pages and report sections every client gets, and override per client. The portal can show the campaign goal, brief and competitors, and content due dates are now publish dates.</description><content:encoded><![CDATA[<p>Back from the long weekend with a day for the screens clients see.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>Client Portal settings gain a Dashboard pages card: choose once which portal pages every client sees, and the per-client toggles on the Client Portal tab still win when set. Three new portal options and an All phases switch arrive with it.</li>
<li>Reporting Defaults is a new Workspace Settings tab, inherited by every client, and the per-client sheet stores only what differs.</li>
<li>Content plan items carry a real publish date, and the content plan table shows each item’s type.</li>
<li>Proposals are now built from two catalogs, a campaign process outline and minimum monthly deliverables, and a won discovery carries both onto the campaign as its process and scope. Wording you wrote for a deliverable prints verbatim on the client’s page.</li>
<li>Email Sending takes an optional reply-to address, applied to every client-facing send. A sending domain you have verified now goes live within the hour of its records landing, with no click.</li>
</ol>
<h3 id="1-dashboard-pages">1. Dashboard pages</h3>
<p>The new options are off by default. Campaign goal and Campaign brief show on the portal’s ongoing phase in the same card your client overview uses, and Competitors shows the competitor sites as chips. All phases, when off, drops the phase tabs from a client’s Overview so they see only the current phase. The portal’s ongoing phase also drops its planned-work list, so it matches your view.</p>
<p><img src="/images/updates/2026-09-08/portal-dashboard-pages.png" alt="The Dashboard pages card on Client Portal settings, a grid of portal pages with on and off switches"></p>
<h3 id="2-reporting-defaults">2. Reporting Defaults</h3>
<p>The tab carries the same section toggles and PDF contents as the per-client sheet. A client sheet that differs is marked Custom and has a Use workspace defaults button.</p>
<p><img src="/images/updates/2026-09-08/reporting-defaults.png" alt="The Reporting Defaults tab in Workspace Settings, with a switch for each report section"></p>
<h3 id="3-publish-dates">3. Publish dates</h3>
<p>Geo pages, service pages and page expansions land on the 15th of their month, and a plan’s blog posts spread evenly across it, interleaving with posts from other plans. Writing opens on the 1st.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>Every action staff take on held agent work is now recorded: edited (with what changed), rejected, released.</li>
<li>The agent builder retired its always-on tool set; an agent’s tool list is exactly what it names.</li>
<li>More connector releases, this time from working the blog publishing lane by hand.</li>
</ol>
<h3 id="3-connector-releases">3. Connector releases</h3>
<p>Posts open without a duplicate title heading, a featured image can lead the body for themes that never show it, and each post can carry its own search-indexing override. Page addresses refresh, reading settings work for sites with no posts page, and new links are styled like the post’s own links so readers can see them.</p>]]></content:encoded></item><item><title>A Sunday of connector releases and a quieter task queue</title><link>https://seobrothers.com/updates/2026-09-06/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-06/</guid><pubDate>Sun, 06 Sep 2026 00:00:00 GMT</pubDate><description>Nothing changed on partner screens. The WordPress connector learned to clone blocks, change heading levels and move sections, and the staff task queue now lists only work that is ready to start.</description><content:encoded><![CDATA[<p>A Sunday. Nothing moved on partner screens; the work was all underneath.</p>
<h2 id="for-our-partners">For our partners</h2>
<p>Nothing moved on the surface today; the work was all underneath.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>Connector 2.2.0 and 2.3.0 were built inside real on-page tasks, one limitation at a time.</li>
<li>The connector installer now handles more of what real hosts throw at it, and refuses to install when the login on file points at a different site than the client’s (a staging copy).</li>
<li>The staff task queue no longer lists tasks with a pending approval request, in the open queue or on Upcoming. Pending Approvals is where those are followed up, and its plan rows now show how many pieces each plan carries.</li>
</ol>
<h3 id="1-connector-220-and-230">1. Connector 2.2.0 and 2.3.0</h3>
<p>Link insertion takes a context phrase, so when an anchor repeats on a page the agent names the sentence instead of widening the anchor. The page outline reports children counts, device visibility and background images, and every element can be named exactly, so a block can be cloned with its design, a heading’s level changed with its look pinned, and a top-level section moved, on Elementor, the block editor, classic pages, Divi and WPBakery. Bench-checked before release.</p>
<h3 id="2-the-installer">2. The installer</h3>
<p>It gets through security check pages that clear themselves in a browser, admin email prompts, custom two-factor screens, passwordless login switches, and maintenance mode after an upload. Installs now happen case by case as tasks need them.</p>]]></content:encoded></item><item><title>Automatic changes on a connected site are now something you turn on</title><link>https://seobrothers.com/updates/2026-09-04/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-04/</guid><pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate><description>A connected website no longer hands site edits or publishing to the agent by default; partners opt in per workspace or per client. The WordPress connector now reads pages whose copy lives in custom fields, searches a whole site and places links that know a copy link from a navigation link.</description><content:encoded><![CDATA[<p>A Friday with one decision for partners and a long stretch of plugin work underneath.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>Connecting a client’s website no longer means the agent starts applying changes there. Site edits and content publishing route to a person by default, connection or not, and you turn automatic implementation on for the workspace or for one client.</li>
<li>Plans that empty out now end cleanly however the last item goes: cancelling it from the task list, the planning page or the API ends the plan and withdraws its approval request. A plan’s approval request can only be opened while the plan is still proposed, so an approved plan never shows as awaiting a decision again.</li>
<li>Through the API, one-off tasks are site edits or citation orders, and plans are content, links or Business Profile posts. Citation orders are checked on the way in the same way the agent’s are.</li>
</ol>
<h3 id="1-turning-automation-on">1. Turning automation on</h3>
<p>The switch is a new Connected sites card on Settings > Implementation, and a Connected site card on each client’s implementation page. Changing who implements resets automation to manual, and the page tells you when that happened.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<p>Each WordPress connector release today was built on something a live site taught us. Edits are saved with an administrator’s permissions, so a page builder no longer strips a map embed or accessibility details when one sentence changes. Every response tells the host not to keep a copy, so a site’s cached copy cannot hand back the page as it was before the edit. Elementor edits rebuild only the edited page’s styling, so a text edit never leaves the rest of the site waiting.</p>
<p>The 2.0.0 release: pages whose copy lives in custom fields are readable and editable, site-wide text search and scans, link placement that knows a copy link from a navigation link, a page outline, inserting a section next to a named one styled like its neighbour, removing a named block, adding menu items. The agent’s website tools no longer close tasks on their own; they record what they did and the agent decides. Bench-checked across five page builders before release, then refined against the first live site.</p>]]></content:encoded></item><item><title>Approval emails lead with the website, and campaign notifications follow client assignments</title><link>https://seobrothers.com/updates/2026-09-03/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-03/</guid><pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate><description>Approval requests arrive as new, named by the client's website, and land on the task. Campaign notifications reach only the team members assigned to that client. Approved plans merge into one month-by-month list.</description><content:encoded><![CDATA[<p>Thursday was about who hears what, and about the email that asks for a decision.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>The approval request email is rewritten. The subject leads with the campaign’s website and says the piece is ready for your approval, or back for it after feedback, and the button lands on the task page.</li>
<li>Campaign notifications now reach only the team members assigned to that client. If nobody on your team is assigned to a client, nobody hears about it, so check assignments.</li>
<li>On the planning page, every approved plan of one kind merges into one list sorted by month, and only plans still waiting on a decision keep their own section on top. Approving a plan approves all of it: nothing added to an approved plan later sits pending, and the Approve additions button is gone.</li>
<li>Google connections granted without the matching permission ticked on the consent screen now read Needs permission with a Reauthorize button, instead of Connected with empty pickers.</li>
<li>The Integrations tab names the Google account holding each linked property.</li>
<li>A discovery for a franchise territory on a shared domain is its own prospect, and its crawl stays inside that folder.</li>
<li>The crawl audit now flags raw template codes and placeholder copy that visitors can see.</li>
</ol>
<h3 id="1-the-approval-email">1. The approval email</h3>
<p>Client record names are often the legal Business Profile name where the website is the thing you know. Approve and request changes already live on the task page.</p>
<h3 id="2-notifications-follow-assignments">2. Notifications follow assignments</h3>
<p>Your notification settings are grouped into Your clients and Your account, and a sheet lists which clients reach you.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>A new Pending Approvals page lists everything we are waiting on partners to approve, across every partner, grouped and filterable, defaulting to the partners you are assigned to. The all-partners view loads in about thirty milliseconds.</li>
<li>The content QA reviewer no longer decides whether a draft needs the partner’s review. The platform reads the campaign’s approval policy and opens a review only where one is required; a campaign set to approve written content automatically cannot be asked.</li>
<li>Notification email goes out with retries and pacing, so a burst of approvals across a large team arrives in full.</li>
<li>Every discovery now records the intake exactly as submitted.</li>
</ol>]]></content:encoded></item><item><title>The platform now knows what every client site is built on</title><link>https://seobrothers.com/updates/2026-09-02/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-02/</guid><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate><description>Every client site is classified by the CMS or builder it runs on and shown on Website Access and the client header. Citations stop ordering the big directories, and competitive gap reviews reach every workspace.</description><content:encoded><![CDATA[<p>A day about knowing the client’s website before touching it, plus a long pass over the staff inbox and the task view.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>The platform now detects the CMS or site builder each client site runs on and shows it on the Website Access page and in the client header.</li>
<li>The citation scan now lists the Google, Apple Maps and Bing profiles it finds for a location, so a location whose only listing is its Google profile no longer reads as having none.</li>
<li>“Choose sites for me” is now the platform’s pick, ranked by directory authority, and it never orders Google, Apple Maps, Bing or Yelp listings; a hand pick naming one of those is refused with the reason.</li>
<li>Competitive gap reviews are on for every workspace, and the setup checklist folds the gap step into the monitoring step.</li>
<li>The draft checkpoint added yesterday is now called Newly published content on the approval rules and in the Approvals queue.</li>
<li>Activation start dates skip weekends.</li>
</ol>
<h3 id="1-site-detection">1. Site detection</h3>
<p>Managers can correct it or ask for a fresh detection, and the connect picker opens on the detected platform when it is one the platform pairs with.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>Site detection no longer asks an AI model about the sites it cannot recognise on its own; unknown now means a human reads it.</li>
<li>The staff task view grew up: the campaign’s website in the header, the campaign’s rules in the rail, site logins on the task, and a CMS row.</li>
<li>My Inbox got category tabs, a Cleared tab with undo, and paging.</li>
<li>Team activity gained a list behind every count, a people picker, a columns picker and totals in the footer, and it now counts a task completed once however many times it was closed.</li>
</ol>
<h3 id="1-rules-written-by-hand">1. Rules written by hand</h3>
<p>The model is gone from detection. It had started the day being asked about the sites detection could not recognise, and it kept naming platforms the evidence did not support. We read every unresolved site by hand (response headers, cookies, where its files are served from, stored logins) and turned each into a rule: fifteen platforms detection had never heard of, sites hiding behind security plugins, parked domains behind redirects. Sites that are code rather than a CMS are named for what they are.</p>]]></content:encoded></item><item><title>The client overview becomes the campaign plan</title><link>https://seobrothers.com/updates/2026-09-01/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-09-01/</guid><pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate><description>The client page now opens on the campaign plan with goal, brief and competitors editable in place, the agent page becomes Sessions, and content can pause for a draft check on your own site before it goes live.</description><content:encoded><![CDATA[<p>A long Tuesday, most of it on the screens partners look at every day.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>The client overview is now the campaign plan. Open a client and you land on the phase tabs, the setup checklist, and the goal, brief and competitors, all editable in place, with recent activity underneath.</li>
<li>Content can now pause for a second check: a draft on your own website.</li>
<li>The agent page is now called Sessions.</li>
<li>Removing the last item from a plan ends the plan and withdraws its approval request.</li>
<li>Approval requests for paused clients carry a Paused badge.</li>
<li>The setup checklist stops flipping back to unfinished on campaigns past onboarding: a new alert or a newly added keyword no longer reopens a setup step.</li>
</ol>
<h3 id="1-the-campaign-plan">1. The campaign plan</h3>
<p>The separate campaign details page redirects here. The ongoing phase leads with goal, brief and competitors instead of a planned-work list.</p>
<h3 id="2-a-draft-on-your-site">2. A draft on your site</h3>
<p>Alongside the written review, a campaign can ask you to approve a piece once it is staged on the site, and the Approvals queue gets a section for these. Three answers: approve, approve because it is already live, or send feedback. Nothing goes live from the task until the draft is approved.</p>
<h3 id="3-sessions">3. Sessions</h3>
<p>The tabs, sidebar and table say Sessions because what you are reading is the session, not the agent behind it, and the sidebar card lists only the scheduled ones. Sessions started by hand are labelled as such.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>Hourly site monitoring now checks one campaign at a time, tries again when a check fails, and raises an alert when a round does not finish. The weekly digest works the same way.</li>
<li>The month-end AI visibility check now audits its own coverage: a campaign it under-sampled is checked again, and a month with no check raises an alert.</li>
<li>For the team, the task queue caps pick-ups at five held tasks.</li>
<li>Archiving a client withdraws every open approval on it.</li>
<li>A staff mail log shows every email the platform sent a partner and whether it arrived.</li>
<li>Partners who run their own rank-tracking account keep it; the platform mirrors the keyword list both ways once a day.</li>
</ol>]]></content:encoded></item><item><title>Any team member can decide task approvals</title><link>https://seobrothers.com/updates/2026-08-31/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-08-31/</guid><pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate><description>Approving or sending back a task is open to every member of your team.</description><content:encoded><![CDATA[<p>The last day of August: one thing for partners, and a sweep of link building underneath.</p>
<h2 id="for-our-partners">For our partners</h2>
<p>Approving a task, or sending it back with changes, is open to every member of your team. Plan approvals and content reviews already were; task decisions had been limited to owners and admins. Approval rules and workspace approval defaults stay with managers.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<p>Agents can now see the standalone technical check series the auditor runs (soft 404s, missing pages that redirect, www and https resolution, sitemap discovery, robots, safe browsing, indexed count), including what passes and past results, and can re-check a site on demand to verify their own fix.</p>
<p>A sweep tightened link planning. Starting it by hand once produces one plan. The agents that write a guest post’s topic and article hand the task on, and it closes when the post publishes. A placement that names the same target URL twice is recorded once. And a campaign with no link network chosen is classified before anything is placed.</p>]]></content:encoded></item><item><title>Business Profile posts publish to the location they were written for</title><link>https://seobrothers.com/updates/2026-08-28/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-08-28/</guid><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate><description>Each Business Profile post carries its location and posts spread across the month, website edit approvals split into visible and technical, and the team's task queue reorders by urgency.</description><content:encoded><![CDATA[<p>A multi-location client with dozens of Business Profiles set the day’s agenda.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>Every Business Profile post now carries the location it was written for and publishes to that profile, and due dates within a month spread evenly across it. Planning pages show a Location column on multi-location clients, and the post sheet names it.</li>
<li>Approval rules for website edits split in two: Visible page changes, which default to requiring your approval, and Technical changes, which default to automatic. Safe mode still requires everything, and any override you had set carries onto both.</li>
<li>A content task at the publishing stage now reads Publishing: Service page (or Blog post, Geo page) in your task lists, with a View the approved content button and Mark as published on the task itself.</li>
<li>New pages planned from now on need a target URL up front, so the publisher is never guessing where a piece goes.</li>
</ol>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>Guest post topics and articles are written by agents now, the same way the content writers are.</li>
<li>Our team’s task queue reorders by urgency: overdue first, then due date, undated last.</li>
<li>Link, Business Profile post and content page tasks can only be born inside plans, so every one of them has a month and shows on the planning pages.</li>
<li>A delivered discovery’s website and local analysis can be refreshed in place with the campaign’s current competitors and Business Profile, instead of marking it lost and resubmitting.</li>
</ol>
<h3 id="1-guest-posts">1. Guest posts</h3>
<p>Higher-authority link placements, which had been hand-sourced, run through the same workflow drawing from any site that qualifies on authority alone, with hand-sourcing as the fallback when none does.</p>
<h3 id="2-the-task-queue">2. The task queue</h3>
<p>Tasks beyond the two-week work-ahead window wait on their own Upcoming page and join the queue when their day comes. Blocked tasks sit in their own section, a task with an approval outstanding cannot be picked up, a team roster shows who holds what, and the filters live in the address bar so a filtered queue is a link.</p>]]></content:encoded></item><item><title>Blog posts and geo pages are written by dedicated writer agents</title><link>https://seobrothers.com/updates/2026-08-27/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-08-27/</guid><pubDate>Thu, 27 Aug 2026 00:00:00 GMT</pubDate><description>Content drafts now come from brief-writer, writer and QA agents. Tasks hand between teams rather than people, published URLs can be recorded from the editor, and cancelling a client winds the campaign down properly.</description><content:encoded><![CDATA[<p>Content writing changed hands today, and a client’s exit got the same care as its entrance.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>Written content on full campaigns now comes from agents: a brief-writer, a writer and a QA reviewer. You see the same review flow, with a brief you can read on the piece.</li>
<li>Leaving active is now either a pause or a cancellation, both schedulable, and cancelling winds the campaign down.</li>
<li>Tasks hand between sides, not people. The assignee options are your team or our team; individual names and avatars no longer appear in your task lists.</li>
<li>The New task form offers Website edit, Business Profile edit and Research, since content, links and citations are born from planning, and the Request task button is gone.</li>
<li>A task waiting on approval cannot change status for anyone; the decision is the only lever, and Request changes is how you say no to work you do not want.</li>
<li>The content editor’s Publishing card now carries Mark as published, so anyone on your team can record where a piece went live, whoever holds the task.</li>
</ol>
<h3 id="1-writer-agents">1. Writer agents</h3>
<p>Once a plan is approved, a brief-writer agent writes the brief onto each piece. When the piece is due, a writer agent writes the draft from that brief, never ahead of it. A QA reviewer agent checks the draft, saves its notes on the version, and submits it for your review.</p>
<h3 id="2-cancelling-a-client">2. Cancelling a client</h3>
<p>Keyword tracking is paused rather than deleted (history kept, resumes if the client comes back), open work due after the cancellation date is cancelled with a note, work owed before it is kept, monitoring and reporting switch off, and client logins are revoked.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<p>Operations grew by five tabs: Site Monitoring (crawl score and one dot per monitoring category, fleet-wide, worst first), Campaign Agents (on or off, and what would run), Platform Issues (one list of open and addressed alerts and agent escalations), Campaign Offboarding (a wind-down checklist per cancelled campaign) and Team Activity.</p>
<p>For the book of agencies moving onto the platform, document links our team attached to open tasks come across as comments on the task, and campaign start dates come from the original onboarding date rather than the day of the move.</p>]]></content:encoded></item><item><title>Sign in on your own domain, and a Rules tab for every campaign</title><link>https://seobrothers.com/updates/2026-08-26/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-08-26/</guid><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate><description>Partners with a white-label domain use the whole platform there, every campaign gets a Rules tab, content pieces get a featured image, and approving over unread feedback asks first.</description><content:encoded><![CDATA[<p>Three changes today: the platform on your own domain, a Rules tab for every campaign, and featured images.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>Partners with a live white-label domain can now sign in and use the whole platform there, not only their clients’ portal.</li>
<li>Every campaign has a Rules tab, beside Scope.</li>
<li>Content pieces now have a featured image.</li>
<li>Approving a content piece while your own comments or unsent notes are waiting on it asks whether to go back or approve as is. Our publishers also see the review thread on the task before they publish.</li>
<li>A Business Profile post that cannot publish because Google is not connected tells you, and publishes on its own once it is.</li>
<li>Guest posts and Business Profile posts no longer wait a fixed number of days between placements; the plan’s due dates set the pace.</li>
<li>Your approval rules now apply to work our own team files, not only the agents’.</li>
</ol>
<h3 id="1-your-own-domain">1. Your own domain</h3>
<p>Connecting Google or your CRM from your own domain works too: the connection is made under your brand, then returns you to your domain.</p>
<h3 id="2-rules">2. Rules</h3>
<p>A rule is a standing directive for the campaign (never change the pricing page, always link to the booking form), added and edited by your managers. Agents read the rules and can propose one, never edit or delete one.</p>
<h3 id="3-featured-images">3. Featured images</h3>
<p>Drop a file or paste a URL in the editor’s sidebar, write the alt text, and it shows above the piece on review pages and publishes as the featured image on WordPress, Ghost and Shopify.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>Feedback on a written piece has a reacting agent: it reads the draft, folds your notes into the brief, rewrites and resubmits, and answers a question in the thread. Briefs for approved pieces now come from dedicated brief-writer agents before the writing starts.</li>
<li>Agents can read a whole crawl: the page table, broken links with every page linking to them, the sitemap reconciled against the crawl, and live Search Console. Every arbitrary cap on what an agent can read is gone.</li>
<li>Two more Operations views for admins: Data Feeds, which flags a campaign whose connections need attention before any work depends on them, and one queue of every item across the book waiting on a person.</li>
</ol>]]></content:encoded></item><item><title>Website edits split into technical and on-page lanes</title><link>https://seobrothers.com/updates/2026-08-25/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-08-25/</guid><pubDate>Tue, 25 Aug 2026 00:00:00 GMT</pubDate><description>Website edit tasks carry a lane, Business Profile edit becomes a task type, work still under our review stays out of your approvals until we release it, and admins get an Operations section.</description><content:encoded><![CDATA[<p>Task lanes landed, and the admin side got its first fleet-wide views.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>Website edit tasks now carry a lane, technical or on-page. The New task form asks which; the agent and our team say which when they file one.</li>
<li>Business Profile edit is a task type of its own, labelled that way in your task list and approvals.</li>
<li>Work our team is still reviewing before it reaches you stays out of sight until we release it. The approvals queue, the sidebar badge and the client portal show it once, when it is released, and you are notified once, then.</li>
</ol>
<h3 id="1-technical-and-on-page-lanes">1. Technical and on-page lanes</h3>
<p>A technical edit can cover up to five pages at once and never has to wait behind another edit on the same page. An on-page edit is one page of visible content, and it holds that page briefly so two content changes never collide.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>Admins have an Operations section: Campaign Onboarding and Campaign Fulfillment, across every partner.</li>
<li>Agents gained a view of a crawl’s noindexed pages, with sitemap contradictions first and a note that a noindex is normally deliberate. The auditor stopped scoring noindex as a critical issue at the same time.</li>
<li>Staff who follow a deep link into a client’s workspace get a confirm-and-enter page instead of being turned away.</li>
<li>A page audit now evaluates only the page that changed.</li>
</ol>
<h3 id="1-operations">1. Operations</h3>
<p>Campaign Onboarding lists every campaign whose setup checklist is not finished, filtered by phase, with the actual checklist items in a popover and a click into the workspace. Campaign Fulfillment shows one month at a time, one row per campaign, one column per delivery stream, each cell reading planned, done and scoped; gaps only by default. The checklist is built once and shared by the client portal, campaign details and this page, so the three can never disagree.</p>]]></content:encoded></item><item><title>Quarterly reports and a Work Delivered section</title><link>https://seobrothers.com/updates/2026-08-24/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-08-24/</guid><pubDate>Mon, 24 Aug 2026 00:00:00 GMT</pubDate><description>The client report can be viewed and downloaded by quarter, gains a Work Delivered section, and competitive gap reviews move into Monitoring and Audits.</description><content:encoded><![CDATA[<p>Monday was a reporting day, with a run of campaign-details follow-ups alongside.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>The client report can now be viewed and downloaded for a calendar quarter as well as a month.</li>
<li>The report has a Work Delivered section: the content pieces and link placements completed in the period, each linking to its live URL where we hold the publish receipt.</li>
<li>Competitive gap reviews now live where the rest of monitoring does, and the standalone page is retired.</li>
<li>On campaign details, a Define campaign profile step joins the checklist, with a Detect from website button that classifies the client for you, and any phase tab offers a Move to this phase button that asks before it moves.</li>
<li>Content pieces cleared by your trust settings without a review now read Approved instead of Draft. Submit for approval hides on approved and pending pieces and returns as Resubmit only when a newer version has been saved.</li>
<li>Page monitoring gains an alert for a monitored page whose page size balloons between audits, critical when it nears the size at which Google stops indexing.</li>
</ol>
<h3 id="1-quarterly-reports">1. Quarterly reports</h3>
<p>The period picker has a Months and Quarters toggle with a year stepper; only finished quarters are offered. Comparisons follow the period: quarter over quarter and against the same quarter last year, keyword movement from the start of the quarter to its end. It works everywhere the report appears, including the client portal, the public share link and the PDF. Scheduled monthly sends are unchanged.</p>
<h3 id="2-work-delivered">2. Work Delivered</h3>
<p>On by default, it can be hidden in the report settings, and drops out on its own when a period had neither.</p>
<h3 id="3-competitive-gap-reviews">3. Competitive gap reviews</h3>
<p>Settings and a Run review now button sit on the Monitoring page, results under a Competitive Gap tab on Audits. New reviews no longer include the AI visibility comparison, since the monthly AI visibility snapshot already measures the client against competitors across all four assistants.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>Long agent sessions on big campaigns now run to completion however large the campaign.</li>
<li>Agents can start when a crawl completes, and only when the crawl’s numbers warrant it.</li>
<li>Agents arrive with the keyword map and their own open tasks already in front of them.</li>
<li>When someone on the team starts an agent by hand, it records who.</li>
</ol>]]></content:encoded></item><item><title>Speed checks say when a page cannot be measured</title><link>https://seobrothers.com/updates/2026-08-21/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-08-21/</guid><pubDate>Fri, 21 Aug 2026 00:00:00 GMT</pubDate><description>Page speed monitoring opens one alert when the site itself stops a page being measured, audits that cannot complete wait for their regular slot, and task text reads the same wherever your team sees it.</description><content:encoded><![CDATA[<p>One monitoring change worth knowing about on Friday.</p>
<h2 id="for-our-partners">For our partners</h2>
<p>When a page speed check cannot measure a page because of the site itself (the page hangs, never paints, or its domain does not resolve), the campaign now gets one warning alert saying so. Repeat failures bump the same alert quietly, and the alert closes itself on the next successful check. A slow day on the measurement side alone never alerts; only a site-side cause does.</p>
<p>Task titles and descriptions now read the same wherever your team meets them, including the digest email.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<p>A monitoring audit that fails three times in a row waits for its regular slot: two fast retries, then back to its usual schedule.</p>
<p>Tasks our team files without naming an assignee now go to whoever implements for that client, rather than defaulting to the partner’s team.</p>]]></content:encoded></item><item><title>Discovery reports download as a PDF</title><link>https://seobrothers.com/updates/2026-08-20/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-08-20/</guid><pubDate>Thu, 20 Aug 2026 00:00:00 GMT</pubDate><description>The discovery report gets a Download PDF button and real competitor heatmaps, and the team can read live Search Console and Analytics data for any campaign from their own tools.</description><content:encoded><![CDATA[<p>A day on the discovery report, mostly on what it looks like printed.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>The discovery report share page has a Download PDF button. The PDF is built from exactly what the prospect sees, on letter paper, with the same geometry as the monthly report PDFs.</li>
<li>Competitor comparison cards show each competitor’s own heatmap where they used to show a placeholder.</li>
<li>Two rows left the report: the Brand row in the competitive matrix and the keyword table’s total row.</li>
</ol>
<h3 id="1-download-pdf">1. Download PDF</h3>
<p>We went through it page by page: sections pack pages instead of forcing breaks (a sample report went from 23 pages to 20, with the site audit dropping from four sparse pages to two full ones), table rows never split, table headers repeat on continuation pages, the four AI assistant cards print as an even two by two, and the sources section starts on its own page.</p>
<h3 id="2-competitor-heatmaps">2. Competitor heatmaps</h3>
<p>The report now draws each competitor’s heatmap itself, from the scan’s own rank grid, on a real map of the scanned area: green for top three, amber for four to ten, red beyond. The cards had a placeholder before because a local scan only produces one heatmap image and it belongs to the client. The framing matches the client’s scan image so the cards read side by side, and three cards fill the row.</p>
<h3 id="3-two-rows-gone">3. Two rows gone</h3>
<p>Brand search only runs against the client’s own site and we should not guess competitors’ brand names. The total row only summed the starred keywords and read as a wrong total.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>Our team can now pull live Search Console data (top queries, page by query, URL inspection, sitemaps) and Analytics data (per-page sessions split into organic and AI assistant traffic, with a prior-window comparison) for any linked campaign from their own tools, without opening the app.</li>
<li>Mentions in the staff inbox stay until cleared and open on the exact comment, highlighted, mid-thread.</li>
<li>A link campaign with no network chosen picks its networks on the first placement.</li>
</ol>]]></content:encoded></item><item><title>Pause a client on a date, and see when it was paused</title><link>https://seobrothers.com/updates/2026-08-18/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-08-18/</guid><pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate><description>Pausing a client now leaves a record, can be scheduled, and keeps delivering work that was owed. Locations suggest Business Profiles you already manage, and Google data links minutes after activation.</description><content:encoded><![CDATA[<p>Two threads today: what happens when a client pauses, and how fast Google data arrives when one starts.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>Inactive is the paused state, and it is now visible and recallable. Every pause, reactivation, archive and restore writes a line in the client’s activity, and a pause can be set for a date.</li>
<li>Work you were owed keeps coming: a task due before the pause date still gets delivered, everything after it freezes with the client, and tasks on a paused client say so when you open them.</li>
<li>The Locations page now suggests Business Profiles that a connected Google account already manages and that match the client’s website, with a one-click add.</li>
<li>Analytics and Search Console now link within minutes of activation rather than waiting for the overnight refresh.</li>
</ol>
<h3 id="1-pausing-a-client">1. Pausing a client</h3>
<p>“When did this pause, for how long, and who did it” has an answer. The Deactivate dialog offers Now or On a date; a dated pause happens on its own that day, exactly as if someone had clicked it. Every page of a paused client carries a banner with the date and a Reactivate button, and a scheduled pause shows with a Cancel.</p>
<h3 id="3-suggested-business-profiles">3. Suggested Business Profiles</h3>
<p>Suggestions only, never automatic: one website can front locations the client did not hire you for.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>Every client gets a business profile classification (service area, ecommerce, and so on) at discovery submission and again at activation if it is still missing. That profile decides which setup steps appear, including the Business Profile steps.</li>
<li>The overnight Google linking now connects accounts first and syncs Business Profiles after, and a profile whose data keeps failing is set aside for a week.</li>
<li>New campaigns are matched to link networks at activation, so the first link placement has its network from day one.</li>
<li>Team members who were added but never signed in can be sent a branded set-your-password email, once.</li>
<li>We wrote down how we test agents: run against a real campaign, read the whole transcript, fix between reps.</li>
</ol>]]></content:encoded></item><item><title>Monitoring and citation scans start the moment a client is activated</title><link>https://seobrothers.com/updates/2026-08-17/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-08-17/</guid><pubDate>Mon, 17 Aug 2026 00:00:00 GMT</pubDate><description>Activation now switches on the standard monitoring set and starts citation scans for every location, team assignments get their own tab, and the onboarding agent starts taking shape.</description><content:encoded><![CDATA[<p>Most of today was about the first hour after a client goes active.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>Activation now turns on monitoring, with the first checks inside the hour.</li>
<li>Citation scans start at activation too, one per location on the campaign.</li>
<li>Assigning your team to a client has its own Team tab under the client’s configuration, next to Client Portal, so the two people surfaces sit together: your side and theirs.</li>
<li>The Work sessions list now shows each agent session once, so a session in progress no longer appears twice.</li>
</ol>
<h3 id="1-monitoring-at-activation">1. Monitoring at activation</h3>
<p>The standard set (site health, technical, domain health, content changes, page speed, Business Profile, brand search, backlink authority, keyword rankings) switches on with the campaign. Competitive gap reviews stay a deliberate opt-in. A check whose prerequisite is missing, like the Business Profile check on a campaign with no location yet, waits quietly and can be turned on from the Monitoring page once it applies.</p>
<h3 id="2-citation-scans">2. Citation scans</h3>
<p>It now just happens: it is a routine job, and it used to be a decision the agent made during its strategy work.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<p>The onboarding agent started to take shape. It now starts with the state of every onboarding objective already in front of it (tracked keywords, keyword mapping coverage, which plans are approved or waiting, citation scans per location, open alerts by severity). Its list of objectives matches the playbook exactly: alert triage is in, and citation setup is out because it is no longer the agent’s job.</p>
<p>Switching an agent on never replays history. Alerts that were already open before the agent was enabled are not treated as new work the minute it turns on.</p>
<p>Each campaign in onboarding gets a thread in the team’s chat, and the agent can nudge the team once a day about inputs only a person can supply (goal, brief, connections), in a header and bullets.</p>
<p>When staff enable the agent on a campaign that arrives already under way, they choose which phase it starts in, since that campaign is not onboarding.</p>]]></content:encoded></item><item><title>Activation takes a start date</title><link>https://seobrothers.com/updates/2026-08-16/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-08-16/</guid><pubDate>Sun, 16 Aug 2026 00:00:00 GMT</pubDate><description>Activating a client now asks for a start date. Today starts now, a future date schedules the flip, and every locked page offers the same flow.</description><content:encoded><![CDATA[<p>Sunday, and the activation flow got the one field it was missing.</p>
<h2 id="for-our-partners">For our partners</h2>
<p>Activating a client now asks for a start date. Leave it on today and the client activates immediately, as before. Pick a future date and the activation is scheduled: the client stays a prospect until that morning, then flips on its own, and the toast says so when you save.</p>
<p>The same picker appears wherever activation is offered. The Activate dialog on the client page has it, and so does the activation prompt you see on any page that is locked for a prospect (Tasks, Reporting, Scope). Marking a discovery as won now carries you straight into that dialog.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<p>When one of our team opens a partner’s workspace to help, they now land on that partner’s own branded address. On a screenshare with a partner’s client the URL bar shows the partner. Small, and the kind of thing white label is made of.</p>]]></content:encoded></item><item><title>Discoveries finish on very large sites</title><link>https://seobrothers.com/updates/2026-08-15/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-08-15/</guid><pubDate>Sat, 15 Aug 2026 00:00:00 GMT</pubDate><description>A discovery on a site with tens of thousands of pages now waits for the crawl to finish, and checks a site blocked us from running read as unchecked rather than failed.</description><content:encoded><![CDATA[<p>A Saturday spent on the discovery report, prompted by one prospect’s site that did two things most sites do not: it had a twenty-thousand-page catalog, and it blocked every automated visitor.</p>
<h2 id="for-our-partners">For our partners</h2>
<p>A discovery on a very large site now waits as long as the crawl can possibly take, so a big catalog site gets a complete report.</p>
<p>Some hosts refuse every automated visitor we have. Checks we could not verify on those sites (robots, sitemap, redirect consistency, soft 404s) show as an unchecked row with a muted dash rather than a failure, so a prospect is never told a file is missing when we were simply not allowed to look.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<p>When an agent links a campaign to Analytics or Search Console through one of our shared accounts, it now only sees properties whose website matches the campaign, and it can only link what it was shown. Same outcome as before on a clean match; far less noise in the agent’s view on an account that holds hundreds of properties.</p>]]></content:encoded></item><item><title>Dashboard cards that agree with each other</title><link>https://seobrothers.com/updates/2026-08-14/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-08-14/</guid><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><description>The dashboard opens on Active clients, Prospects and Team members, and the Prospects card opens a filtered client list.</description><content:encoded><![CDATA[<p>One visible change on Friday, and a change in how every change after it reaches you.</p>
<h2 id="for-our-partners">For our partners</h2>
<p>The top of the dashboard now reads Active clients, Prospects and Team members, and the section below no longer repeats the client counts, so the two halves of the page describe the same book.</p>
<p>The Prospects card is a link. It opens the clients list already filtered to prospects, and the clients list now reads that filter from the address, so a filtered view can be bookmarked or passed to a teammate.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<p>From today every change to the platform is reviewed and checked automatically before it ships. Database changes travel with the code that needs them, and each one is rehearsed against a copy of the database before it reaches the real one. It is what lets a small team ship in parallel without stepping on each other.</p>]]></content:encoded></item><item><title>The client portal opens on the campaign plan</title><link>https://seobrothers.com/updates/2026-08-10-week/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-08-10-week/</guid><pubDate>Thu, 13 Aug 2026 00:00:00 GMT</pubDate><description>The client portal's home became the campaign plan with phases and a checklist, monitoring copy was rewritten in plain language, brief-only campaigns arrived for partners who write their own content, and on Thursday every change started going through review and automated checks before it ships.</description><content:encoded><![CDATA[<p>Four days, Monday to Thursday, and then the way we ship changed. The client portal’s home became the campaign plan, monitoring copy was rewritten in plain language, and on Thursday every change started going through a review with automated checks before it ships.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>The client portal opens on the campaign plan. A monthly process strip runs along the top with deliverable tiles and this month’s progress, then one section per phase with a checklist of what is done, in progress and pending.</li>
<li>The process itself is a catalog of cards layered platform to partner to campaign, so a partner’s standard process applies everywhere and a single campaign can differ, edited beside Scope.</li>
<li>Monitoring reads differently. Check descriptions lead with the change they catch, in plain language, without internal policy detail.</li>
<li>Partners who write their own content can run a campaign in brief-only mode: we plan and brief, their writers produce the pieces, and the plan reflects that.</li>
<li>Content reviews can cancel an open approval request to keep editing.</li>
<li>A Mentions tab joined the inbox.</li>
<li>Portal deliverables read as counted lines, and the plan view dropped its done counters and summary paragraph.</li>
</ol>
<h3 id="1-the-plan-as-the-portal-home">1. The plan as the portal home</h3>
<p>The checklist covers the brief, competitors, the goal, Google accounts, keyword research and tracking, gap analysis, keyword mapping and work plans. Phases are clickable tabs, and the ongoing view is one work list. The public share portal mirrors the same view.</p>
<h3 id="3-monitoring-copy">3. Monitoring copy</h3>
<p>Websites display as their full address, host and folder, everywhere. Monitored pages match on URL regardless of a trailing slash. The noindex alert names the pages. Alert emails arrive grouped per check instead of one at a time.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>On Thursday the way we ship changed: every change is reviewed and checked automatically before it lands, the database changes it needs land with it, and anything touching data structure, money or sign-in waits for a second person’s review.</li>
<li>Agent probation: an agent under review has its tasks and plans held until staff release them, invisible to partner and client until then.</li>
<li>Website edits follow one rule per page: one active edit at a time, and a short wait after one finishes before the next, whether the agent or a person created the task.</li>
<li>A big job can pause and carry on knowing everything it already knew, so it is never cut off for running long, and staff release it if it grows expensive.</li>
<li>A campaign’s phase starts at activation rather than when the agent first works it.</li>
<li>Page expansions are tasks now, not plan items; plans hold new content. The experiments concept was retired.</li>
</ol>]]></content:encoded></item><item><title>The first partners arrive, and a Monday digest of what is waiting on you</title><link>https://seobrothers.com/updates/2026-08-03-week/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-08-03-week/</guid><pubDate>Sun, 09 Aug 2026 00:00:00 GMT</pubDate><description>The first partners were on the platform this week, a Monday digest started listing everything waiting on a partner, alerts learned to wait and see, and the agent editor was rebuilt for daily use.</description><content:encoded><![CDATA[<p>The week real agencies arrived on the platform. Around them, the agent editor was rebuilt for the people who would now run it daily, and the task queue got the filters a full book demands.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>A weekly digest lands every Monday morning: a snapshot of everything waiting on you, pending approvals and team tasks due within the week, one line each linking straight to the item, sent even when the answer is all clear. It is on by default and each person can turn it off.</li>
<li>Keyword ranking alerts wait and see before speaking: a keyword that disappears is confirmed missing after three days, the same for every keyword, and day-to-day movement shows up in reporting.</li>
<li>Notification channels are per person now, off, email, in-app or both, from an Account page with Profile and Notifications tabs.</li>
<li>Alerts got plainer. Monitoring emails say where the change happened and link to the exact alert, content-changed alerts appear only when there is a change you can read, and misspelling alerts show the correction and the surrounding context for each word.</li>
<li>Weekly checks run on assigned weekdays rather than all at once.</li>
<li>Task lists show “In revisions” after a send-back instead of “Waiting on approval”.</li>
<li>Discovery reports carry real Google positions for their keywords and real dofollow referring domains.</li>
</ol>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>The agent editor became a working surface: every change saves itself, the documents an agent reads are picked in order, each set of data it is handed is one compact row, and what starts it is labelled in plain words with a tooltip. The agent page shows a roster of active agents and a table of their work.</li>
<li>Changes collect. When a partner removes three plan items and then sends feedback, the agent sits down once with all four, and an agent interrupted mid-work picks up where it left off, knowing what it already did, so nothing is done twice.</li>
<li>Switching an agent on never replays the past: anything it would have done before it was switched on is skipped, so enabling something old does not set off a month of catch-up.</li>
<li>The campaign review itself is now a plain scheduled agent, no different from any other, and a client comment can start an agent too.</li>
<li>The scripts that move our book of agencies onto the platform learned the shape of a real book, a matching script removes a partner the platform created cleanly, and the written procedure gained its last chapter.</li>
<li>Briefs became something the agent writes and reads, and two new tools arrived: everything one page ranks for, and anchor text profiles drawn from the search results a link plan targets.</li>
<li>Google Business posts are written by the agent, and the plan is assembled from them.</li>
<li>Who publishes a piece of content follows from the site connection first and the implementation setting second; there is no separate switch.</li>
<li>Our support inbox shows the client’s campaign beside the thread and can hand an email to the client’s agent with a staff steer.</li>
</ol>
<h3 id="5-moving-the-book">5. Moving the book</h3>
<p>A connection already made on the platform wins over an older one, the newest active agreement wins per campaign, deleted tasks are never resurrected, placeholder tasks stay out, and open link tasks for the current and future months land with the agent, each with its own due day.</p>]]></content:encoded></item><item><title>Live billing switches on, and every agent becomes a row you can edit</title><link>https://seobrothers.com/updates/2026-07-27-week/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-07-27-week/</guid><pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate><description>Real billing went live on Monday, screenshots became task evidence, task requests and direct messages to the agent arrived, and Agent Builder v2 rebuilt the agent system so no agent lives in code.</description><content:encoded><![CDATA[<p>The week the platform stopped being a prototype. Real billing switched on Monday, and the agent system was rebuilt so that every agent is something staff can see and edit.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>Live billing switched on July 27. The platform also got a new mark, The Swell, a wave waterline, across the app.</li>
<li>Screenshots became evidence: every capture the agent takes is kept and can be pinned to a task, at capture time or later, and the client portal shows them on the task. Partners and staff can add and remove them too.</li>
<li>Partners can message the agent directly from the requests table, and the messages are kept as history.</li>
<li>Approved content is final: no new versions and no re-asks.</li>
<li>Task decisions reach the agent for team and provider tasks, and the task page shows the approval history and notes thread.</li>
<li>Google Business post items carry their published truth: the live Google link, or the moderation rejection if there was one.</li>
<li>Page monitoring shows checks rather than grades; the score gauge is gone.</li>
<li>Anything our team can see that a partner cannot wears an obvious amber Staff pill.</li>
<li>Team admins can change a member’s role after the fact, and members can be granted edit access to the agent’s guidance.</li>
<li>Website map became Keyword Mapping everywhere a client sees it, and discovery keyword tables tag each row with its market.</li>
</ol>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>Agent Builder v2 landed between Thursday and Saturday. Every agent is now a row the team can edit: who it is, the documents it reads, the data it is handed, what starts it (a schedule, an event such as a matched meeting, or a task becoming ready), who can see it, and its history.</li>
<li>Staff can chat with an agent about work it has finished: ask what it was thinking, and optionally let it act, with a second AI model for a second opinion.</li>
<li>We wrote down the Copy Gate: four tests every new sentence of interface copy must pass before it ships, the default being silence. It is the reason the app says less than you might expect.</li>
<li>Approval requests work for every task kind, not only content.</li>
<li>Campaign requests notify the assigned staff, and no assigned staff raises an ops alert. Failures in profiling a new client, or in the crawler’s account, raise an alert too.</li>
<li>The agent learned to read the local map picture for a competitive review.</li>
</ol>
<h3 id="1-agent-builder-v2">1. Agent Builder v2</h3>
<p>What an agent knows going in is assembled per agent rather than from one fixed profile. Schedules are written per agent with per-campaign exceptions, and campaigns are reviewed daily while onboarding, then settle into weekly, monthly or twice-monthly rhythms. By Sunday no agent lived in code: if no row describes an agent, nothing happens, and staff can become any agent by name.</p>]]></content:encoded></item><item><title>The client portal goes anywhere, as one embeddable page and inside HighLevel</title><link>https://seobrothers.com/updates/2026-07-20-week/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-07-20-week/</guid><pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate><description>The whole client portal became a single no-login page a partner can embed, arrived inside HighLevel, and reviewing work settled into one shape with explicit decisions and batched feedback.</description><content:encoded><![CDATA[<p>The theme this week was the client side: where the client portal can live, and how approving and reviewing work feels.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>The whole client portal can now be embedded anywhere as one no-login page: overview and approvals, keyword mapping, plans, tasks, activity and reports, reached by a private per-client link the partner manages from the client’s Client Portal tab. Approvals and feedback work there exactly as they do for a logged-in client, with an optional email check for visitors.</li>
<li>The same portal is available inside HighLevel: agencies connect their HighLevel account, map sub-accounts to clients, and clients see their campaign (performance, plans, work feed, approvals, and a way to request a discovery) inside the CRM they already use.</li>
<li>Reviewing work got one shape: approve, request changes and decline are explicit choices, and feedback is a batch (highlight-to-comment on the piece, a notes list, one send-back). The decision lives in the sidebar, and approved content locks.</li>
<li>The approvals queue became a filterable table, grouped by section, with type and client filters on the all-clients view, and Google Business post items open as a full post: image, words, link and schedule.</li>
<li>The portal home became Overview, with a campaign intro the partner writes in their own words, and approvals got their own page.</li>
<li>Activity became the client’s work log, written in the partner’s voice (“your strategist”), with plan approvals reading as alignment.</li>
<li>Campaign scope got a Configuration tab where each line’s client-facing wording can be overridden, and competitors moved onto the client’s Setup page.</li>
<li>Share pages wear the partner’s sidebar accent, discoveries and audits moved onto the shared data table, and team assignment on a client became a multi-select.</li>
</ol>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>Which AI model an agent uses is chosen by our team, set per kind of task with a platform default behind it, so partners never pick or see one.</li>
<li>Staff can become the strategist for a campaign from the API: pull the same briefing the agent would get and work it by hand. Website tools joined the rest of the staff API, and the AI tools on a staff member’s own desktop can work the platform as them.</li>
<li>The scripts that move our book of agencies onto the platform learned its quirks: a live guest post lands as a closed link item, placeholder tasks are skipped, and everything brought across is attributed to our team rather than the partner’s.</li>
<li>Citations resolve a business’s category from its own data.</li>
<li>A platform-wide pause for rank alerts sits behind a staff switch for days when a data provider misbehaves.</li>
</ol>]]></content:encoded></item><item><title>Tideworthy gets its name, and the client portal gets its pages</title><link>https://seobrothers.com/updates/2026-07-13-week/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-07-13-week/</guid><pubDate>Sun, 19 Jul 2026 00:00:00 GMT</pubDate><description>The platform became Tideworthy, the client portal grew into a set of real pages with approvals inside it, reports learned to chart, and AI Visibility arrived.</description><content:encoded><![CDATA[<p>The product got its name this week, the client portal became a set of real pages, and reports learned to chart.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>The platform became Tideworthy on Monday: new name across the app, a new mark, one official address, and email that sends from a Tideworthy account domain.</li>
<li>The client portal went from one plan page to a set of pages: Content, Link building, Google Business posts, Website map, Activity, Approvals and Reports.</li>
<li>Reporting grew charts, and Configure Report saves on every change.</li>
<li>On Saturday, AI Visibility arrived for discoveries and reporting: sampled mention rates for a client and its competitors across the major AI assistants, on location-pinned buyer prompts.</li>
<li>A shield in the top bar holds two account-wide trust controls, pause all client communication and force safe mode across every campaign, with per-client safe mode underneath.</li>
<li>Partners choose per client who implements website changes, their own team or ours.</li>
<li>Google Business posts moved to a model where the plan is the written posts and the partner approves finished units, and citations became something the agent sets up and runs as recurring rounds.</li>
<li>Elsewhere: tasks got a page of their own with comments and inline editing, keyword mapping got a page-first view, planning stacks the soonest months on top, alerts read “All clear” when quiet, and a Help Center opened.</li>
</ol>
<h3 id="1-tideworthy">1. Tideworthy</h3>
<p>Partners send client email from a subdomain of their own domain, managed for them. Branding settings split into Client Portal and Email Sending tabs, and a partner’s own logo replaces ours at the top of their sidebar.</p>
<h3 id="2-the-client-portal">2. The client portal</h3>
<p>Each page shows only when the partner turns it on and there is something to show. Clients approve plans and content from the portal itself, not only from an emailed link, and pending decisions lead their dashboard. Client comments with mentions arrived, with an inbox on the client workspace.</p>
<h3 id="3-reporting-charts">3. Reporting charts</h3>
<p>The charts are six-month monthly trends with the year prior overlaid, stat cards with sparklines, a crawl score gauge, crawl history as a stacked bar by severity, keyword tables split into Priority and Other, and a Link Profile section.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>What sets an agent going is now something the team edits: each agent has a written list of what starts it (a critical alert, a finished gap review, a partner message, a schedule), each with its own instructions and background, editable from an admin page. Its skills are documents too.</li>
<li>Agent Labs keeps a replayable record of everything an agent did and lets staff fix an instruction side by side with the work that exposed the problem.</li>
<li>An agent working a task can now pause, wait for rankings to arrive, and pick up where it left off knowing everything it already knew, so research, waiting and mapping happen in one head.</li>
<li>Moving our book of agencies onto the platform began on Wednesday: a partner-by-partner script carries clients, keywords with rank history, tasks, notes, locations, Business Profiles, competitors, Google connections and past discoveries, then each agreement onto the new scope model. A written procedure lets anyone on the team move a partner.</li>
<li>A Monday retrospective reviews shipped work on two horizons, a two-week pulse for harm and a month for verdicts, so the week’s plan acts on findings the same morning.</li>
<li>A shared Task Queue pools implementation work for specialists, and a task can only ever be picked up by one person.</li>
<li>A public API opened for staff.</li>
</ol>]]></content:encoded></item><item><title>The first line of the platform's code is written</title><link>https://seobrothers.com/updates/2026-07-06-week/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-07-06-week/</guid><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><description>The platform began on July 6. Its first week put accounts, clients, monitoring, keyword tracking, reporting, planning, approvals and a daily campaign agent in place, carrying over tooling already built in Workbench and the Portal.</description><content:encoded><![CDATA[<p>On Monday, July 6, the first line of the platform’s code was written. The week that followed laid down accounts, clients, campaigns, monitoring, keyword tracking, reporting, planning, approvals and an agent that worked each campaign every day, much of it carried over from tooling we had already built in Workbench and the Portal. Nobody outside the team had logged in yet.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>Planning arrived on Friday: a plan is a container of work items by month, and a partner can approve it, remove items, and leave feedback that travels with the plan’s history. Saturday added a top-level approvals queue with shareable review pages, a My Work view, and per-type controls over what clients are asked to approve.</li>
<li>Reporting started as a first view on Tuesday, gained Google Ads and call tracking connections with their own reporting sections on Thursday, and by Friday had PDF export, a saved history, scheduled monthly delivery with a per-campaign day of month and recipient list, and a configurable cover page. Clients could download delivered reports from their portal.</li>
<li>Clients and campaigns, locations, and keyword tracking with a keyword research page landed on Tuesday. On Wednesday clients got their own logins, with a roster of who receives notifications, and a business lookup that identifies a client from its name and address.</li>
<li>The shell went up on Monday: sign-up with email verification, a workspace layout, a notification bell, and the first monitoring and prospects screens. Over Tuesday and Wednesday it gained an onboarding flow and checklist, branding and organization settings, and white-label domains so the app could sit on an agency’s own address.</li>
<li>Competitive Gap Analysis arrived on Thursday: a head-to-head review of a client against up to three competitors, on full crawls.</li>
<li>Saturday added Discoveries, a sales deliverable for prospects with a branded share page.</li>
<li>Website connections widened beyond WordPress to Webflow and Shopify.</li>
<li>The week closed with a decision about launch focus: monitoring, reporting and the SEO agent first, everything else held back as beta.</li>
</ol>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>The campaign agent appeared on Wednesday and had its shape by Friday. Each campaign is assigned a profile (local business, multi-location, ecommerce) with an ordered set of phases, and each phase has a playbook.</li>
<li>Two guardrails landed early. Safe mode covers every plan, not only website-touching work, and the agent never works on client sites on a Saturday or Sunday: no agent should touch a site when no human is around to help.</li>
<li>Approvals were centralized into one policy and one list of requests, so anything that asks a partner for a decision works the same way.</li>
<li>The WordPress connector learned to insert internal links and list a page’s links, the first building block for internal-linking work. Citations tooling started the same day.</li>
</ol>
<h3 id="1-the-campaign-agent">1. The campaign agent</h3>
<p>The agent’s identity, skills and playbooks live as editable documents, so the team can sharpen how it works without a release. When the agent hands a task to a helper, the instructions for it travel with the task, so nothing depends on anyone remembering to attach them. Plan history follows the full chain of revisions, and skills got version history on Sunday.</p>]]></content:encoded></item><item><title>Campaign reports, monitoring, and notifications you can tune</title><link>https://seobrothers.com/updates/2026-06-reports-monitoring-and-notifications-you-can-tune/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-06-reports-monitoring-and-notifications-you-can-tune/</guid><pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate><description>June 2026 into the first days of July. Campaign reporting and monitoring arrived, tasks and initiatives became visible to partners, blog posts learned to link, and citations were reorganised around locations.</description><content:encoded><![CDATA[<p>June closed the Workbench era. Workbench gained the two things a campaign had never had in one place: a report on what happened and a watch on what might go wrong. The first line of the platform’s code was written on July 6.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>Tasks appeared in the Portal on the 9th: each campaign has an SEO task list, and task approvals sit with the rest. A task’s share page was redesigned with the month it belongs to, a link to the campaign, a deliverables tab, and comments that reach the manager and the people assigned.</li>
<li>Initiatives followed on the 11th: a campaign’s work grouped by the thing it is trying to achieve, each with its own shared page, notes and reactions, and approvals grouped the same way.</li>
<li>A reporting page arrived per campaign on the 30th, drawing on the same data the team sees.</li>
<li>From the 23rd an agency chooses its notifications: which kinds, by email or to a webhook, with a test send. On July 2 communication settings gained a campaign-level fallback and show who at the agency is assigned to what.</li>
<li>Content plan rows show status indicators and a note count, and approving a content idea is a cleaner step.</li>
<li>Offboarding campaigns stay visible under their own tab, and organisation settings got their own page.</li>
</ol>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>Reporting arrived on the 29th and 30th: a report per campaign with period comparison across keywords, Business Profile, website analytics, crawl health and work delivered. Analytics connected once verification cleared.</li>
<li>Monitoring went live over the same days into July 3: checks on the homepage, the domain, the Business Profile and the crawl, raising alerts with an owner into a work queue.</li>
<li>Blog posts learned to link on the 9th. Before this, a person added the links.</li>
<li>Citations were reorganised around locations. Every citation now belongs to a specific location.</li>
<li>Three tools went up: an AI rank checker that tracks where a client appears in AI answers across several domains, a site auditor with a technical audit that does not need a full crawl, and a Business Profile auditor with reviews.</li>
<li>Initiatives arrived internally on the 5th with time tracking and reviews attached. Keyword mapping followed from the 18th, keywords mapped to the pages that should rank for them and linked to the content that targets them, with the crawl folded in, and campaign keyword research came on the 23rd.</li>
<li>Business Profile posts were tightened after a sweep of every post written so far: the length target moved up, since posts had been landing at the bottom of the band, and images the platform rejects are filtered before upload.</li>
<li>One notification service took over sending from the 23rd: every notice goes through it, grouped, slowed when the email provider asks, and each email is built from the record of what happened.</li>
</ol>
<h3 id="3-blog-posts-learn-to-link">3. Blog posts learn to link</h3>
<p>The writer is handed an inventory of the client’s live pages and previously published pieces, ranked by relevance to the post with a preference for the pages that make money, and scales how many it links to the length of the piece. External links are checked live and dropped if dead. Anything the writer invents, or that points at a staging copy of the site, is stripped before the draft is saved.</p>
<h3 id="4-citations-by-location">4. Citations by location</h3>
<p>The provider’s pre-order scan is imported and each listing scored field by field against the source of truth. Walled directories get a manual verification. Multi-location campaigns see the table grouped by location. Service-area businesses with no public address can be ordered too.</p>]]></content:encoded></item><item><title>Geo pages learn to use local data</title><link>https://seobrothers.com/updates/2026-05-geo-pages-learn-to-use-local-data/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-05-geo-pages-learn-to-use-local-data/</guid><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate><description>May 2026. The writing agents were tuned on partner feedback (shorter commercial pages, no bolded keywords, no filler sections), geo pages gained researched local data blocks, and campaigns got monitoring and search data connections.</description><content:encoded><![CDATA[<p>May was the month the writers got edited. The agents built in April had been producing pages for a few weeks, partners had read them, and the feedback was specific enough to act on.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>Approvals moved onto the dashboard on the 4th, so what is waiting for you is the first thing you see.</li>
<li>On the 11th the approvals page and the plan pages were made to agree: an idea counts as approved when you approved it, not when the team happened to move it forward, and a post without a planned month no longer appears as if it needs a decision.</li>
<li>The shared plan page reads your branding live, so a logo change shows the next time the link is opened.</li>
<li>Webhooks can be tested with a sample message from the settings page.</li>
<li>Discovery filters remember themselves, and text areas grow as you type.</li>
</ol>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>Geo pages, the city-by-city pages a local business needs, started using researched local data at the end of the month: demographics, housing, market segments, competitor density, each figure cited to a source and never invented.</li>
<li>On the 1st we lowered the length floors. A partner pointed out that their April geo pages ran well past the length of the rest of their site, which does not fit the site and reads as stuffing.</li>
<li>On the 12th, three more rules across all seven writers: no bolding the keyword (optimisation should be invisible to the reader), no closing section that names cities or services the page does not target, and nothing carried over from the client’s site that is not prose (no embeds, forms, images or widgets scraped from the homepage). Each rule got a matching check in the review step.</li>
<li>Campaign monitoring started running on the 19th. Search Console joined Business Profile as a connection a campaign can make on the 22nd; Analytics followed once verification cleared in June.</li>
<li>Business Profile posts fall back to a stock image when the client’s site has none we can use. A sitemap and robots review became a workflow on the 11th, and a Business Profile review on the 14th.</li>
<li>Each campaign got a work page, the dashboard was redone, and tasks and campaigns became usable on a phone.</li>
<li>The ops dashboard gained a campaign planning page and started showing content pieces, not tasks, in its bottleneck views.</li>
</ol>
<h3 id="1-local-data-in-geo-pages">1. Local data in geo pages</h3>
<p>The first attempt on the 26th added a data block to a finished page, and it read as bolted on because the prose had not been written knowing the data was coming. On the 28th we rebuilt it so the research happens first and the writer gets a small library of blocks (a comparison chart, a stat row, a callout) to place inside the narrative, with a setup paragraph before each and a bridge after. The palette takes its anchor from the client’s own brand colour, read from their site. Pages in the same campaign also stopped converging on each other: the writer now reads what the prior pages covered, commits to distinct angles before drafting, and keeps the heading pattern consistent while the body diverges.</p>
<h3 id="2-length-floors">2. Length floors</h3>
<p>The geo page writer had carried a floor meant for blog posts. It now matches the length of the client’s existing pages and falls back to roughly eight hundred words, and the service, location and ecommerce category writers got the same treatment. An explicit instruction against padding went into all four.</p>]]></content:encoded></item><item><title>An agent for every page type</title><link>https://seobrothers.com/updates/2026-04-an-agent-for-every-page-type/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-04-an-agent-for-every-page-type/</guid><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><description>Late April 2026. Writing agents for geo, blog, service, location, expanded and ecommerce pages, a Business Profile post writer, citation ordering end to end, and a personal assistant with shared memory for every member of the team.</description><content:encoded><![CDATA[<p>If the first half of April was about what partners see, the second half was about who does the writing. By the 30th there was a writing agent for every kind of page we produce, and every person on the team had an assistant of their own.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>The approvals page in the Portal was rebuilt and went live on the 30th. Approvals are grouped by campaign, each carries a due date, and a row opens where you would expect it to.</li>
<li>Business Profile posts got their own page in the Portal on the 23rd, with the same approve and reject as content ideas.</li>
<li>The shared plan page shows scope against planned month by month, and carries your branding.</li>
<li>The plan pages show how many notes a row has, and a monthly plan can be configured per campaign.</li>
</ol>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>The content-writing agent split into specialists. Geo pages and blog posts on the 22nd; service pages, location pages, expansions of existing pages, and ecommerce product and category pages on the 27th.</li>
<li>The team got assistants. From the 20th every member of the team had a personal assistant, with their own instructions, an “about me” section they maintain, and shared memory they can add to and recall from.</li>
<li>Citation ordering went end to end on the 27th.</li>
<li>A Business Profile post writer followed on the 30th, and a page speed audit that runs as a workflow on the 28th.</li>
<li>An ops dashboard went up alongside Workbench between the 20th and the 30th, reading the same data. An HR directory with document storage sits beside it.</li>
<li>Keyword rankings began refreshing on a schedule, and project management tasks are created on their own. Content got an approved status distinct from published, a copy-share-link button, and a publisher assigned automatically.</li>
</ol>
<h3 id="1-specialist-writers">1. Specialist writers</h3>
<p>Each reads the client’s own site for voice and structure, reads the prior approved pages in the campaign so a new one fits alongside them, drafts, reviews its own draft against a checklist, scores it against optimisation targets, and saves a version for the team to read. The distinction matters because a service page and a blog post fail in different ways, and one prompt had been trying to avoid both.</p>
<h3 id="2-team-assistants">2. Team assistants</h3>
<p>Each comes with a set of team tools: place search for finding a business’s Google presence, site scraping and mapping, web search, spreadsheets, and historical keyword metrics. A knowledge base joined on the 23rd, and admins got the same assistant in the Workbench sidebar. Bulk task creation and task tools followed. This is the ancestor of the staff-side agents in the platform.</p>
<h3 id="3-citation-ordering">3. Citation ordering</h3>
<p>Locations are linked from the campaign, the business category is matched from the client’s Business Profile, a description is written when the profile has none, the aggregators nobody wants are off by default, and confirming an order starts submissions immediately. The scan the provider runs before an order is imported so we know what already exists.</p>
<h3 id="5-the-ops-dashboard">5. The ops dashboard</h3>
<p>It has a resourcing view with task previews and threaded comments, carry-over of overdue tasks so they do not vanish at month end, a monthly pace that counts weekdays rather than days, planning grouped by partner with on-track campaigns collapsed, a content view, and drill-downs that match the numbers on the bars.</p>]]></content:encoded></item><item><title>A shared plan page replaces the spreadsheet</title><link>https://seobrothers.com/updates/2026-04-a-shared-plan-page-replaces-the-spreadsheet/</link><guid isPermaLink="true">https://seobrothers.com/updates/2026-04-a-shared-plan-page-replaces-the-spreadsheet/</guid><pubDate>Thu, 16 Apr 2026 00:00:00 GMT</pubDate><description>The first half of April 2026. The campaign plan a partner sees became a live page on a link, on the agency's own domain if they wanted, and the Portal's monthly grid, focus pages and task views followed.</description><content:encoded><![CDATA[<p>Workbench and the Portal had been the beginning of the end for bulk spreadsheets. The end itself came in the first two weeks of April 2026. The monthly plan an agency received had been a Google Sheet. On the 14th the link that used to open that sheet opened a page.</p>
<h2 id="for-our-partners">For our partners</h2>
<ol>
<li>The campaign plan became a shared page. One link, no login, generated live from Workbench, showing the plan by month with what is in scope against what is planned, and the client’s locations on cards.</li>
<li>Inside the Portal, planning was rebuilt around the same model on the 16th: a monthly plan grid, location focus and page focus plans, Business Profile and SEO tasks, citations, content recommendations, and an approval banner where something needs a decision.</li>
<li>Onboarding a campaign became a three-tab form, and a campaign can be onboarded straight from a package.</li>
<li>Webhooks appeared on the 7th, so an agency’s other systems can be told when something happens.</li>
<li>A pending scope change now shows in the first full month after onboarding, where before it only showed the button to request it.</li>
</ol>
<h3 id="1-the-shared-plan-page">1. The shared plan page</h3>
<p>On the 2nd the Portal’s own plan management screens, the tabs, status cells and reject buttons built over the winter, were removed in favour of that link. Agencies who wanted the page on their own domain could have it there from the 7th.</p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<ol>
<li>The page optimisation work, where a specialist decides which of a client’s pages get attention in which month, became a rolling twelve-month grid on the 13th.</li>
<li>Citations were rebuilt around our citation provider between the 7th and 8th.</li>
<li>Content assets gained a published URL you can set from the table, a card for the images that go with a post, and a card for content instructions. Publishers stopped seeing a piece in My Tasks until it was approved, and reviewers got an internal review step before a draft goes to the partner.</li>
<li>A campaign got a work log, an SEO report, and a planning route that classifies every task by type. Onboarding and discovery became workflows in their own right on the 14th.</li>
<li>Workbench got a company documents section with a viewer role for people who should read but not edit, and the leadership meeting moved into Workbench too: issues and opportunities with categories and owners, follow-up tasks, and a schedule.</li>
<li>The agent in the sidebar became a conversation you can pick up on any page, and its history is kept.</li>
<li>A location can be marked inactive without deleting it, so its history stays.</li>
</ol>
<h3 id="1-the-page-optimisation-grid">1. The page optimisation grid</h3>
<p>Pages are rows, months are columns, a checkbox assigns a page to a month and the task behind it is created or updated without anyone opening it. Completed months show a check that cannot be undone.</p>
<h3 id="2-citations-rebuilt">2. Citations rebuilt</h3>
<p>There is a single card for connection, scan and orders, locations are created from the client’s Business Profile so the name, phone and category are right first time, and the status says plainly when nothing is connected yet.</p>
<h3 id="4-work-log-report-and-workflows">4. Work log, report and workflows</h3>
<p>Some deliverables were still landing in spreadsheets in early April, and for those Workbench wrote the sheet directly. Portal events started reaching the team on their own: the first tells the sales channel when an agency onboards.</p>]]></content:encoded></item></channel></rss>