opsira

Notes

57 notes on running automated operations. One page per problem: what it is, why it happens, how to tell, and what actually fixes it.

Being found

Start with the guide: Being cited by AI search

Change detection that fires on every deploy is worse than none

Hashing a rendered page to spot real content changes sounds simple. Modern frameworks rewrite enough of the document on every build that almost every page looks changed.

Your best-ranking pages might not link to what you sell

Guides and explainers often outrank product pages by fifty positions. If they do not link to the thing they describe, that ranking does nothing for you.

How to get cited by AI search

What actually moves AI citations: being crawlable, being specific, being the best answer to a narrow question, and getting new pages indexed fast.

IndexNow: getting new pages indexed in minutes

A simple protocol for telling search engines a URL changed, instead of waiting to be crawled. What it does, what it does not, and how to set it up.

Reading only Google Search Console hides how you are actually found

A second search engine can be a fifth of your impressions, a third of your clicks, and the entire basis of your visibility inside AI assistants. It has its own console.

A keyword tool gives you a hypothesis, not a target

A term with good volume and low difficulty can still be the wrong phrase. Your own impression data is the only thing that confirms buyers use those words.

llms.txt probably is not doing what you think

The file is cheap and harmless, and the measured evidence says AI crawlers are not fetching it and publishing it does not affect citations. Spend the effort elsewhere.

A rate limited crawl will invent problems that do not exist

If your site auditor records a failed fetch and an empty field the same way, every rate limited URL becomes a fabricated defect, and the report looks completely normal.

When you retract a claim, the copy is the easy part

A wording change gets applied to the pages everyone looks at. It survives in the articles, the structured data and the product feed that keeps publishing it to shopping engines.

Your sitemap is advertising pages that do not exist

Two hand-maintained lists, one of published articles and one of sitemap slugs, drift apart. The sitemap keeps pointing search engines at pages nobody ever wrote.

Soft 404s: when your error page returns success

A one line web server misconfiguration that makes every wrong URL on your site look like a real page to a crawler.

Email and DNS

Start with the guide: Email that actually arrives

Do not send important mail from a domain nobody has heard of

A brand new sending domain has no reputation, and the mail that matters most is exactly the mail you cannot afford to have filtered.

Moving a domain between Microsoft 365 tenants: the outage is not where you expect

Removing a custom domain from one tenant and adding it to another tears down the mail routing host behind the MX record. Until it is rebuilt nothing delivers, and the dangerous moment is when it comes back.

"Your domain cannot be added to Microsoft 365 at this time"

Error 715 when adding a custom domain, and the stale verification record that usually causes it.

How to tell whether a mail domain is really live, without sending anything

Sending test emails to check mail flow gives you one data point and a bounce. An SMTP recipient probe asks the same question repeatedly, costs nothing, and reveals when the answer is inconsistent.

Moving a domain between Microsoft 365 tenants without losing mail

The domain move is the hard part of a tenant migration, not the mailboxes. The teardown window, the two rejection codes, and how to tell when it is genuinely ready.

When Set-Mailbox has no PrimarySmtpAddress in Exchange Online

The parameter every guide tells you to use is sometimes missing entirely, failing as "parameter cannot be found". It is there for some connections and not others, and the difference is your roles.

SPF: one record, ten lookups, and no second chances

Two SPF records is a hard failure. So is exceeding the lookup limit. Both happen naturally as you add services.

A mail rule that never fires because something above it stops processing

Adding a transport rule and finding it does nothing is usually not a problem with the rule. It is a rule above it with stop processing enabled.

Infrastructure

Start with the guide: Self-hosting it reliably

Alerting that people actually read

Push notifications for a small operation: what deserves an alert, what does not, and how to stop a useful channel becoming noise.

Backups you have actually tested

What to back up when everything runs in containers, why the volume snapshot is not enough, and the restore rehearsal that finds the gap.

The credential cache you cleared is on another device

An old sign-in kept coming back after we cleared the app, the credential store and the browser, and after a full reinstall. Half the tokens lived in the cloud-synced keychain and were being restored from the phone.

Mounting keys and certificates into containers

Permission errors on mounted secrets are usually ownership mismatches between the host user and the container user, not permission bits.

Two modules from the same vendor, and load order decides which one breaks

Both modules work alone. Loaded together, the second fails with a missing-method error. Nothing is misconfigured; whichever loaded first won a version argument you never saw.

PowerShell modules break when Documents is synced to the cloud

Installing a module for the current user puts it in Documents. If Documents is redirected into a sync client, the module installs successfully and then fails to load.

Quadratic growth, a string limit, and a week long crash loop

A per-pair data structure grew as the square of the population, crossed a runtime string limit, and turned one failed save into 26,000 restarts.

Read the page before you pay a model to read it

Pages that matter to Google already publish their content as structured data. Extracting that costs nothing, returns exact values, and beats sending the prose to a model.

Remote disable does not survive a factory reset

