Commit Graph

178 Commits

Author SHA1 Message Date
Peter Foster
0582a20a63 seo: auto-optimize titles and descriptions (2026-04-11) 2026-04-11 17:50:34 +00:00
Peter Foster
24c314b8d1 seo: auto-optimize titles and descriptions (2026-04-11) 2026-04-11 17:43:55 +00:00
Peter Foster
3e46edd523 seo: auto-optimize titles and descriptions (2026-04-06) 2026-04-06 06:08:35 +00:00
Peter Foster
a791806517 seo: auto-optimize titles and descriptions (2026-03-30) 2026-03-30 06:10:16 +00:00
Peter Foster
72b114e5bb Fix accessibility violations: color contrast, aside nesting
- Improve text contrast from #666/#888/#999 to #555/#6b6b6b across site (WCAG AA)
- Fix aside nesting in all 10 blog articles (aside→div in related-articles)
- Fix aside nesting in quote sidebar
- Update CRO enhancement CSS/JS inline colors

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 16:25:46 +01:00
Peter Foster
5f5691f51e seo: auto-optimize titles and descriptions (2026-03-27) 2026-03-27 09:18:23 +00:00
Peter Foster
6fc9620de1 seo: auto-optimize titles and descriptions (2026-03-27) 2026-03-27 09:13:46 +00:00
Peter Foster
d6da725c89 seo: auto-optimize titles and descriptions (2026-03-27) 2026-03-27 08:58:42 +00:00
Peter Foster
8b8ce0b526 seo: auto-optimize titles and descriptions (2026-03-25) 2026-03-25 11:27:56 +00:00
Peter Foster
5c7cb3b4ba seo: auto-optimize titles and descriptions (2026-03-24) 2026-03-24 02:31:10 +00:00
Peter Foster
1642219609 seo: auto-optimize titles and descriptions (2026-03-24) 2026-03-24 02:29:59 +00:00
Peter Foster
6819689ebd fix: blog/index.php missing DOCTYPE, head and CSS — page was completely unstyled
meta-tags.php only defines PHP functions, outputs nothing. The page had no
<!DOCTYPE html>, <html>, <head>, or CSS link — browser rendered it as an
unstyled text document. Replaced with a proper HTML head section.
2026-03-22 19:34:54 +00:00
Peter Foster
76abfc23da remove: skip-to-content accessibility links from all pages 2026-03-22 19:31:32 +00:00
Peter Foster
683b701655 fix: add unsafe-inline back to style-src CSP
style-src without unsafe-inline blocks all inline style= attributes,
breaking logo sizing, section layouts, and any element with inline CSS.
script-src retains nonces for actual XSS protection — style-src unsafe-inline
is safe and necessary for the sites inline styling patterns.
2026-03-22 19:26:22 +00:00
Peter Foster
5d490ac91e fix: CSS not loading due to CSP blocking onload inline event handler
The media=print onload deferred CSS pattern requires unsafe-inline in
script-src. When nonces replaced unsafe-inline in 14f1e53, the onload
attribute was blocked by CSP, leaving main.min.css as media=print only
so all below-fold styles were invisible.

Fix: replace onload attribute with a nonce-tagged inline script that
does the same media switch — CSP-safe.
2026-03-22 19:21:45 +00:00
Peter Foster
6cff10baba fix: formatting errors on home and quote pages
- index.php: add .hero-eyebrow CSS (uppercase eyebrow label above H1)
- index.php: fix unquoted class=section-label attribute
- quote.php: fix hero background from grey to purple gradient (consistent with all other pages)
2026-03-22 19:13:56 +00:00
Peter Foster
cd2d91ac59 seo: auto-optimize titles and descriptions (2026-03-22) 2026-03-22 18:45:53 +00:00
Peter Foster
14f1e53c07 Security+Perf: CSP nonces, robots.txt cleanup, minify JS
- index.php: replace unsafe-inline CSP with per-request nonces on all 13 inline scripts/styles
- robots.txt: remove sensitive config filenames (db-config, email-config, recaptcha-config)
- main.min.js: actually minified with terser (37KB -> 16KB, -38% gzipped)
2026-03-22 04:06:53 +00:00
Peter Foster
803905c328 SEO: internal links for remaining 3 orphan articles
- gdpr-ai-automation-uk-firms: linked from GDPR Compliant by Default feature
- ma-due-diligence-automation-corporate-law: linked from Data Pipeline Build-Outs card
- how-to-brief-ai-automation-consultant: linked from Scoping & Proposal process step

