WEB RUN App version: v2.0 — Task Clarity + AEO Client: lunainc Month: 2026-09 Run mode: production Started: 2026-09-02T13:49:18.224122 Run folder: /home/rimshotc/seo-automation/Monthly-SEO-Automation/output/SEO-Exports/lunainc/2026-09 STEP: Config check ================================================================================ /home/rimshotc/seo-automation/venv/bin/python /home/rimshotc/seo-automation/Monthly-SEO-Automation/scripts/config_check.py lunainc /home/rimshotc/seo-automation/Monthly-SEO-Automation/output/SEO-Exports/lunainc/2026-09 ================================================================================ CONFIG CHECK Config source: config/client_config.xlsx Client: lunainc (Luna Inc) Hours: 7.0 | Intent: balanced | Local: False Platform: [blank] Builder/editor: [blank] Theme: [blank] Safe code location: [blank] Sources: GSC=True GA=False Frog=True Labrika=True Crawl: enabled=True max_urls=1500 include_subdomains=False Allow subdomains in task output: False Warnings: - Platform is blank. Technical tasks may lack CMS-specific guidance. - Builder/editor is blank. Template tasks may be less specific. - Theme is blank. Theme-safe fix guidance may be less specific. - Safe code location is blank. Technical tasks will use generic safe-fix guidance. Config check written: /home/rimshotc/seo-automation/Monthly-SEO-Automation/output/SEO-Exports/lunainc/2026-09/output/config_check.json [exit code: 0] STEP: Google Search Console ================================================================================ /home/rimshotc/seo-automation/venv/bin/python /home/rimshotc/seo-automation/Monthly-SEO-Automation/scripts/gsc_exporter.py AUTO /home/rimshotc/seo-automation/Monthly-SEO-Automation/output/SEO-Exports/lunainc/2026-09 ================================================================================ Traceback (most recent call last): File "/home/rimshotc/seo-automation/venv/lib64/python3.11/site-packages/httplib2/__init__.py", line 1369, in _conn_request conn.connect() File "/home/rimshotc/seo-automation/venv/lib64/python3.11/site-packages/httplib2/__init__.py", line 1145, in connect address_info = socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/alt/python311/lib64/python3.11/socket.py", line 962, in getaddrinfo for res in _socket.getaddrinfo(host, port, family, type, proto, flags): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ socket.gaierror: [Errno -2] Name or service not known During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/rimshotc/seo-automation/venv/lib64/python3.11/site-packages/google_auth_httplib2.py", line 115, in __call__ response, data = self.http.request( ^^^^^^^^^^^^^^^^^^ File "/home/rimshotc/seo-automation/venv/lib64/python3.11/site-packages/httplib2/__init__.py", line 1727, in request (response, content) = self._request( ^^^^^^^^^^^^^^ File "/home/rimshotc/seo-automation/venv/lib64/python3.11/site-packages/httplib2/__init__.py", line 1447, in _request (response, content) = self._conn_request(conn, request_uri, method, body, headers) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/rimshotc/seo-automation/venv/lib64/python3.11/site-packages/httplib2/__init__.py", line 1376, in _conn_request raise ServerNotFoundError("Unable to find the server at %s" % conn.host) httplib2.error.ServerNotFoundError: Unable to find the server at oauth2.googleapis.com During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/rimshotc/seo-automation/Monthly-SEO-Automation/scripts/gsc_exporter.py", line 209, in raise SystemExit(main()) ^^^^^^ File "/home/rimshotc/seo-automation/Monthly-SEO-Automation/scripts/gsc_exporter.py", line 201, in main pull_gsc(run_folder) File "/home/rimshotc/seo-automation/Monthly-SEO-Automation/scripts/gsc_exporter.py", line 127, in pull_gsc queries = query_gsc(service, site, start, end, ["query", "page"]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/rimshotc/seo-automation/Monthly-SEO-Automation/scripts/gsc_exporter.py", line 81, in query_gsc rows = service.searchanalytics().query(siteUrl=site, body=request).execute().get("rows", []) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/rimshotc/seo-automation/venv/lib64/python3.11/site-packages/googleapiclient/_helpers.py", line 130, in positional_wrapper return wrapped(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/rimshotc/seo-automation/venv/lib64/python3.11/site-packages/googleapiclient/http.py", line 923, in execute resp, content = _retry_request( ^^^^^^^^^^^^^^^ File "/home/rimshotc/seo-automation/venv/lib64/python3.11/site-packages/googleapiclient/http.py", line 191, in _retry_request resp, content = http.request(uri, method, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/rimshotc/seo-automation/venv/lib64/python3.11/site-packages/google_auth_httplib2.py", line 205, in request self.credentials.before_request(self._request, method, uri, request_headers) File "/home/rimshotc/seo-automation/venv/lib64/python3.11/site-packages/google/auth/credentials.py", line 469, in before_request self._blocking_refresh(request) File "/home/rimshotc/seo-automation/venv/lib64/python3.11/site-packages/google/auth/credentials.py", line 203, in _blocking_refresh self.refresh(request) File "/home/rimshotc/seo-automation/venv/lib64/python3.11/site-packages/google/auth/credentials.py", line 482, in refresh self._perform_refresh_token(request) File "/home/rimshotc/seo-automation/venv/lib64/python3.11/site-packages/google/oauth2/service_account.py", line 460, in _perform_refresh_token access_token, expiry, _ = _client.jwt_grant( ^^^^^^^^^^^^^^^^^^ File "/home/rimshotc/seo-automation/venv/lib64/python3.11/site-packages/google/oauth2/_client.py", line 307, in jwt_grant response_data = _token_endpoint_request( ^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/rimshotc/seo-automation/venv/lib64/python3.11/site-packages/google/oauth2/_client.py", line 267, in _token_endpoint_request ) = _token_endpoint_request_no_throw( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/rimshotc/seo-automation/venv/lib64/python3.11/site-packages/google/oauth2/_client.py", line 196, in _token_endpoint_request_no_throw response = request( ^^^^^^^^ File "/home/rimshotc/seo-automation/venv/lib64/python3.11/site-packages/google_auth_httplib2.py", line 122, in __call__ raise exceptions.TransportError(exc) google.auth.exceptions.TransportError: Unable to find the server at oauth2.googleapis.com [exit code: 1] STEP: Screaming Frog ================================================================================ /home/rimshotc/seo-automation/venv/bin/python /home/rimshotc/seo-automation/Monthly-SEO-Automation/scripts/screaming_frog_exporter.py /home/rimshotc/seo-automation/Monthly-SEO-Automation/output/SEO-Exports/lunainc/2026-09 ================================================================================ [FROG] skipped: Screaming Frog CLI was not found. [FROG] no manual Screaming Frog CSV exports found in input/ or run-folder root. [exit code: 0] STEP: Task engine \nGOOGLE EXPORT VERIFICATION: /home/rimshotc/seo-automation/Monthly-SEO-Automation/output/SEO-Exports/lunainc/2026-09/output/google_export_verification.json\nGOOGLE EXPORT WARNING: Fresh GSC was selected, but one or more expected GSC query/page files were not written with rows.\n ================================================================================ /home/rimshotc/seo-automation/venv/bin/python /home/rimshotc/seo-automation/Monthly-SEO-Automation/scripts/monthly_seo_engine.py lunainc /home/rimshotc/seo-automation/Monthly-SEO-Automation/output/SEO-Exports/lunainc/2026-09 ================================================================================ [13:50:08] Monthly SEO Engine v7.0.0 [13:50:08] Client: lunainc [13:50:08] Run folder: /home/rimshotc/seo-automation/Monthly-SEO-Automation/output/SEO-Exports/lunainc/2026-09 [13:50:08] Config loaded: hours=7.0, local=False, intent=balanced [13:50:08] SOURCE INTAKE WARNING: pages_current was missing for 2026-09; used fallback source from 2026-08: lunainc_pages_current.csv [13:50:08] SOURCE INTAKE WARNING: pages_prior was missing for 2026-09; used fallback source from 2026-08: lunainc_pages_prior.csv [13:50:08] SOURCE INTAKE WARNING: queries_current was missing for 2026-09; used fallback source from 2026-08: lunainc_queries_current.csv [13:50:08] SOURCE INTAKE WARNING: queries_prior was missing for 2026-09; used fallback source from 2026-08: lunainc_queries_prior.csv [13:50:08] Not found after flexible search: CSV matching tokens ['ga', 'current'] [13:50:08] Not found after flexible search: CSV matching tokens ['ga', 'prior'] [13:50:08] Not found after flexible search: CSV matching tokens ['internal'] [13:50:08] Not found after flexible search: CSV matching tokens ['inlinks'] [13:50:08] Not found after flexible search: CSV matching tokens ['title'] [13:50:08] Not found after flexible search: CSV matching tokens ['meta'] [13:50:08] Not found after flexible search: CSV matching tokens ['h1'] [13:50:08] Not found after flexible search: CSV matching tokens ['response'] [13:50:15] Cannibalization detection: 266 cannibalization issues found [13:50:15] Labrika: found 34 workbook/export file(s) [13:50:15] Labrika: skipped lunainc.com_Competitors_list.xlsx; no URL/page column detected [13:50:15] Labrika: skipped lunainc.com_Description_duplicates.xlsx; no URL/page column detected [13:50:15] Labrika: skipped lunainc.com_Exclusion_of_competitors.xlsx; no URL/page column detected [13:50:16] Labrika: skipped lunainc.com_TITLE_duplicates.xlsx; no URL/page column detected [13:50:16] Labrika: skipped lunainc.com_Top_competitors.xlsx; no URL/page column detected [13:50:16] Labrika: mapped 3020 page-level issue opportunity/opportunities [13:50:16] Labrika enhancement: enriched 300/929 opportunities with GSC data. [13:50:17] Labrika severity: no Priority/Severity columns found in any Labrika file. [13:50:17] Indexing: no page indexing report found [13:59:38] Keyword clustering: 468 clusters from 6375 queries [13:59:38] Exported keyword clusters to keyword_clusters.json [13:59:40] SERP feature detection v7 opportunities: 20 [13:59:41] AI answer optimization opportunities: 95 [14:09:04] Keyword clustering: 468 clusters from 6375 queries [14:10:25] Content brief opportunity: 1 [14:11:42] Semantic scoring completed for 50 pages [14:11:44] PageSpeed skipped for https://lunainc.com: HTTP 429 [14:11:44] PageSpeed skipped for https://www.lunainc.com: HTTP 429 [14:11:44] PageSpeed skipped for https://lunainc.com/about-luna: HTTP 429 [14:11:45] PageSpeed skipped for https://lunainc.com/product/odisi-6000-series: HTTP 429 [14:11:45] PageSpeed skipped for https://lunainc.com/capability/temperature: HTTP 429 [14:11:45] PageSpeed skipped for https://lunainc.com/product/os1100-os1200-fiber-bragg-gratings: HTTP 429 [14:11:45] PageSpeed skipped for https://lunainc.com/product/odisi-7100-series: HTTP 429 [14:11:46] PageSpeed skipped for https://lunainc.com/odisi-remote-software-windows-download: HTTP 429 [14:11:46] PageSpeed skipped for https://lunainc.com/products: HTTP 429 [14:11:46] PageSpeed skipped for https://lunainc.com/product/psg-001: HTTP 429 [14:11:47] PageSpeed skipped for https://lunainc.com/careers: HTTP 429 [14:11:47] PageSpeed skipped for https://lunainc.com/locations: HTTP 429 [14:11:47] PageSpeed skipped for https://lunainc.com/solution/fiber-optic-latency-and-length-testing: HTTP 429 [14:11:48] PageSpeed skipped for https://lunainc.com/solution/structural-health-monitoring: HTTP 429 [14:11:48] PageSpeed skipped for https://lunainc.com/capability/strain: HTTP 429 [14:11:48] PageSpeed skipped for https://lunainc.com/blog/optical-reflectometers-how-do-they-compare: HTTP 429 [14:11:48] PageSpeed skipped for https://lunainc.com/product-category/sensing-and-non-destructive-test-products: HTTP 429 [14:11:49] PageSpeed skipped for https://lunainc.com/product/passive-components: HTTP 429 [14:11:49] PageSpeed skipped for https://lunainc.com/see-what-youve-been-missing-hd-fiber-optic-sensing: HTTP 429 [14:11:49] PageSpeed skipped for https://lunainc.com/contact: HTTP 429 [14:11:51] Content gap: 20 content gap opportunities detected [14:11:51] Starting multi-month trend analysis... [14:11:52] Page trends computed: 2236 pages analyzed [14:11:54] Query trends computed: 7246 queries analyzed [14:11:54] GA trends computed: 0 pages analyzed [14:11:54] Pages down: 1119 [14:11:54] Pages new: 71 [14:11:54] Pages stable: 188 [14:11:54] Pages up: 858 [14:13:06] Trend opportunities generated: 649 [14:13:06] Trend snapshot saved: 2236 pages, 7246 queries [14:13:06] Trend analysis opportunities: 649 [14:13:06] Client is not local — skipping GBP analysis [14:13:06] Auto-detected prior run folder: 2026-08 [14:13:06] Starting task verification... [14:13:06] Parsed 11 tasks for verification [14:13:06] Verification complete: 11 tasks checked [14:13:06] unable_to_verify: 11 [14:13:06] Verification results saved to verification_results.json [14:13:06] Verification report generated: verification_results.json [14:13:06] Feedback results saved: feedback_results.json [14:13:06] Feedback analysis: 11 tasks analyzed, 9 opportunities generated [14:13:06] Competitor analysis: No competitors configured in client config [14:13:06] Historical dedup: loaded 0 prior task keys from /home/rimshotc/seo-automation/Monthly-SEO-Automation/output/SEO-Exports/lunainc/2026-08/output/tasks.csv [14:13:06] URL dedup: removed 436 duplicate URL variant opportunities [14:13:06] Pages: 2236 [14:13:06] GSC opportunities: 224 [14:13:06] Subdomain GSC opportunities: 0 [14:13:06] Multi-query opportunities: 199 [14:13:06] Crawl opportunities (v2): 0 [14:13:06] Internal link opportunities: 0 [14:13:06] GA engagement opportunities: 0 [14:13:06] Content expansion opportunities: 0 [14:13:06] Indexing intelligence opportunities: 0 [14:13:06] Cannibalization opportunities: 0 [14:13:06] Page creation opportunities: 0 [14:13:06] Keyword cluster opportunities: 10 [14:13:06] SERP feature opportunities: 20 [14:13:06] Internal PageRank opportunities: 0 [14:13:06] Semantic scoring opportunities: 15 [14:13:06] Schema validator opportunities: 0 [14:13:06] PageSpeed opportunities: 0 [14:13:06] Content gap opportunities: 20 [14:13:06] Trend analysis opportunities: 649 [14:13:06] GBP opportunities: 0 [14:13:06] Redirect opportunities: 0 [14:13:06] Canonical conflict opportunities: 0 [14:13:06] Broken link opportunities: 0 [14:13:06] Subsite mixed-content opportunities: 0 [14:13:06] Feedback loop opportunities: 9 [14:13:06] Competitor analysis opportunities: 0 [14:13:06] Labrika opportunities: 929 [14:13:06] Indexing (GSC report) opportunities: 0 [14:13:06] Retainer fill opportunities: 0 [14:13:06] Historical dedup keys loaded: 0 [14:13:06] Combined opportunities (after all filters): 1735 [14:13:21] Page grouping: 5 page group(s) across 10 task(s) [14:13:21] Phase 4.5: LLM copy generation for 5 task(s) [14:13:21] LLM generating copy for: Improve internal linking: homepage [14:13:23] LLM generating copy for: Optimize page content: homepage (lunatogel) [14:13:28] LLM generating copy for: Optimize page content: Luna Innovations Stock Be Suspended Nasdaq Listing (nasdaq lvna) [14:13:37] LLM generating copy for: Optimize page content: homepage (luna togel) [14:13:44] LLM generating copy for: Optimize page content: Locations (in atlanta) [14:13:53] Phase 4.5 complete: 5/5 task(s) received LLM-generated copy [14:13:53] Exported 10 tasks to tasks.csv [14:13:53] Exported 10 Zoho tasks to zoho_tasks.csv [14:13:53] Exported detailed playbook to playbook.xlsx [14:13:54] Exported 1735 ranked opportunities to opportunities_ranked.csv [14:13:55] Exported 1725 deferred backlog items to deferred_backlog.csv [14:13:55] Exported deliverable brief to deliverable_brief.md [14:13:55] DONE [exit code: 0] Finished: 2026-09-02T14:13:55.481890 [ { "step": "Config check", "exit_code": 0 }, { "step": "Google Search Console", "exit_code": 1 }, { "step": "Screaming Frog", "exit_code": 0 }, { "step": "Task engine", "exit_code": 0 } ]