Software controls on hardware you have posted to a stranger are a deterrent, not a control. What actually works is at the network layer.

Restarting a container is not deploying your code

Whether a restart picks up your changes depends entirely on how the code got into the image. Getting this wrong makes a fix look like it did not work.

Some permissions take 24 hours, so assign them on day one

Most role assignments apply within minutes. A few take up to a day, and you will discover which at the exact moment you need them.

Security defaults block device code sign-in, and the error does not say so

A tenant with no conditional access policies can still refuse a sign-in. Device code flow is blocked by the default baseline, and the failure looks like a permissions problem.

Your AI session dies with the laptop, and the transcript will not bring it back

You want to close the laptop and keep working from your phone. The fix is not syncing your history, it is moving the process onto hardware that never sleeps, and reaching it over an outbound channel.

The sign-in page ignores what you typed and offers a different address

A user types their correct address and the sign-in page redirects them to an old one. It looks like the device is caching credentials. It is not the device, and clearing the device will not fix it.

Publishing a test site without touching DNS

A wildcard DNS service plus a reverse proxy gives you a real HTTPS URL for a staging site, with no records to add and nothing to clean up.

The backup said OK and there was no offsite copy

The nightly job dumped every database, failed to upload any of them, reported one error, and then deleted the oldest copy that was still offsite. It ran that way for five nights.

The model number is not the specification

Hardware sold under one model name can ship with materially different internals depending on the batch or region variant.

Your build output is not your live site

A statically deployed site collects production-only edits that no build reproduces. Deploying a fresh build then silently removes them, and nothing warns you.

Your host firewall is probably not the one deciding

On cloud hosting, a provider level firewall sits in front of the machine. Rules you set on the host can be irrelevant in both directions.

n8n

Start with the guide: Running n8n in production

Re-importing an n8n workflow silently kills its webhook

Export, edit the JSON, import it back. The workflow still shows as active and its webhook URL now returns 404, with nothing in the logs to tell you.

n8n workflow edits that silently never run

Updating workflow_entity.nodes in the n8n database changes the draft, not the copy that executes. The edit reads back correctly and never runs.

Self-hosting n8n: the configuration decisions that matter

The handful of choices that decide whether a self-hosted n8n instance is reliable or a liability: database, exposure, webhook paths, and backups.

Orders

Start with the guide: Automating orders, payments and returns

Matching bank transfers to orders automatically

When card payments are not available, bank transfer works, but only if reconciliation is automatic. Polling, matching, and the tolerances that matter.

Payment links need an order identifier

A hosted payment link that collects nothing but money cannot be matched to the record it belongs to. What that costs, and the field that prevents it.

Returns operations that mostly run themselves

Return labels, scan detection, chasing what has not come back, and tying refunds to a scan rather than a promise.

Automatic review invitations, without breaking the rules

Getting reviews consistently by attaching the invitation to an event you already have, and the compliance line not to cross.

Sequential order numbers, and why random ones cost you

Random reference numbers seem safer and create work at every point where a human has to read one back to you.

Validation rules that fire on correct data

A guard that rejects one document in eleven because reality disagrees with it is worse than no guard at all. Test every rule against real history before it goes live.

Support

Start with the guide: Running an AI support desk

The email failures that never tell you

Domains that quietly fall out of verification, addresses added to suppression lists, and the alerts you stop receiving because of it.

Keeping machine mail out of your support desk

The obvious no-reply filter misses most automated senders. Why, and what a filter that actually works looks like.

A self-hosted support desk that triages itself

Inbound email into tickets, automatic categorisation and priority, and alerts that only fire for things that matter. The architecture and the traps.

Visitors

Start with the guide: Knowing where your traffic actually comes from

Why your app traffic is filed as search

Taps from mobile apps often arrive with a referrer that names the parent company rather than the app, so email and messaging traffic is recorded as organic search.

First touch attribution without a customer data platform

Capturing where a customer originally came from and carrying it through to the order record, using a cookie and one extra field.

How to know who is on your site, without a heavyweight analytics stack

A small self-hosted approach to seeing real visitors in real time, separating humans from bots, and recording where each one came from.

One analytics source will mislead you, and filtering changes the answer

The same week of traffic read as a 67% collapse, a 24% decline, and flat, depending on which rows were counted. A second independent measurement is the only thing that settles it.

One analytics table, several sites, and journeys that never happened

Sharing a visits table across properties is fine until a query forgets to filter by site, and invents user journeys from two different businesses.

Your bot filter is reading the one field bots control

Filtering traffic on the user agent string only catches bots that admit to being bots. Anything using a browser fingerprint from a hosting IP walks straight through.

Why AI referrals look like direct traffic

Assistant traffic often arrives with no referrer, so it is filed as direct and appears to send nothing. How to tell whether it is really happening.

Need help with any of this?

These notes are free and always will be. If you would rather someone just set it up, or you are stuck on something similar, get in touch at hello@opsira.io.