All 9 blog articles now have 3+ inbound internal links
2026-03-22 03:25:26 +00:00
Peter Foster
5337fafc69 SEO: internal blog links from service sections, fix Cache-Control header
- Cache-Control: public, max-age=3600 (was private no-cache) for better CDN caching
- Document & Data Extraction card: links to PDF extraction and due diligence articles
- Research Automation card: links to research automation and cost of manual work articles
- Custom AI Agents card: links to what-is-an-ai-agent and build-vs-buy articles
- Use case cards: Legal Due Diligence, Consultancy Research, Document Review each
  now link to corresponding blog article instead of /quote
2026-03-22 03:23:35 +00:00
Peter Foster
b5a7347f0c SEO audit fixes: H1 keyword, schema, robots.txt, llms.txt, sitemap, alt texts, logo
- H1: add primary keyword (AI Automation for UK Law Firms & Consultancies)
- Hero subtitle: replace old scraping copy with accurate consultancy copy
- WebPage schema name aligned with title tag
- Organization schema: add telephone, fix sameAs (remove broken social URLs)
- robots.txt: add 5 missing AI crawlers (Applebot-Extended, Bytespider, CCBot, FacebookBot, Amazonbot)
- llms.txt: add Key Pages section with 7 linked pages
- sitemap.xml: add 4 legal pages (privacy, terms, cookie, gdpr)
- Icon alt texts: simplify 6 keyword-stuffed verbose alts
- Nav logo: add width/height dimensions, switch to loading=eager
2026-03-22 03:14:52 +00:00
Peter Foster
17d7bfa0c4 Add 4 new articles, internal links, llms.txt, sitemap update
- New articles: M&A due diligence automation, contract review automation,
  how to brief an AI consultant, build vs buy AI automation
- Related articles sections added to all 6 existing articles
- Blog index updated to list all 10 articles
- Sitemap updated with all 10 article URLs
- llms.txt created for AI search engine visibility
- case-studies/index.php: fix title, CSS path, logo path, JS path
2026-03-21 13:02:09 +00:00
Peter Foster
63fb1fd099 SEO: add BlogPosting schema, fix HTML heads, clean stale content
- Create includes/blog-article-head.php with full HTML head + BlogPosting
  JSON-LD schema (Organization author, OG/Twitter tags)
- Wire blog-article-head.php into all 6 blog articles (were missing DOCTYPE/head)
- Rewrite blog/search.php: only real articles, standard includes, noindex
- Simplify author-bio.php: remove invented fictional authors, org entry only
- Sitemap: add lastmod 2026-03-21, add case-studies and faq URLs
- Fix faq.php page title (redundant AI Automation duplicate removed)
2026-03-21 12:51:04 +00:00
Peter Foster
f21e80793b Fix legalName in organization schema to DataNorfolk Limited 2026-03-21 12:39:37 +00:00
Peter Foster
15b430e503 Fix schema address and footer LinkedIn link
- Organization schema: replace fake London address with Norfolk
- Update geo coordinates to North Walsham, Norfolk
- Footer: change LinkedIn from personal peter-foster profile to company page
2026-03-21 12:38:27 +00:00
Peter Foster
171633d0e8 Remove all personal name references throughout site 2026-03-21 10:59:35 +00:00
Peter Foster
30aac74528 Remove all Free Discovery Call CTAs, replace with Get a Quote 2026-03-21 10:58:08 +00:00
Peter Foster
f78d68e9db Fix broken image filename (icon-web-Automation-v2 → icon-web-scraping-v2) 2026-03-21 10:57:34 +00:00
Peter Foster
f2724782c8 Replace Python snake emoji with robot emoji on quote page badge 2026-03-21 10:42:18 +00:00
Peter Foster
a3cfcc9843 Remove Python as selling point throughout site
- about.php: title, subtitle, bio, technical background
- quote.php: title, meta, badge (10+ Years Python → 10+ Years Experience)
- case-studies/index.php: pipeline descriptions
- author-bio.php: fake author roles and bios
- article-footer.php: replace Python article links with actual AI articles
- blog/search.php: replace Python article, remove Python topic tag
2026-03-21 10:39:15 +00:00
Peter Foster
8eafc04b0f Fix all UKDS SEO cross-contamination risks
- Remove old sitemaps pointing to ukdataservices.co.uk URLs
- Delete llms.txt/llms-full.txt (had ukdataservices references)
- Replace all web scraping text in PHP files with AI automation equivalents
- Add noindex to legal boilerplate pages (privacy, terms, cookie, GDPR) to prevent duplicate content penalty
- Fix OG/Twitter social card images from ukds-* filenames to ukaiautomation-*
- Fix lead-capture.php to write logs to ukaiautomation directory
- Fix sitemap.php, quote-handler, canonical.php, related-services component
2026-03-21 10:13:14 +00:00
Peter Foster
37a6b01598 Replace web scraping content with AI automation brand
- Remove all web scraping services, blog articles, locations, tools pages
- Remove fake author profiles and old categories
- Add 6 new AI automation blog articles targeting legal/consultancy firms
- Rewrite blog index with new AI automation content
- Update robots.txt with correct ukaiautomation.co.uk domain
- Update sitemap.xml with current pages only
2026-03-21 10:04:47 +00:00
Peter Foster
1d705572ad Rebrand: UK AI Automation — new domain, logo, indigo colour scheme, AI services content 2026-03-21 09:48:46 +00:00
Peter Foster
a4a8e237d6 SEO fixes: schema cleanup, duplicate redirects, sitemap, about page
- faq.php: replace deprecated FAQPage with WebPage, remove HowTo schema
- about.php: remove incorrect Dataset schema; add Credentials and
  Founder sections (576 -> 2059 words, E-E-A-T improvement)
