# Fortra Automate Drupal Audit — Status

Site: https://automate.fortra.com
Client: Fortra (we have admin access to the Drupal backend)
Last updated: 2026-04-23

## Current status

**Audit complete. Scope workbook sent to client. Waiting on their decisions.**

Once the client returns the workbook with their picks filled in, plan is to
implement the changes by hand through the Drupal admin UI (no scripting).

## Scope (what we're doing vs. not)

Four rows of the client's prioritization sheet were in scope. We audited all
three Drupal items; #44 (disavow toxic links) is outside Drupal, unrelated.

- **T015 / Row 41** — Redirect chain audit (>2 hops)
- **T016 / Row 42** — Update internal links that go through redirects
- **T033 / Row 44** — (out of scope, SEO not Drupal)
- **T063 / Row 46** — Standardize legacy `/node/N` links

### What we're doing (mechanical, no client input)

- **15 redirect chain flattens** (T015 chain-over-2) — update the "To" field in the
  redirect admin so the chain goes directly to the final URL
- **175 legacy `/node/N` link updates** (T063) — swap in the canonical alias
- **183 link-via-redirect updates** (T016) — swap for the final URL

Total: **373 manual edits** through the Drupal admin UI.

### What needs client input

- **27 broken `/node/N` legacy links** — target nodes have been deleted and there's
  no redirect. Client picks "remove link" or "replace with URL X" per item.

### What we're intentionally leaving alone

- **75 "dead" redirects** — mostly language-tagged entries (ES/FR/DE/IT). Bare-path
  requests 404 today, but they may still work correctly when hit with a language
  prefix (`/es/productos/...`, etc.). Risk of breaking multilingual behavior
  exceeds benefit. Client can revisit with a careful lang-context audit if desired.
- **619 exact-duplicate redirect rows** — purely cosmetic data cleanup. Users unaffected.
- **3 dangling self-redirects** — Drupal silently ignores them. Safe to delete but
  changes nothing user-facing.
- **47 "conflicting" duplicate redirects** — after inspection, all 47 rows group into
  21 unique sources. 18 of 21 are language-specific redirects doing intentionally
  different things per language. The 3 remaining "true" conflicts are also
  language-related (blank-language rows with different language-prefixed targets).
  All felt risky without deeper understanding of the client's multilingual setup.
- **206 two-hop redirect chains** — in spec. Flattening would be a best-practice
  enhancement, not required.

## Key facts worth remembering

- **Redirect table size:** 6,638 rows, 6,211 unique sources. Client's sheet said
  "219 redirects"; the number is 30× off but most of the extra rows are Drupal's
  auto-generated `/node/N` → alias redirects.
- **Content scope:** 603 unique published nodes (758 admin rows; the extras are
  EN/ES/FR translation variants of the same NIDs).
- **Node 17805** consistently returned "Failed to fetch" — only node we couldn't
  audit. Probably permissioned or soft-broken. Not worth blocking on unless the
  client cares.
- **Drupal ignores self-redirects** where the source path is the canonical alias
  of a real node. That's why many "cycles" in the static table analysis don't
  actually harm anyone.
- **Metatag module is installed**, but the Metatag: Verification submodule is NOT
  enabled. Enabling it adds a dedicated Google Site Verification field (output:
  `<meta name="google-site-verification" content="...">`). The `google` field in
  the default Metatag config is a different directive and validates against
  `notranslate`/`nositelinkssearchbox` only — wrong field for GSC verification.

## Files

- `fortra_scope_and_decisions.xlsx` — **the workbook sent to the client.** Six tabs:
  Read Me, three "we're doing" tabs with the mechanical edits, one decisions tab,
  one "NOT touching" tab for transparency.
- `fortra_t015_changes_v2.csv` — full T015 output (916 rows, all categories).
  Source data for the 15 chain flattens we'll implement.
- `fortra_t016_t063_changes_v2.csv` — full T016/T063 output (399 rows). Source
  data for the 358 link updates we'll implement + the 27 broken links awaiting
  client decisions.
- `fortra_t016_t063_dropped_v2.csv` — 69 rows dropped from the main v2 CSV during
  cycle verification (link targets that Drupal serves directly despite DB
  cycles). Audit trail.
- `fortra_redirects_raw.csv` — full 6,638-row redirect table export. Reference.

## Resuming the work

When the client returns the workbook:

1. Open `fortra_scope_and_decisions.xlsx` and read Tab 5 for their decisions on
   the 27 broken links. Add their picks into `fortra_t016_t063_changes_v2.csv`
   (or work straight from the workbook).
2. Work through tabs 2, 3, 4 in the admin UI. Batch by category rather than page:
   - Do all 15 redirect edits first (same admin page, fast)
   - Then the 358 link updates, probably grouped by source page so you only open
     each node once
3. Spot-check a handful of pages after implementing to confirm the changes
   rendered correctly.
4. Clear Drupal cache at `/admin/config/development/performance` once done, so
   the client can verify.

## Access

- Drupal admin: `https://automate.fortra.com/admin/content` (Rian logged in via
  Chrome-native session — browser automation can see the same cookies)
- No SSH / DB access. All work via the admin UI.

## One-off aside

User also asked about adding a Google Site Verification meta tag. The correct
path is to enable the **Metatag: Verification** submodule at `/admin/modules`,
then paste the verification code into the new "Google" field under the
Verification section of `/admin/config/search/metatag/global`. Not done yet —
user will do it when ready.
