Domains & SEO
Check websites, endpoints, TCP ports and DNS names on a schedule, track SSL and domain expiry, run SEO audits and see site traffic.
On this page
Domains & SEO watches the things your users reach from the internet. For each target OpsNexus records uptime and response time, reads the TLS certificate, DNS records and domain registration, and can score the page for SEO. Domains belong to the current project.
Everything uses real network requests from the OpsNexus server. Nothing is estimated.
Add a domain
You need modify access to Domains & SEO.
Open Domains & SEO in the sidebar.
Click Add domain.
Fill in the form:
Field What to enter Domain or URL / Hostname For web checks, a domain like shop.example.comor a full URL likehttps://example.com/health. For TCP and DNS checks, a hostname.Check HTTPS, HTTP, TCP port or DNS resolution. Every 30 seconds, 1 minute, 5 minutes or 15 minutes. Port TCP checks only. Required. Expected HTTP status Web checks only. Default 200. Must contain (optional) Web checks only. Text that must appear in the response body. Click Add and check now. The first check runs straight away.
Each target can be added once per project.
Targets that resolve to private, loopback or link-local addresses (10.x, 192.168.x, localhost and similar) are refused, to protect against server-side request forgery. To monitor internal services, an admin sets ALLOW_PRIVATE_TARGETS=true in .env. The same setting applies to notification webhooks.
How checks work
| Check | Up when |
|---|---|
| HTTPS / HTTP | A GET request (following redirects) returns the expected status, and the page contains the keyword if one is set. Times out after 15 seconds. |
| TCP port | A TCP connection to the port opens within 10 seconds. |
| DNS resolution | The hostname resolves to an A record within 10 seconds. |
Statuses:
| Status | Meaning |
|---|---|
| up | The check passed. |
| degraded | A web check passed but took more than 2 seconds. |
| down | The check failed. |
| pending | Not checked yet. |
To avoid false alarms:
- A target that fails at the network level is checked again 3 seconds later. It counts as down only if the second try fails too.
- If OpsNexus can't reach the internet at all at that moment, the check is recorded as "unknown". Unknown checks don't count for or against uptime, and the domain keeps its last real status.
Check history is kept for DOMAIN_CHECK_RETENTION_DAYS (default 30).
ALLOW_PRIVATE_TARGETS=false
DOMAIN_CHECK_RETENTION_DAYS=30The domain list
The tiles show how many targets are Monitored, Up, Degraded and Down, and how many have SSL expiring < 14 days.
The table shows each target's Status, Uptime 30d, Response, SSL expires, Domain expires, Hosting / CDN and SEO score. Click a target to open its detail page.
Domain detail
The header shows the status, the last response time, when it was last checked, and the check interval. Check now runs a check and refreshes DNS, SSL and registration details. Remove stops monitoring and deletes the check history (needs full access). The domain itself is not affected.
Uptime tab
- Availability · last 90 days: one bar per day, coloured by that day's uptime. Days below 99% stand out. Days without data are grey. The history only goes back as far as
DOMAIN_CHECK_RETENTION_DAYS. - Response time · last 24 hours: one bar per check, with failed checks marked.
- Recent failures: the time and error of each failed check in the last 24 hours.
SSL, DNS & hosting tab
These details refresh every 6 hours, or when you click Check now.
| Card | Shows |
|---|---|
| SSL certificate & registration | Whether the certificate is valid or not trusted, its issuer and expiry date. The domain's registration expiry and registrar, read from RDAP. |
| Hosting | IP addresses, the CDN if one is detected (Cloudflare, Amazon CloudFront, Azure Front Door, Google Cloud CDN, Fastly or Akamai), the Server header, the final URL after redirects, and the last HTTP status. |
| DNS records | A, AAAA, CNAME, MX, TXT, NS and CAA records. MX, TXT, NS and CAA are read from the registrable domain (for example example.co.uk). |
SSL details are read for HTTPS targets only.
Expiry alerts
SSL and registration expiry feed the alert rules SSL expiring (under 14 days) and Domain expiring (under 30 days). Uptime and response time feed Website down and Slow website. See Monitoring & alerts to change the thresholds and Notifications to choose where alerts go.
SEO analysis
SEO analysis works for HTTP and HTTPS targets.
- Open the domain and click the SEO tab.
- Click Run SEO analysis (or Run analysis again).
OpsNexus fetches the page, robots.txt, the sitemap and up to 25 internal links, then scores 14 checks out of 100. A pass earns full points, a warning half, a fail none.
| Check | Points | Passes when |
|---|---|---|
| HTTPS | 10 | The final URL is HTTPS. |
| Page title | 10 | The title is 10 to 65 characters. |
| Meta description | 10 | The description is 50 to 160 characters. |
| Indexable | 10 | No noindex in the robots meta tag or X-Robots-Tag header. |
| Main heading (H1) | 8 | Exactly one H1. |
| sitemap.xml | 8 | A sitemap is found (from robots.txt or /sitemap.xml). |
| Mobile friendly (viewport) | 8 | A viewport meta tag is present. |
| Broken internal links | 8 | None of the checked internal links return an error. |
| Canonical URL | 6 | A canonical link is present. |
| Server response time | 6 | Under 800 ms (warning under 2000 ms). |
| robots.txt | 5 | /robots.txt exists and has a User-agent line. |
| Structured data | 5 | At least one JSON-LD block. |
| Heading structure | 4 | No skipped heading levels. |
| Image alt text | 2 | Every image has alt text. |
The report shows the SEO score, each check with its result, Recommendations sorted by impact (High, Medium, Low), and the Score history across runs.
Core Web Vitals
To add Core Web Vitals (LCP, INP and CLS field data) to SEO reports, set a Google PageSpeed Insights API key:
PAGESPEED_API_KEY=your-keyTraffic
The Traffic tab on a domain shows visitors and page views per day, a world map and list by country, devices, browsers, operating systems, sources, referrers and top pages. Pick Last 7 days, Last 30 days or Last 90 days.
Choose a data source the first time (needs modify access):
| Source | How it works |
|---|---|
| Tracking snippet | Add one <script> tag to every page of the site. Each page view is sent to OpsNexus. Countries come from the visitor's IP through the DB-IP Lite database, which OpsNexus downloads. IPs are never stored and no cookies are set: a visitor is a hash that changes daily. |
| Cloudflare analytics | For sites behind Cloudflare. Paste a read-only Cloudflare API token with Zone Read and Analytics Read for the zone, then click Connect Cloudflare. The token is kept in the secret store. |
To use the snippet:
On the Traffic tab, choose Tracking snippet and click Create tracking snippet.
Click Copy and paste the snippet into the
<head>of every page, your site template or your tag manager. It looks like this:html<script defer src="https://opsnexus.example.com/api/t/script.js" data-site="SITE_KEY"></script>Visits show up within a minute.
Visitors' browsers must reach OpsNexus. If PUBLIC_URL is a local address such as localhost, only visits from that machine are counted. Put OpsNexus on a public HTTPS address, set PUBLIC_URL, and copy the snippet again.
Snippet page views are kept for TRAFFIC_RETENTION_DAYS (default 395).
Permissions
Domains use the Domains & SEO module in roles.
| Access level | Allows |
|---|---|
| read | See domains, checks, SEO reports and traffic. |
| modify | Add domains, Check now, run SEO analysis, set the traffic source. |
| full | Remove domains. |