- .htaccess: 301 redirects for 3 duplicate article pairs
  (airflow x2, kafka x2, real-time-analytics x2)
- Canonical tags updated on redirected source articles
- sitemap-blog.xml: add 4 missing articles, remove redirect slug (47->50)
2026-03-20 18:54:44 +00:00
Peter Foster
e5c39067ca SEO: improve homepage readability (Flesch 22.8 → 55.0)
Rewrote 8 body copy sections to use shorter sentences and plainer
language. Grade level drops from college-graduate to grade 10-11.
Sections changed: services intro, web intelligence, cloud platform,
data management, methodology intro, why choose, trusted-by.
No headings, bullets, or CTAs changed.
2026-03-20 17:11:20 +00:00
Peter Foster
4d5635af56 SEO fixes: orphan pages, schema cleanup, clean URLs, llms-full.txt
- Add 32 missing articles to blog page 2 with working pagination
- Strip .php extensions from all blog article links (blog/index.php, article-footer.php)
- Remove unverified aggregateRating from Organization schema
- Remove empty telephone fields from Organization schema
- Fix broken tel: link in homepage contact section (+44 1692 689150)
- Update footer Twitter link to x.com
- Create llms-full.txt for AI crawler indexing
2026-03-20 17:08:18 +00:00
Peter Foster
9ba117a65f SEO: fix garbled blog article HTML, update H1, fix BI dashboard description
data-quality-validation-pipelines.php:
- Fix H1 to match title (was still "Advanced Statistical Validation..." after title was updated)
- Remove 3 orphaned text fragments from broken AI edit merges ("racy and reliability.", "ta pipelines...", "ust in your analytics.")
- Fix split <strong> tag mid-word
- Fix internal link from /services/web-scraping-services.php to /services/web-scraping

business-intelligence-dashboard-design.php:
- Rewrite meta description - old one concatenated with title into bizarre GSC query
  "2025 ux best practices for displaying data analysis results competitive intelligence dashboard..."
  (74 impressions, 0 clicks)
