open-local-audit 0.70.0 → 0.72.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  All notable changes to Open Local Audit will be documented here.
4
4
 
5
+ ## v0.72.0 - 2026-10-05
6
+
7
+ - Added the `redirect-chain-short` audit rule. It records each redirect hop (URL and status) while fetching the audited page and flags pages reached through more than one redirect, showing the full chain as evidence. A single redirect, such as plain HTTP to HTTPS, is not flagged, and rendered audits without redirect data are left unchecked.
8
+
9
+ ## v0.71.0 - 2026-10-04
10
+
11
+ - Added the `localbusiness-schema-nap-consistency` audit rule. It flags LocalBusiness structured data whose `telephone` or `streetAddress` does not match the phone numbers or address visible on the page, comparing phones as parsed international numbers and street addresses within the page element that shows them, while tolerating formatting differences, national trunk prefixes, common street abbreviations, and diacritics. Pages without a visible phone or address are left to the existing presence rules.
12
+
5
13
  ## v0.70.0 - 2026-10-03
6
14
 
7
15
  - Added evidence-based Overture business-to-website identity checks using structured names, valid phone numbers, and addresses. Missing or mixed evidence remains uncertain; conflicting sites cannot supply business contacts or audit scores.
package/dist/reporters.js CHANGED
@@ -160,13 +160,13 @@ function renderHtmlVisualEvidence(report) {
160
160
  const rows = report.visualEvidence
161
161
  .map((item) => `<tr><td>${escapeHtml(item.label)}</td><td><a href="${escapeHtml(item.path)}">${escapeHtml(item.path)}</a></td></tr>`)
162
162
  .join("\n");
163
- return ` <h2>Visual Evidence</h2>
164
- <table>
165
- <thead><tr><th>Label</th><th>Path</th></tr></thead>
166
- <tbody>
167
- ${rows}
168
- </tbody>
169
- </table>
163
+ return ` <h2>Visual Evidence</h2>
164
+ <table>
165
+ <thead><tr><th>Label</th><th>Path</th></tr></thead>
166
+ <tbody>
167
+ ${rows}
168
+ </tbody>
169
+ </table>
170
170
  `;
171
171
  }
172
172
  function renderHtmlLighthouse(report) {
@@ -179,16 +179,16 @@ function renderHtmlLighthouse(report) {
179
179
  const warnings = report.lighthouse.warnings && report.lighthouse.warnings.length > 0
180
180
  ? `<p class="meta">${report.lighthouse.warnings.map(escapeHtml).join("<br>")}</p>`
181
181
  : "";
182
- return ` <section>
183
- <h2>Lighthouse Summary</h2>
184
- <table>
185
- <thead><tr><th>Category</th><th>Score</th></tr></thead>
186
- <tbody>
187
- ${rows}
188
- </tbody>
189
- </table>
190
- ${warnings}
191
- </section>
182
+ return ` <section>
183
+ <h2>Lighthouse Summary</h2>
184
+ <table>
185
+ <thead><tr><th>Category</th><th>Score</th></tr></thead>
186
+ <tbody>
187
+ ${rows}
188
+ </tbody>
189
+ </table>
190
+ ${warnings}
191
+ </section>
192
192
  `;
193
193
  }
194
194
  function renderHtmlContactReadiness(report) {
@@ -205,15 +205,15 @@ function renderHtmlContactReadiness(report) {
205
205
  ]
206
206
  .map(([label, value]) => `<tr><td>${escapeHtml(label)}</td><td>${escapeHtml(value)}</td></tr>`)
207
207
  .join("\n");
208
- return ` <section>
209
- <h2>Contact Readiness</h2>
210
- <table>
211
- <thead><tr><th>Signal</th><th>Value</th></tr></thead>
212
- <tbody>
213
- ${rows}
214
- </tbody>
215
- </table>
216
- </section>
208
+ return ` <section>
209
+ <h2>Contact Readiness</h2>
210
+ <table>
211
+ <thead><tr><th>Signal</th><th>Value</th></tr></thead>
212
+ <tbody>
213
+ ${rows}
214
+ </tbody>
215
+ </table>
216
+ </section>
217
217
  `;
218
218
  }
219
219
  function renderHtmlBusinessIdentity(report) {
@@ -224,19 +224,19 @@ function renderHtmlBusinessIdentity(report) {
224
224
  ? `<ul>\n${identity.reasons.map((reason) => ` <li>${escapeHtml(reason)}</li>`).join("\n")}\n </ul>`
225
225
  : "";
226
226
  const evidence = identity.evidence.length > 0
227
- ? ` <table>
228
- <thead><tr><th>Field</th><th>Result</th><th>Source evidence</th><th>Website evidence</th><th>Page URL</th><th>Reason</th></tr></thead>
229
- <tbody>
230
- ${identity.evidence.map((item) => `<tr><td>${escapeHtml(item.field)}</td><td>${escapeHtml(item.state)}</td><td>${escapeHtml(item.sourceValues.join("; "))}</td><td>${escapeHtml(item.websiteValues.join("; "))}</td><td>${escapeHtml(item.pageUrl ?? "")}</td><td>${escapeHtml(item.reason)}</td></tr>`).join("\n")}
231
- </tbody>
227
+ ? ` <table>
228
+ <thead><tr><th>Field</th><th>Result</th><th>Source evidence</th><th>Website evidence</th><th>Page URL</th><th>Reason</th></tr></thead>
229
+ <tbody>
230
+ ${identity.evidence.map((item) => `<tr><td>${escapeHtml(item.field)}</td><td>${escapeHtml(item.state)}</td><td>${escapeHtml(item.sourceValues.join("; "))}</td><td>${escapeHtml(item.websiteValues.join("; "))}</td><td>${escapeHtml(item.pageUrl ?? "")}</td><td>${escapeHtml(item.reason)}</td></tr>`).join("\n")}
231
+ </tbody>
232
232
  </table>`
233
233
  : "";
234
- return ` <section>
235
- <h2>Business Identity Check</h2>
236
- <p><strong>Status:</strong> ${identityStatusLabel(identity.status)}</p>
237
- ${identity.status === "uncertain" ? " <p><strong>Warning:</strong> Business identity could not be confirmed from available evidence.</p>\n" : ""}${reasons}
238
- ${evidence}
239
- </section>
234
+ return ` <section>
235
+ <h2>Business Identity Check</h2>
236
+ <p><strong>Status:</strong> ${identityStatusLabel(identity.status)}</p>
237
+ ${identity.status === "uncertain" ? " <p><strong>Warning:</strong> Business identity could not be confirmed from available evidence.</p>\n" : ""}${reasons}
238
+ ${evidence}
239
+ </section>
240
240
  `;
241
241
  }
242
242
  function renderHtmlExecutiveSummary(report) {
@@ -244,15 +244,15 @@ function renderHtmlExecutiveSummary(report) {
244
244
  const findings = summary.findings.length > 0
245
245
  ? summary.findings.map((finding) => `<li>${escapeHtml(finding.title)}</li>`).join("\n")
246
246
  : "<li>No findings were detected by the current rule set.</li>";
247
- return ` <section>
248
- <h2>Executive Summary</h2>
249
- <p><strong>Business impact:</strong> ${escapeHtml(summary.impact)}</p>
250
- <p><strong>Recommended first fix:</strong> ${escapeHtml(summary.firstFix)}</p>
251
- <h3>Top 3 issues</h3>
252
- <ul>
253
- ${findings}
254
- </ul>
255
- </section>
247
+ return ` <section>
248
+ <h2>Executive Summary</h2>
249
+ <p><strong>Business impact:</strong> ${escapeHtml(summary.impact)}</p>
250
+ <p><strong>Recommended first fix:</strong> ${escapeHtml(summary.firstFix)}</p>
251
+ <h3>Top 3 issues</h3>
252
+ <ul>
253
+ ${findings}
254
+ </ul>
255
+ </section>
256
256
  `;
257
257
  }