2026-03-20 16:17:08 +00:00
Peter Foster
ec87ef529b SEO: remove 3 redirected URLs from sitemap, update web-scraping lastmod
Remove /data-scraping-services/index, /services/web-scraping-companies, and /services/data-scraping from sitemap.xml — all now 301 redirect to /services/web-scraping. Sitemap should only list canonical URLs. Update lastmod on /services/web-scraping to 2026-03-20 to signal the title/description fix to Google.
2026-03-20 16:15:35 +00:00
Peter Foster
51c3647a82 SEO fix: restore original title/desc on web-scraping page, 301 duplicate pages, fix schema headline
- Restore title to Feb 16 baseline (was ranking pos 12.8): "Web Scraping Services UK | Fast, GDPR-Compliant Data Extraction"
- Restore original meta description targeting web scraping services for UK businesses
- Add 301 redirects for /web-scraping-services/ and /data-scraping-services/ → /services/web-scraping (duplicate pages were cannibalizing the main page)
- Fix blog article schema headline from generic "statistical validation" phrase to "Data Quality Validation for Web Scraping Pipelines" to stop attracting irrelevant academic queries in GSC
2026-03-20 16:14:30 +00:00
Peter Foster
befdfc16f4 SEO fix: redirect /services/web-scraping-companies and /services/data-scraping to /services/web-scraping, deduplicate sitemap, update lastmod 2026-03-16 20:53:52 +00:00
Peter Foster
9b9362ae82 Lower interaction score threshold to stop blocking real users
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 14:19:02 +00:00
Peter Foster
646eed921a Replace reCAPTCHA test keys with production v3 keys
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 14:08:56 +00:00
Peter Foster
34ddbe3fdd Fix SEO issues found via GSC audit
- Fix broken PHP syntax in real-time data extraction article
- Fix truncated meta description on homepage
- Fix truncated titles on competitive intelligence and price monitoring pages
- Update Selenium vs Playwright article year from 2024 to 2026
- Replace no-store cache headers on homepage with private revalidation
- 301 redirect thin duplicate real-time streaming article to canonical
- Add HSTS header to data-cleaning service page
- Replace SVG og:images with PNG social card across 24 blog articles
- Add Services breadcrumb level to London, Manchester, Birmingham pages
2026-03-10 04:37:15 +00:00
Peter Foster
4121a20e40 SEO: BreadcrumbList on all service pages, author bios, case study pages, internal links, address fix, llms.txt update 2026-03-08 11:13:11 +00:00
Peter Foster
62e69542b0 SEO schema cleanup + blog index update
Removed 42 deprecated/restricted schema blocks across 21 files:
- FAQPage removed from all commercial pages (restricted Aug 2023)
- HowTo removed from all pages (rich results removed Sep 2023)
- Compliance guide: author type fixed Organization->Person

Blog index:
- New article cards: ai-web-scraping-2026, web-scraping-lead-generation-uk
- Stats updated: 55+ articles -> 57+, 2025 Content -> 2026 Content
- Featured article date updated to March 2026
- Blog schema updated with new BlogPosting entries
2026-03-08 10:48:11 +00:00
Peter Foster
790ffef935 SEO content expansion: compliance guide body, 2 new blog articles, schema
- web-scraping-compliance-uk-guide: filled 7 missing body sections (ToS, IP,
  CMA, best practices, risk matrix, documentation, industry-specific)
  now ~54KB of substantive legal compliance content
- New: blog/articles/web-scraping-lead-generation-uk.php (March 2026)
- New: blog/articles/ai-web-scraping-2026.php (March 2026)
- predictive-analytics-customer-churn: description updated for new title
- index.php: web-scraping-companies added to footer nav
- BreadcrumbList JSON-LD added to data-scraping and web-scraping-companies pages
- sitemap-blog.xml: new articles added
2026-03-08 10:40:23 +00:00
Peter Foster
31dd3e8d70 SEO: freshen articles, internal links, comparison page
- predictive-analytics-customer-churn: title broadened for CTR
- web-scraping-compliance-uk-guide: modified date 2026, 2025->2026 in body/keywords
- python-data-pipeline-tools: last_modified updated to 2026-03-08
- index.php: data-scraping linked in services card and footer nav
- services/web-scraping.php: cross-link to data-scraping page
- New: services/web-scraping-companies.php comparison page (508 GSC impressions, pos 22)
- sitemaps: web-scraping-companies added
2026-03-08 10:28:12 +00:00
Peter Foster
1b8b97e293 Add data-scraping service page; fix title tags for CTR
- New /services/data-scraping page targeting data scraping services (1,260 GSC impressions, pos 29)
- web-scraping.php title: improved to target web scraping services provider (pos 7.3)
- web-scraping-compliance-uk-guide.php title: updated 2024 -> 2026 for freshness signal
- sitemap.xml and sitemap-services.xml: added /services/data-scraping URL
2026-03-08 10:12:37 +00:00
Peter Foster
3b8512714a Update sitemap lastmod dates and resubmit to GSC
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 10:04:03 +00:00
Peter Foster
69bd6429e3 Rewrite location pages with unique city-specific content 2026-03-08 09:55:36 +00:00