258
258
  export function renderJsonReport(report, pretty = true) {
@@ -333,70 +333,70 @@ export function renderHtmlReport(report, options = {}) {
333
333
  const footer = reportBrand?.footerText || reportBrand?.contact
334
334
  ? `<footer class="meta">${escapeHtml([reportBrand.footerText, reportBrand.contact].filter(Boolean).join(" | "))}</footer>`
335
335
  : "";
336
- return `<!doctype html>
337
- <html lang="en">
338
- <head>
339
- <meta charset="utf-8">
340
- <meta name="viewport" content="width=device-width, initial-scale=1">
341
- <title>${escapeHtml(reportBrandName)} Report - ${escapeHtml(report.finalUrl)}</title>
342
- <style>
343
- :root { color-scheme: light; --ink: #172026; --muted: #5f6b75; --line: #d8dee5; --panel: #f6f8fa; --brand: ${escapeHtml(reportBrand?.primaryColor ?? "#145a73")}; --accent: ${escapeHtml(reportBrand?.accentColor ?? "#2f7d5f")}; }
344
- * { box-sizing: border-box; }
345
- body { background: #eef2f5; color: var(--ink); font-family: Arial, sans-serif; line-height: 1.5; margin: 0; }
346
- .report-shell { max-width: 1120px; margin: 0 auto; padding: 2rem; }
347
- .hero { background: #ffffff; border: 1px solid var(--line); border-radius: 8px; padding: 1.5rem; }
348
- .eyebrow { color: var(--brand); font-size: 0.78rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; }
349
- .meta { color: var(--muted); }
350
- .score-grid { display: grid; gap: 1rem; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); margin: 1rem 0; }
351
- .score-card { background: var(--panel); border: 1px solid var(--line); border-radius: 8px; padding: 1rem; }
352
- .score-card strong { display: block; font-size: 1.8rem; }
353
- section { background: #ffffff; border: 1px solid var(--line); border-radius: 8px; margin-top: 1rem; padding: 1.25rem; }
354
- table { border-collapse: collapse; width: 100%; }
355
- th, td { border-bottom: 1px solid var(--line); padding: 0.65rem; text-align: left; vertical-align: top; }
356
- th { background: var(--panel); color: var(--muted); font-size: 0.82rem; text-transform: uppercase; }
357
- tr:last-child td { border-bottom: 0; }
358
- </style>
359
- </head>
360
- <body>
361
- <main class="report-shell">
362
- <header class="hero">
363
- <div class="eyebrow">${escapeHtml(reportBrandName)}</div>
364
- <h1>${escapeHtml(reportBrandName)} Report</h1>
365
- <p class="meta">URL: ${escapeHtml(report.url)}<br>Final URL: ${escapeHtml(report.finalUrl)}<br>Scanned at: ${escapeHtml(report.scannedAt)}<br>Status code: ${report.statusCode}<br>Profile: ${escapeHtml(report.profile ?? "generic")}</p>
366
- <div class="score-grid" aria-label="Overall Health">
367
- <div class="score-card"><span>Overall Health</span><strong>${reportOverallScore}/100</strong></div>
368
- <div class="score-card"><span>Priority Findings</span><strong>${report.summary.high + report.summary.medium}</strong></div>
369
- <div class="score-card"><span>Total Findings</span><strong>${report.summary.totalFindings}</strong></div>
370
- </div>
371
- </header>
372
- <section>
373
- <h2>Score Summary</h2>
374
- <table>
375
- <thead><tr><th>Category</th><th>Score</th></tr></thead>
376
- <tbody>
377
- ${scoreRows}
378
- </tbody>
379
- </table>
380
- </section>
381
- ${businessIdentity}${executive}${contact}${lighthouse}${visualEvidence} <section>
382
- <h2>Findings</h2>
383
- <table>
384
- <thead><tr><th>Severity</th><th>Finding</th><th>Evidence</th><th>Recommendation</th></tr></thead>
385
- <tbody>
386
- ${findingRows}
387
- </tbody>
388
- </table>
389
- </section>
390
- <section>
391
- <h2>Recommendations</h2>
392
- <ul>
393
- ${recommendations}
394
- </ul>
395
- </section>
396
- ${footer}
397
- </main>
398
- </body>
399
- </html>
336
+ return `<!doctype html>
337
+ <html lang="en">
338
+ <head>
339
+ <meta charset="utf-8">
340
+ <meta name="viewport" content="width=device-width, initial-scale=1">
341
+ <title>${escapeHtml(reportBrandName)} Report - ${escapeHtml(report.finalUrl)}</title>
342
+ <style>
343
+ :root { color-scheme: light; --ink: #172026; --muted: #5f6b75; --line: #d8dee5; --panel: #f6f8fa; --brand: ${escapeHtml(reportBrand?.primaryColor ?? "#145a73")}; --accent: ${escapeHtml(reportBrand?.accentColor ?? "#2f7d5f")}; }
344
+ * { box-sizing: border-box; }
345
+ body { background: #eef2f5; color: var(--ink); font-family: Arial, sans-serif; line-height: 1.5; margin: 0; }
346
+ .report-shell { max-width: 1120px; margin: 0 auto; padding: 2rem; }
347
+ .hero { background: #ffffff; border: 1px solid var(--line); border-radius: 8px; padding: 1.5rem; }
348
+ .eyebrow { color: var(--brand); font-size: 0.78rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; }
349
+ .meta { color: var(--muted); }
350
+ .score-grid { display: grid; gap: 1rem; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); margin: 1rem 0; }
351
+ .score-card { background: var(--panel); border: 1px solid var(--line); border-radius: 8px; padding: 1rem; }
352
+ .score-card strong { display: block; font-size: 1.8rem; }
353
+ section { background: #ffffff; border: 1px solid var(--line); border-radius: 8px; margin-top: 1rem; padding: 1.25rem; }
354
+ table { border-collapse: collapse; width: 100%; }
355
+ th, td { border-bottom: 1px solid var(--line); padding: 0.65rem; text-align: left; vertical-align: top; }
356
+ th { background: var(--panel); color: var(--muted); font-size: 0.82rem; text-transform: uppercase; }
357
+ tr:last-child td { border-bottom: 0; }
358
+ </style>
359
+ </head>
360
+ <body>
361
+ <main class="report-shell">
362
+ <header class="hero">
363
+ <div class="eyebrow">${escapeHtml(reportBrandName)}</div>
364
+ <h1>${escapeHtml(reportBrandName)} Report</h1>
365
+ <p class="meta">URL: ${escapeHtml(report.url)}<br>Final URL: ${escapeHtml(report.finalUrl)}<br>Scanned at: ${escapeHtml(report.scannedAt)}<br>Status code: ${report.statusCode}<br>Profile: ${escapeHtml(report.profile ?? "generic")}</p>
366
+ <div class="score-grid" aria-label="Overall Health">
367
+ <div class="score-card"><span>Overall Health</span><strong>${reportOverallScore}/100</strong></div>
368
+ <div class="score-card"><span>Priority Findings</span><strong>${report.summary.high + report.summary.medium}</strong></div>
369
+ <div class="score-card"><span>Total Findings</span><strong>${report.summary.totalFindings}</strong></div>
370
+ </div>
371
+ </header>
372
+ <section>
373
+ <h2>Score Summary</h2>
374
+ <table>
375
+ <thead><tr><th>Category</th><th>Score</th></tr></thead>
376
+ <tbody>
377
+ ${scoreRows}
378
+ </tbody>
379
+ </table>
380
+ </section>
381
+ ${businessIdentity}${executive}${contact}${lighthouse}${visualEvidence} <section>
382
+ <h2>Findings</h2>
383
+ <table>
384
+ <thead><tr><th>Severity</th><th>Finding</th><th>Evidence</th><th>Recommendation</th></tr></thead>
385
+ <tbody>
386
+ ${findingRows}
387
+ </tbody>
388
+ </table>
389
+ </section>
390
+ <section>
391
+ <h2>Recommendations</h2>
392
+ <ul>
393
+ ${recommendations}
394
+ </ul>
395
+ </section>
396
+ ${footer}
397
+ </main>
398
+ </body>
399
+ </html>
400
400
  `;
401
401
  }
402
402
  //# sourceMappingURL=reporters.js.map
package/dist/rules.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { load } from "cheerio";
2
+ import { findPhoneNumbersInText, getCountries, parsePhoneNumberFromString } from "libphonenumber-js/max";
2
3
  function finding(rule, context) {
3
4
  return {
4
5
  id: rule.id,
@@ -85,6 +86,579 @@ function hasLocalBusinessContactFields($) {
85
86
  }
86
87
  return nodes.some((node) => hasStringField(node.telephone) && hasObjectField(node.address) && hasStringField(node.openingHours));
87
88
  }
89
+ function stringValues(value) {
90
+ const values = Array.isArray(value) ? value : [value];
91
+ return values.filter((item) => typeof item === "string" && item.trim().length > 0);
92
+ }
93
+ // A closed <dialog> is hidden by the browser without any attribute or style.
94
+ // aria-hidden only hides content from assistive technology, so it stays visible here.
95
+ const hiddenElements = "script, style, noscript, template, [hidden], dialog:not([open])";
96
+ // Inline CSS allows whitespace and !important around values ("display : none !important"), so read the declarations.
97
+ const hiddenStyle = /(?:^|;)\s*(?:display\s*:\s*none|visibility\s*:\s*hidden)\s*(?:!\s*important\s*)?(?:;|$)/i;
98
+ const blockElements = "address, article, aside, blockquote, dd, details, dialog, div, dl, dt, figcaption, footer, form, h1, h2, h3, h4, h5, h6, header, label, li, main, nav, ol, p, section, summary, table, td, th, tr, ul";
99
+ function visibleBody($) {
100
+ const body = $("body").clone();
101
+ body.find(hiddenElements).remove();
102
+ // A closed <details> shows only its summary; its other content, text nodes included, is hidden.
103
+ body.find("details:not([open])").each((_, element) => {
104
+ $(element)
105
+ .contents()
106
+ .filter((_, node) => !(node.type === "tag" && node.name.toLowerCase() === "summary"))
107
+ .remove();
108
+ });
109
+ body
110
+ .find("[style]")
111
+ .filter((_, element) => hiddenStyle.test($(element).attr("style") ?? ""))
112
+ .remove();
113
+ // Mark block boundaries so text from neighbouring elements is not read as one line.
114
+ body.find("br").replaceWith("\n");
115
+ body.find(blockElements).append("\n");
116
+ return body;
117
+ }
118
+ function visibleLines(element) {
119
+ return element
120
+ .text()
121
+ .split("\n")
122
+ .map((line) => line.replace(/\s+/g, " ").trim())
123
+ .filter(Boolean);
124
+ }
125
+ function collapsedText(element) {
126
+ return element.text().replace(/\s+/g, " ").trim();
127
+ }
128
+ const supportedPhoneCountries = new Set(getCountries());
129
+ function jsonLdIndex($) {
130
+ return new Map(jsonLdNodes($).flatMap((node) => (typeof node["@id"] === "string" ? [[node["@id"], node]] : [])));
131
+ }
132
+ function schemaAddresses(node, index) {
133
+ const addresses = Array.isArray(node.address) ? node.address : [node.address];
134
+ return addresses.map((address) => {
135
+ // Follow {"@id": ...} references to PostalAddress nodes elsewhere in the graph.
136
+ const reference = hasObjectField(address) ? address["@id"] : undefined;
137
+ return typeof reference === "string" && index.has(reference) ? { ...index.get(reference), ...address } : address;
138
+ });
139
+ }
140
+ function schemaCountry(node, index) {
141
+ return schemaAddresses(node, index)
142
+ .filter(hasObjectField)
143
+ .flatMap((address) => {
144
+ const value = address.addressCountry;
145
+ if (!hasObjectField(value)) {
146
+ return stringValues(value);
147
+ }
148
+ const reference = value["@id"];
149
+ const country = typeof reference === "string" ? { ...index.get(reference), ...value } : value;
150
+ return stringValues(country.name);
151
+ })
152
+ .map(countryCodeFromName)
153
+ .find((code) => code !== undefined);
154
+ }
155
+ const countryNameAliases = {
156
+ deutschland: "DE",
157
+ "great britain": "GB",
158
+ turkey: "TR",
159
+ uk: "GB",
160
+ usa: "US",
161
+ "united states of america": "US"
162
+ };
163
+ // addressCountry is often written in the site's own language ("España", "Türkiye"), so read names in common locales too.
164
+ const countryNameLocales = ["en", "es", "fr", "de", "it", "pt", "nl", "tr", "sv", "da", "nb", "fi", "pl", "cs", "el", "ru", "uk", "ja", "zh", "ko", "ar", "he", "id"];
165
+ let localizedCountryNames;
166
+ function normalizedCountryName(value) {
167
+ return value.normalize("NFKD").replace(/\p{M}/gu, "").replace(/\u0131/g, "i").toLowerCase().replace(/[^\p{L}\p{N}]+/gu, " ").trim();
168
+ }
169
+ function countryCodeFromName(value) {
170
+ const trimmed = value.trim();
171
+ if (/^[A-Za-z]{2}$/.test(trimmed)) {
172
+ const code = trimmed.toUpperCase();
173
+ // Unsupported two-letter values may still be common names ("UK"), so fall through to the aliases.
174
+ if (supportedPhoneCountries.has(code)) {
175
+ return code;
176
+ }
177
+ }
178
+ if (!localizedCountryNames) {
179
+ const names = new Map();
180
+ for (const locale of countryNameLocales) {
181
+ const displayNames = new Intl.DisplayNames([locale], { type: "region" });
182
+ for (const code of getCountries()) {
183
+ const name = displayNames.of(code);
184
+ // Earlier locales win, so an English name is never reassigned by a translation.
185
+ if (name && name !== code && !names.has(normalizedCountryName(name))) {
186
+ names.set(normalizedCountryName(name), code);
187
+ }
188
+ }
189
+ }
190
+ localizedCountryNames = names;
191
+ }
192
+ const name = normalizedCountryName(trimmed);
193
+ return localizedCountryNames.get(name) ?? countryNameAliases[name];
194
+ }
195
+ function parsedPhone(value, country) {
196
+ const parsed = parsePhoneNumberFromString(value.replace(/^tel:/i, "").trim(), country ? { defaultCountry: country } : {});
197
+ return parsed?.isValid() ? { e164: parsed.number, ext: parsed.ext, display: parsed.formatInternational() } : undefined;
198
+ }
199
+ // Extensions must agree when both sides give one; a number shown without its extension still matches.
200
+ function samePhone(visible, schema) {
201
+ return visible.e164 === schema.e164 && (!visible.ext || !schema.ext || visible.ext === schema.ext);
202
+ }
203
+ // Words between the label and the number may not name an identifier, so "Call ID: 4155550199" is not read as a phone.
204
+ const phoneLabelWords = "phone|tel|telephone|call|mobile|cell|whatsapp|telefon|telefone|telefono|teléfono|téléphone|tél|telemóvel|telemovel|celular|gsm|cep|ara|ruf|☎|📞";
205
+ const phoneLabel = new RegExp(String.raw `(?<![\p{L}\p{N}])(?:${phoneLabelWords})(?![\p{L}\p{N}])\.?[^\p{L}\p{N}]*(?:(?!(?:id|ids|ref|reference|order|ticket|case|account|acct|customer|invoice|booking|reservation|confirmation|tracking|serial|pin|code|log|session)(?![\p{L}\p{N}]))\p{L}+[^\p{L}\p{N}]+){0,3}$`, "iu");
206
+ // A block holding only a label ("Phone:", "Call us", "Telefon numarası") — not prose that merely mentions a phone.
207
+ const standalonePhoneLabel = new RegExp(String.raw `^[^\p{L}\p{N}]*(?:${phoneLabelWords})(?:\s+(?:us|number|no|nr|numarası|numarasi|nummer|numéro|número|numero))?\.?[^\p{L}\p{N}]*$`, "iu");
208
+ const phoneListSeparator = /^[\s,/|;–—-]*(?:(?:or|and|ve|veya|oder|und|ou|et|o|y)[\s,/|;–—-]*)?$/i;
209
+ // Label/value markup (<dt>Phone</dt><dd>...</dd>, <th>Address</th><td>...</td>) puts the label on its own line, so join each pair.
210
+ function labelValuePairs($, body) {
211
+ return [
212
+ ...body
213
+ .find("dt")
214
+ .toArray()
215
+ .map((element) => {
216
+ const values = $(element).nextUntil("dt", "dd").toArray();
217
+ return `${collapsedText($(element))}: ${values.map((value) => collapsedText($(value))).join(" ")}`;
218
+ }),
219
+ ...body
220
+ .find("tr")
221
+ .toArray()
222
+ .map((element) => {
223
+ const [label, ...values] = $(element).children("th, td").toArray();
224
+ return label ? `${collapsedText($(label))}: ${values.map((value) => collapsedText($(value))).join(" ")}` : "";
225
+ })
226
+ ].filter(Boolean);
227
+ }
228
+ function visiblePhones($, body, country) {
229
+ const linkPhones = body
230
+ .find("a[href^='tel:' i]")
231
+ .toArray()
232
+ .map((element) => parsedPhone($(element).attr("href") ?? "", country));
233
+ // Only trust numbers in body text when a phone label precedes them on the same line, so IDs and codes are not read as phones.
234
+ // A label also covers the numbers listed right after it ("Phone: 0212 ... / 0216 ...").
235
+ // A label alone in its block ("<div>Phone:</div><div>(415) 555-0199</div>") labels the next block's number.
236
+ const lines = visibleLines(body);
237
+ const labelledNextLines = lines.flatMap((line, index) => index + 1 < lines.length && standalonePhoneLabel.test(line) ? [`${line} ${lines[index + 1]}`] : []);
238
+ const textPhones = [...lines, ...labelledNextLines, ...labelValuePairs($, body)].flatMap((line) => {
239
+ let labelledEnd;
240
+ return findPhoneNumbersInText(line, country ? { defaultCountry: country } : {}).map(({ number, startsAt, endsAt }) => {
241
+ const labelled = phoneLabel.test(line.slice(0, startsAt)) ||
242
+ (labelledEnd !== undefined && phoneListSeparator.test(line.slice(labelledEnd, startsAt)));
243
+ labelledEnd = labelled ? endsAt : undefined;
244
+ return labelled && number.isValid() ? { e164: number.number, ext: number.ext, display: number.formatInternational() } : undefined;
245
+ });
246
+ });
247
+ const phones = [...linkPhones, ...textPhones].filter((phone) => phone !== undefined);
248
+ return Array.from(new Map(phones.map((phone) => [`${phone.e164};${phone.ext ?? ""}`, phone])).values());
249
+ }
250
+ // Abbreviations map to one canonical form so "St." and "Street" match while "Street" and "Road" stay different.
251
+ const canonicalAddressTokens = {
252
+ st: "street",
253
+ rd: "road",
254
+ ave: "avenue",
255
+ av: "avenue",
256
+ avenida: "avenue",
257
+ avda: "avenue",
258
+ bd: "boulevard",
259
+ pza: "plaza",
260
+ blvd: "boulevard",
261
+ ln: "lane",
262
+ dr: "drive",
263
+ hwy: "highway",
264
+ rte: "route",
265
+ pkwy: "parkway",
266
+ cres: "crescent",
267
+ cresc: "crescent",
268
+ ter: "terrace",
269
+ terr: "terrace",
270
+ cir: "circle",
271
+ crcl: "circle",
272
+ trl: "trail",
273
+ aly: "alley",
274
+ plz: "plaza",
275
+ hts: "heights",
276
+ xing: "crossing",
277
+ expy: "expressway",
278
+ fwy: "freeway",
279
+ tpke: "turnpike",
280
+ crt: "court",
281
+ gdns: "gardens",
282
+ grv: "grove",
283
+ pde: "parade",
284
+ esp: "esplanade",
285
+ cct: "circuit",
286
+ wy: "way",
287
+ pl: "place",
288
+ ct: "court",
289
+ sq: "square",
290
+ ste: "suite",
291
+ apt: "apartment",
292
+ bldg: "building",
293
+ rm: "room",
294
+ fl: "floor",
295
+ n: "north",
296
+ s: "south",
297
+ e: "east",
298
+ w: "west",
299
+ ne: "northeast",
300
+ nw: "northwest",
301
+ se: "southeast",
302
+ sw: "southwest",
303
+ cadde: "caddesi",
304
+ cad: "caddesi",
305
+ cd: "caddesi",
306
+ sok: "sokak",
307
+ sk: "sokak",
308
+ sokagi: "sokak",
309
+ mah: "mahallesi",
310
+ mahalle: "mahallesi",
311
+ str: "strasse",
312
+ ул: "улица"
313
+ };
314
+ const compassLetters = new Set(["n", "s", "e", "w", "ne", "nw", "se", "sw"]);
315
+ // Every street suffix the canonical map knows, so "12 S Crescent" keeps "S" as the street's name.
316
+ const streetTypes = new Set([
317
+ "street", "road", "avenue", "boulevard", "lane", "drive", "highway", "route", "parkway", "place", "court", "square",
318
+ "crescent", "terrace", "circle", "trail", "alley", "plaza", "heights", "crossing", "expressway", "freeway", "turnpike",
319
+ "gardens", "grove", "parade", "esplanade", "circuit", "way",
320
+ // Localized suffixes written as separate words ("S Straße", "S Caddesi").
321
+ "strasse", "gasse", "weg", "platz", "allee", "straat", "laan", "gatan", "vej", "gata", "caddesi", "sokak", "улица"
322
+ ]);
323
+ const fillerAddressTokens = new Set(["no", "nr", "the", "and", "jr"]);
324
+ // Zero code points of common native decimal digit sets (Arabic-Indic, Persian, Indic scripts, Thai, fullwidth, ...).
325
+ const nativeDigitZeros = [
326
+ 0x660, 0x6f0, 0x7c0, 0x966, 0x9e6, 0xa66, 0xae6, 0xb66, 0xbe6, 0xc66, 0xce6, 0xd66, 0xde6, 0xe50, 0xed0, 0xf20, 0x1040,
327
+ 0x1090, 0x17e0, 0x1810, 0xff10
328
+ ];
329
+ // House numbers written in native digits ("١٢") compare as ASCII digits ("12").
330
+ function asciiDigits(value) {
331
+ return value.replace(/[^\x00-\x7f]/gu, (char) => {
332
+ const code = char.codePointAt(0) ?? 0;
333
+ const zero = nativeDigitZeros.find((start) => code >= start && code <= start + 9);
334
+ return zero === undefined ? char : String(code - zero);
335
+ });
336
+ }
337
+ function addressTokens(value) {
338
+ return asciiDigits(value)
339
+ .replace(/\s*([½¼¾])/gu, (_, fraction) => ` ${{ "½": "1/2", "¼": "1/4", "¾": "3/4" }[fraction]}`)
340
+ // Keep fractional house numbers ("12 1/2") as one token so the fraction is not read as separate numbers.
341
+ .replace(/(\d+)\s+(\d+)\/(\d+)(?![\p{L}\p{N}])/gu, "$1x$2x$3")
342
+ // Likewise keep ranges ("12-14") as one token so "12-14" and "14-16" stay different house numbers.
343
+ .replace(/(?<![\p{L}\p{N}])(\d+)\s*[-–]\s*(\d+)(?![\p{L}\p{N}])/gu, "$1to$2")
344
+ // And unit/street pairs ("2/14 Main Street", "No: 12/3") so the unit number stays bound to its street number.
345
+ .replace(/(?<![\p{L}\p{N}])(\d+)\s*\/\s*(\d+)(?![\p{L}\p{N}])/gu, "$1of$2")
346
+ .normalize("NFKD")
347
+ .replace(/\p{M}/gu, "")
348
+ .replace(/ı/g, "i")
349
+ .toLowerCase()
350
+ .replace(/ß/g, "ss")
351
+ // "P.O. Box", "PO Box" and "Post Office Box" are one word.
352
+ .replace(/(?<![\p{L}\p{N}])(?:p\s*\.?\s*o\s*\.?|post\s+office)\s*box(?![\p{L}\p{N}])/gu, "pobox")
353
+ // Join house-number suffixes so "12-A", "12/A" and "12A" compare equal; "123 N" stays a directional.
354
+ .replace(/(\p{N})[/-](\p{L})(?![\p{L}\p{N}])/gu, "$1$2")
355
+ // Keep "#" before a unit identifier ("#100") as its own token so the identifier stays bound to it.
356
+ .replace(/#\s*(?=[\p{L}\p{N}])/gu, " # ")
357
+ .split(/[^\p{L}\p{N}#]+/u)
358
+ .flatMap((token) => (token.length > 1 && token.includes("#") ? token.split("#").filter(Boolean) : [token]))
359
+ .filter((token) => token && !fillerAddressTokens.has(token))
360
+ .map((token, index, tokens) => {
361
+ // A compass letter right before the street type is the street's name ("12 S Street"), not a direction.
362
+ if (compassLetters.has(token) && streetTypes.has(canonicalAddressTokens[tokens[index + 1]] ?? tokens[index + 1])) {
363
+ return token;
364
+ }
365
+ // "St" opening a street name ("12 St John St") is Saint; elsewhere it is Street.
366
+ if (token === "st" && /^\p{L}/u.test(tokens[index + 1] ?? "") && (index === 0 || /^\d/.test(tokens[index - 1]))) {
367
+ return "saint";
368
+ }
369
+ return canonicalAddressTokens[token] ?? token.replace(/(?<=\p{L})strasse$/u, "str");
370
+ })
371
+ // "#" after a label ("Suite #100") adds nothing, and without a following identifier it is just punctuation.
372
+ .filter((token, index, tokens) => token !== "#" || (index + 1 < tokens.length && !subAddressLabels.has(tokens[index - 1] ?? "")));
373
+ }
374
+ function streetAddresses(node, index) {
375
+ return schemaAddresses(node, index).flatMap((address) => {
376
+ if (typeof address === "string") {
377
+ return stringValues(address);
378
+ }
379
+ if (hasObjectField(address)) {
380
+ return stringValues(address.streetAddress);
381
+ }
382
+ return [];
383
+ });
384
+ }
385
+ const contactLine = /(?<![\p{L}\p{N}])(?:phone|tel|telephone|fax|call|mobile|cell|whatsapp|e-?mail|telefon|telefone|telefono|teléfono|t[eé]l[eé]phone|tél|telem[oó]vel|celular|gsm|cep|ruf)(?![\p{L}\p{N}])|[@☎📞]/iu;
386
+ // Distances and durations after a number ("5 minutes", "2 km") mean directions, not an address.
387
+ const distanceUnits = String.raw `(?:minutes?|mins?|hours?|hrs?|seconds?|secs?|days?|weeks?|km|kms|kilomet(?:er|re)s?|miles?|mi|blocks?|ft|feet|yards?|m|meters?|metres?)\b`;
388
+ // House numbers as addressTokens normalizes them: "12", "12A", "12-A", "12-14", "2/14", "12 1/2" and "12½".
389
+ const houseNumberPattern = String.raw `\d+(?:\s*[-–/]\s*\d+|\s+\d+\/\d+|[-/]?[a-z]|[½¼¾])?`;
390
+ // Suffixes that may follow a house number and name in unlabelled text ("14 Main Crescent"). Words that are common in prose
391
+ // on their own ("way", "ter", "esp") are left to labelled values and <address>.
392
+ const numberStreetTypes = "street|st|road|rd|avenue|ave|boulevard|blvd|lane|ln|drive|dr|court|ct|place|pl|parkway|pkwy|square|sq|highway|hwy|" +
393
+ "crescent|cres|terrace|terr|circle|cir|trail|trl|alley|aly|plaza|plz|heights|hts|crossing|xing|turnpike|tpke|gardens|gdns|" +
394
+ "grove|grv|parade|pde|esplanade|circuit|cct|expressway|expy|freeway|fwy";
395
+ function hasComparableAddress(rawText, inAddressElement = false) {
396
+ const text = asciiDigits(rawText);
397
+ const labelledAddress = /(?<!(?:e-?mail|web|website|site|url|uri|internet|homepage|ip|ipv4|ipv6|mac|hardware|wallet|bitcoin|server|network)\s)\b(?:address|adres|adresse|anschrift|direcci[oó]n|indirizzo)(?:\s*:\s*([^\n]{0,80})|\s+(\d[^\n]{0,79}))/iu;
398
+ // Without a colon the value must open with the house number, so prose such as "our address changed in 2020" is skipped.
399
+ // The number must belong to the address itself, not to a link, phone or email that follows on the same line.
400
+ const labelledMatch = labelledAddress.exec(text);
401
+ const addressValue = (labelledMatch?.[1] ?? labelledMatch?.[2])
402
+ ?.replace(/(?:https?:\/\/|www\.)\S*/giu, "")
403
+ // A period ends the value unless it closes a short abbreviation ("St.", "P.O.") or sits inside a number.
404
+ .split(/[;|]|(?<!(?:^|[^\p{L}])\p{L}{1,3})\.(?!\d)/u)[0]
405
+ .split(contactLine)[0]
406
+ // A labelled postal code ("ZIP 94105") is not a street.
407
+ .replace(/(?<![\p{L}\p{N}])(?:zip(?:\s*code)?|post(?:al)?\s*code|postcode|plz|code\s*postal|c[oó]digo\s*postal|cap|cp|posta\s*kodu)\s*:?\s*[\p{L}\p{N}-]*\d[\p{L}\p{N}-]*/giu, "");
408
+ // Name, street type, number ("Example Street 12"). The name is required and a distance unit may not follow the number,
409
+ // so directions such as "Drive 5 minutes" are not read as an address.
410
+ const streetNumber = new RegExp(String.raw `\p{L}{2,}\.?\s+(?:street|st|road|rd|avenue|ave|boulevard|blvd|lane|drive|court|place|parkway|square|highway|cadde|caddesi|cad|cd|sokak|sok|sk|stra(?:ss|ß)e|str)\b\.?\s*(?:no:?\s*)?\d+[a-z]?(?![\p{L}\p{N}]|\s*${distanceUnits})`, "iu");
411
+ // A year-like number ("2026 Main Street Festival") only counts when the street type ends the address (line end or comma).
412
+ const numberStreet = new RegExp(String.raw `\b(?!\d+\s+${distanceUnits})(?:(?!(?:19|20)\d\d(?![\p{L}\p{N}]))${houseNumberPattern}|(?:19|20)\d\d(?=\s.*\b(?:${numberStreetTypes})\.?\s*(?:[,;|]|$)))\s+(?:(?:\p{L}+|\d+(?:st|nd|rd|th))\.?\s+){1,6}(?:${numberStreetTypes})\b`, "iu");
413
+ // Street types written before the name, as in French, Spanish, Italian and Portuguese ("14 Rue de Rivoli", "5 Calle Mayor").
414
+ const numberPrefixStreet = new RegExp(String.raw `\b${houseNumberPattern},?\s+(?:rue|avenue|av|boulevard|bd|chemin|all[ée]e|impasse|quai|place|via|viale|piazza|corso|calle|carrer|avenida|plaza|paseo|rua|travessa)\.?\s+\p{L}`, "iu");
415
+ // Compound street names with the type as a suffix ("Hauptstraße 5", "Kalverstraat 12", "Storgatan 3").
416
+ const compoundStreet = /\p{L}{2,}(?:stra(?:ss|ß)e|str\.?|weg|gasse|platz|allee|damm|straat|laan|gracht|gade|gatan|vägen|vej|veien|gata)\s*\d/iu;
417
+ const postBox = /\b(?:p\.?\s*o\.?\s*box|post\s+office\s+box|postfach|apartado|bo[iî]te\s+postale)\s*\d/iu;
418
+ // Street type, then name, then number ("Via Roma 14", "Rue de Rivoli 14"); capitalized so prose such as "via email" is skipped.
419
+ const prefixStreetNumber = /(?<![\p{L}\p{N}])(?:Rue|Avenue|Av|Boulevard|Bd|Chemin|All[ée]e|Impasse|Quai|Place|Via|Viale|Piazza|Corso|Calle|Carrer|Avenida|Plaza|Paseo|Rua|Travessa)\.?(?:\s+\p{L}+\.?){1,5},?\s+(?:n[°ºo]\.?\s*)?\d/u;
420
+ // A numbered road after the house number ("200 Route 66", "100 County Road 12").
421
+ const numberRoute = new RegExp(String.raw `\b${houseNumberPattern}\s+(?:(?:county|state|farm|ranch|forest|township|parish|provincial)\s+)?(?:route|rte|highway|hwy|interstate|road|rd|us|sr|cr|fm)\.?\s+\d`, "iu");
422
+ // A labelled value without a known street type still needs address structure: it opens with a house number and a name
423
+ // ("14 Kungsgatan"), or with a name ending in a capitalized word and then the number ("Kungsgatan 14",
424
+ // "улица Ленина 5"). Text such as "unavailable until 2027" or "unavailable, error 404" has neither.
425
+ const labelledStructure = new RegExp(String.raw `^\s*(?:${houseNumberPattern},?\s+\p{L}{2,}|(?:\p{L}[\p{L}'’-]*\.?,?\s+){0,3}\p{Lu}[\p{L}'’-]*\.?,?\s+(?:no\.?:?\s*)?(?!(?:19|20)\d\d(?![\p{L}\p{N}])|\d{5})${houseNumberPattern}(?![\p{L}\p{N}]))`, "u");
426
+ const streetPatterns = [streetNumber, numberStreet, numberPrefixStreet, compoundStreet, postBox, numberRoute];
427
+ // Status and error placeholders ("404 Not Found", "500 Internal Server Error") have a number and a word but are not addresses.
428
+ const placeholderValue = /(?<![\p{L}\p{N}])(?:not\s+found|error|forbidden|unauthori[sz]ed|bad\s+request|unavailable|internal\s+server|bad\s+gateway|gateway\s+timeout|timed\s+out|moved\s+permanently|too\s+many\s+requests)(?![\p{L}\p{N}])/iu;
429
+ const hasLabelledStructure = (value) => labelledStructure.test(value) && !placeholderValue.test(value);
430
+ // An address label or <address> already marks the text as an address, so lowercase "via roma 14" counts there.
431
+ const anyCasePrefixStreetNumber = new RegExp(prefixStreetNumber.source, "iu");
432
+ return (
433
+ // Inside <address> any house-number-and-name structure counts ("14 Main Crescent"), not only listed street types.
434
+ (inAddressElement && hasLabelledStructure(text)) ||
435
+ (addressValue !== undefined &&
436
+ (hasLabelledStructure(addressValue) ||
437
+ anyCasePrefixStreetNumber.test(addressValue) ||
438
+ streetPatterns.some((pattern) => pattern.test(addressValue)))) ||
439
+ (inAddressElement ? anyCasePrefixStreetNumber : prefixStreetNumber).test(text) ||
440
+ streetPatterns.some((pattern) => pattern.test(text)));
441
+ }
442
+ // Drop the contact details from a line ("14 Main Crescent, Phone: 415-555-0199") but keep its postal text.
443
+ function postalPart(line) {
444
+ return line
445
+ .split(/\s*[,;|·•]\s*/)
446
+ .map((part) => {
447
+ const contact = part.search(contactLine);
448
+ if (contact === -1) {
449
+ return part;
450
+ }
451
+ const before = part.slice(0, contact).trim();
452
+ return /\d/.test(before) ? before : "";
453
+ })
454
+ .filter((part) => part.length > 0)
455
+ .join(", ");
456
+ }
457
+ const subAddressLine = /^\s*(?:(?:suite|ste|unit|apt|apartment|floor|fl|room|rm|building|bldg|kat|daire|blok|etage|stock|piso)(?!\p{L})\.?\s*[\p{L}\p{N}]|#\s*\p{N})/iu;
458
+ function visibleAddressRegions($, body) {
459
+ // Compare against whole visible lines (block elements) that show an address, plus numbered <address> elements,
460
+ // so inline markup cannot split an address and unrelated blocks cannot supply street words.
461
+ const allLines = visibleLines(body);
462
+ // A label alone in its block ("<div>Address:</div><div>14 Main Crescent</div>") labels the next block.
463
+ // Unit lines rendered as their own blocks ("<div>12 Main Street</div><div>Suite 100</div>") continue the address above.
464
+ const continuation = (index) => {
465
+ let end = index + 1;
466
+ while (end < allLines.length && subAddressLine.test(allLines[end])) {
467
+ end += 1;
468
+ }
469
+ return allLines.slice(index, end).join(" ");
470
+ };
471
+ const labelledNextLines = allLines.flatMap((line, index) => index + 1 < allLines.length && /^(?:address|adres|adresse|anschrift|direcci[oó]n|indirizzo)\s*:?$/iu.test(line)
472
+ ? [`${line.replace(/\s*:?$/, "")}: ${continuation(index + 1)}`]
473
+ : []);
474
+ const continuedLines = allLines.map((_, index) => continuation(index)).filter((line, index) => line !== allLines[index]);
475
+ const lines = [...allLines, ...labelledNextLines, ...continuedLines].filter((line) => hasComparableAddress(line));
476
+ // An address broken with <br> ("12 Main Street<br>Suite 100") continues within its innermost block, so add those blocks whole.
477
+ const addressBlocks = body
478
+ .find(blockElements)
479
+ .toArray()
480
+ .filter((element) => $(element).find(blockElements).length === 0)
481
+ .map((element) => visibleLines($(element)))
482
+ .filter((blockLines) => blockLines.length > 1 && blockLines.some((line) => hasComparableAddress(line)))
483
+ .map((blockLines) => blockLines.join(" "));
484
+ const addressElements = body
485
+ .find("address")
486
+ .toArray()
487
+ .map((element) => {
488
+ // <address> often holds contact details too; keep only the postal lines.
489
+ const clone = $(element).clone();
490
+ clone.find("a[href^='tel:' i], a[href^='mailto:' i]").remove();
491
+ return visibleLines(clone)
492
+ .map(postalPart)
493
+ .filter((line) => line.length > 0)
494
+ .join(" ");
495
+ })
496
+ .filter((text) => hasComparableAddress(text, true));
497
+ const labelledPairs = labelValuePairs($, body).filter((text) => hasComparableAddress(text));
498
+ return [...lines, ...addressBlocks, ...addressElements, ...labelledPairs].map(addressTokens);
499
+ }
500
+ const unspacedScript = /[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Thai}\p{Script=Lao}\p{Script=Khmer}\p{Script=Myanmar}]/u;
501
+ function addressWordMatches(word, pageToken) {
502
+ // "#100" is the same unit as "Suite 100", "Unit 100" or "Apt 100", but not as "Room 100" or "Floor 100".
503
+ if ((word === "#" || pageToken === "#") && hashUnitLabels.has(word) && hashUnitLabels.has(pageToken)) {
504
+ return true;
505
+ }
506
+ // Scripts written without spaces (such as CJK) arrive as long runs, so match their words inside page tokens.
507
+ return pageToken === word || (unspacedScript.test(word) && pageToken.includes(word));
508
+ }
509
+ function isHouseNumber(token) {
510
+ // Ordinals such as "5th" are part of a street name, not a house number.
511
+ return /^\d/.test(token) && /^[\x00-\x7f]+$/.test(token) && !/^\d+(?:st|nd|rd|th)$/.test(token);
512
+ }
513
+ // A number after these words names the road ("Highway 66"), not the house.
514
+ const numberedRoadWords = new Set(["highway", "route", "interstate", "freeway", "expressway", "motorway", "us", "sr", "cr", "fm", "rr"]);
515
+ // "County Road 12" and "State Street 5" style designators: a number after road or route here names the road.
516
+ const numberedRoadQualifiers = new Set(["county", "state", "farm", "ranch", "forest", "township", "parish", "provincial"]);
517
+ // Street types written before the name ("Calle 12", "Rue 5"): a number right after them can be the street's name.
518
+ const prefixStreetWords = new Set(["rue", "avenue", "chemin", "impasse", "quai", "via", "viale", "piazza", "corso", "calle", "carrer", "carrera", "plaza", "paseo", "rua", "travessa"]);
519
+ function isRoadNumber(tokens, index, leadingNumber) {
520
+ // After a leading house number ("100 Road 12", "100 Calle 12"), a number after road, route or a prefix street type can only name the street.
521
+ return (numberedRoadWords.has(tokens[index - 1]) ||
522
+ (["road", "route"].includes(tokens[index - 1]) && (leadingNumber || numberedRoadQualifiers.has(tokens[index - 2]))) ||
523
+ (leadingNumber && index === 2 && prefixStreetWords.has(tokens[1])));
524
+ }
525
+ const hashUnitLabels = new Set(["#", "suite", "unit", "apartment"]);
526
+ const subAddressLabels = new Set(["#", "floor", "suite", "room", "unit", "apartment", "building", "kat", "daire", "blok", "etage", "stock", "piso"]);
527
+ function matchesAt(group, region, start) {
528
+ return group.every((token, offset) => addressWordMatches(token, region[start + offset] ?? ""));
529
+ }
530
+ function containsInOrder(rest, region) {
531
+ // A sub-address label and everything after it in the same comma-separated part ("Suite A-1") must appear together,
532
+ // so its identifier cannot be assembled from other numbers on the page. Other parts only need to appear in order.
533
+ const groups = [];
534
+ rest.forEach(({ token, segment }, index) => {
535
+ const previous = rest[index - 1];
536
+ if (!subAddressLabels.has(token) && previous && previous.segment === segment && subAddressLabels.has(groups.at(-1)?.[0] ?? "")) {
537
+ groups.at(-1)?.push(token);
538
+ }
539
+ else {
540
+ groups.push([token]);
541
+ }
542
+ });
543
+ let position = 0;
544
+ return groups.every((group) => {
545
+ while (position + group.length <= region.length && !matchesAt(group, region, position)) {
546
+ position += 1;
547
+ }
548
+ position += group.length;
549
+ return position <= region.length;
550
+ });
551
+ }
552
+ const addressLabelTokens = new Set(["address", "adres", "adresse", "anschrift", "direccion", "dirección", "indirizzo"]);
553
+ // A house number (not a unit number) followed within a few words by a street type starts another street address.
554
+ function isAddressStart(region, index) {
555
+ if (!isHouseNumber(region[index]) || subAddressLabels.has(region[index - 1])) {
556
+ return false;
557
+ }
558
+ // Prefix-style streets ("99 Calle 15", "14 Rue de Rivoli") put the street type right after the number.
559
+ if (prefixStreetWords.has(region[index + 1])) {
560
+ return true;
561
+ }
562
+ for (let offset = index + 1; offset < Math.min(region.length, index + 7); offset += 1) {
563
+ if (streetTypes.has(region[offset])) {
564
+ return true;
565
+ }
566
+ if (isHouseNumber(region[offset])) {
567
+ return false;
568
+ }
569
+ }
570
+ return false;
571
+ }
572
+ function streetAddressVisible(streetAddress, regions) {
573
+ const parts = streetAddress
574
+ .split(/[,;\n]/)
575
+ .flatMap((part, segment) => addressTokens(part).map((token) => ({ token, segment })));
576
+ const tokens = parts.map(({ token }) => token);
577
+ if (tokens.length === 0) {
578
+ return true;
579
+ }
580
+ // Split "12 Main Street, Floor 2" or "Main Street 12, Floor 2" into house number, street words and the rest.
581
+ const leadingNumber = isHouseNumber(tokens[0]);
582
+ const wordsStart = leadingNumber ? 1 : 0;
583
+ let wordsEnd = wordsStart;
584
+ while (wordsEnd < tokens.length &&
585
+ !subAddressLabels.has(tokens[wordsEnd]) &&
586
+ (!isHouseNumber(tokens[wordsEnd]) || (wordsEnd > wordsStart && isRoadNumber(tokens, wordsEnd, leadingNumber)))) {
587
+ wordsEnd += 1;
588
+ }
589
+ const words = tokens.slice(wordsStart, wordsEnd);
590
+ const trailingNumber = !leadingNumber && wordsEnd < tokens.length && isHouseNumber(tokens[wordsEnd]);
591
+ const houseNumber = leadingNumber ? tokens[0] : trailingNumber ? tokens[wordsEnd] : undefined;
592
+ const rest = parts.slice(trailingNumber ? wordsEnd + 1 : wordsEnd);
593
+ return regions.some((region) => {
594
+ // Remaining parts (floor, suite, room) must appear in the same order so their identifiers stay with their labels.
595
+ if (words.length === 0) {
596
+ return containsInOrder(rest, region) && (houseNumber === undefined || region.includes(houseNumber));
597
+ }
598
+ // The street words must appear together and in order, with the house number directly before or after them.
599
+ for (let start = 0; start + words.length <= region.length; start += 1) {
600
+ if (!matchesAt(words, region, start)) {
601
+ continue;
602
+ }
603
+ const end = start + words.length - 1;
604
+ if (houseNumber !== undefined && region[start - 1] !== houseNumber && region[end + 1] !== houseNumber) {
605
+ continue;
606
+ }
607
+ // The rest must belong to this street's address, not to another address on the same line: stop at the next
608
+ // address label or street address, and only look before the street when no other address precedes it.
609
+ const ownStart = leadingNumber && region[start - 1] === houseNumber ? start - 1 : start;
610
+ let label = ownStart - 1;
611
+ while (label >= 0 && !addressLabelTokens.has(region[label])) {
612
+ label -= 1;
613
+ }
614
+ const precededByAddress = region.some((_, index) => index > label && index < ownStart && isAddressStart(region, index));
615
+ const from = precededByAddress ? ownStart : label + 1;
616
+ const next = region.findIndex((token, index) => index > end && (addressLabelTokens.has(token) || (index > end + 1 && isAddressStart(region, index))));
617
+ if (containsInOrder(rest, region.slice(from, next === -1 ? region.length : next))) {
618
+ return true;
619
+ }
620
+ }
621
+ return false;
622
+ });
623
+ }
624
+ function localBusinessNapMismatches($) {
625
+ const nodes = localBusinessNodes($);
626
+ if (nodes.length === 0) {
627
+ return [];
628
+ }
629
+ const index = jsonLdIndex($);
630
+ const body = visibleBody($);
631
+ const regions = visibleAddressRegions($, body);
632
+ const mismatches = [];
633
+ for (const node of nodes) {
634
+ for (const telephone of stringValues(node.telephone)) {
635
+ const country = schemaCountry(node, index) ?? parsePhoneNumberFromString(telephone.trim())?.country;
636
+ const phones = visiblePhones($, body, country);
637
+ if (phones.length === 0) {
638
+ continue;
639
+ }
640
+ const visibleList = phones.map((phone) => phone.display).join(", ");
641
+ const schemaPhone = parsedPhone(telephone, country);
642
+ if (!schemaPhone) {
643
+ // Without a country, a national-format schema number cannot be judged invalid.
644
+ if (country || telephone.trim().startsWith("+")) {
645
+ mismatches.push(`Schema telephone ${telephone.trim()} is not a valid phone number; visible phone numbers: ${visibleList}`);
646
+ }
647
+ }
648
+ else if (!phones.some((phone) => samePhone(phone, schemaPhone))) {
649
+ mismatches.push(`Schema telephone ${telephone.trim()} not found among visible phone numbers: ${visibleList}`);
650
+ }
651
+ }
652
+ if (regions.length > 0) {
653
+ for (const streetAddress of streetAddresses(node, index)) {
654
+ if (!streetAddressVisible(streetAddress, regions)) {
655
+ mismatches.push(`Schema streetAddress "${streetAddress.trim()}" not found in visible page text`);
656
+ }
657
+ }
658
+ }
659
+ }
660
+ return Array.from(new Set(mismatches));
661
+ }
88
662
  function hasOrganizationSchema($) {
89
663
  return hasJsonLdType($, (type) => type === "Organization" || type.endsWith("Organization"));
90
664
  }
@@ -348,6 +922,16 @@ const rules = [
348
922
  check: ({ $ }) => hasLocalBusinessContactFields($),
349
923
  evidence: () => "LocalBusiness schema is missing telephone, address, or openingHours"
350
924
  },
925
+ {
926
+ id: "localbusiness-schema-nap-consistency",
927
+ title: "LocalBusiness structured data does not match the visible phone or address",
928
+ category: "search-basics",
929
+ severity: "medium",
930
+ source: "JSON-LD",
931
+ recommendation: "Make the LocalBusiness schema telephone and streetAddress match the phone number and address shown on the page, so search engines and customers see one consistent listing.",
932
+ check: ({ $ }) => localBusinessNapMismatches($).length === 0,
933
+ evidence: ({ $ }) => localBusinessNapMismatches($).join("; ")
934
+ },
351
935
  {
352
936
  id: "organization-schema-present",
353
937
  title: "Organization structured data is missing",
package/dist/rules.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"rules.js","sourceRoot":"","sources":["../src/rules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../src/rules.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "open-local-audit",
3
- "version": "0.70.0",
3
+ "version": "0.72.0",
4
4
  "description": "Open-source website and local presence auditor for small businesses.",
5
5
  "license": "MIT",
6
6
  "type": "module",