diff --git a/scripts/enhance-seo-pages.mjs b/scripts/enhance-seo-pages.mjs
index 0dc4e1db..2d3ca4f1 100644
--- a/scripts/enhance-seo-pages.mjs
+++ b/scripts/enhance-seo-pages.mjs
@@ -3,14 +3,15 @@ import path from 'path';
import { JSDOM } from 'jsdom';
import { fileURLToPath } from 'url';
import { serializeJsonLd } from './json-ld.mjs';
-import { DEFAULT_SITE_URL, rebaseDefaultOrigin } from './site-origin.mjs';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const DIST_DIR = path.resolve(__dirname, '../dist');
-const SITE_URL = (process.env.SITE_URL || DEFAULT_SITE_URL).replace(/\/+$/, '');
-const BLOG_DIST_DIR = path.join(DIST_DIR, 'blog');
+const SITE_URL = (process.env.SITE_URL || 'https://www.bentopdf.com').replace(
+ /\/+$/,
+ ''
+);
const FALLBACK_SOCIAL_IMAGE = '/images/og-tools.png';
@@ -21,26 +22,6 @@ function listTopLevelHtml() {
.map((f) => path.join(DIST_DIR, f));
}
-// generate-blog.mjs writes the blog index and posts with SITE_URL, but
-// hand-written blog pages (blog/author-alam.html) carry the official origin
-// literally, and generate-i18n-pages.mjs only rewrites top-level pages. Rebase
-// them here so a custom-SITE_URL build passes seo-audit's canonical check.
-function rebaseBlogPages() {
- if (!fs.existsSync(BLOG_DIST_DIR)) return 0;
- let rebased = 0;
- for (const f of fs.readdirSync(BLOG_DIST_DIR)) {
- if (!f.endsWith('.html')) continue;
- const file = path.join(BLOG_DIST_DIR, f);
- const html = fs.readFileSync(file, 'utf-8');
- const out = rebaseDefaultOrigin(html, SITE_URL);
- if (out !== html) {
- fs.writeFileSync(file, out);
- rebased++;
- }
- }
- return rebased;
-}
-
function imageExists(url) {
if (!url) return true;
let pathname;
@@ -178,9 +159,8 @@ function enhance() {
fs.writeFileSync(file, dom.serialize());
dom.window.close();
}
- const rebasedBlogPages = rebaseBlogPages();
console.log(
- `SEO enhance: ${files.length} pages processed, ${faqSchemaCount} FAQPage schemas added, ${rebasedBlogPages} blog pages rebased to ${SITE_URL}.`
+ `SEO enhance: ${files.length} pages processed, ${faqSchemaCount} FAQPage schemas added.`
);
}
diff --git a/scripts/generate-blog.mjs b/scripts/generate-blog.mjs
index 0655135f..2474787e 100644
--- a/scripts/generate-blog.mjs
+++ b/scripts/generate-blog.mjs
@@ -3,14 +3,13 @@ import path from 'path';
import { marked } from 'marked';
import { fileURLToPath } from 'url';
import { serializeJsonLd } from './json-ld.mjs';
-import { DEFAULT_SITE_URL } from './site-origin.mjs';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const POSTS_DIR = path.resolve(__dirname, '../blog/posts');
const BLOG_DIR = path.resolve(__dirname, '../blog');
-const SITE_URL = (process.env.SITE_URL || DEFAULT_SITE_URL).replace(/\/+$/, '');
+const SITE_URL = 'https://www.bentopdf.com';
const AUTHOR = {
name: 'Alam',
url: `${SITE_URL}/blog/author-alam`,
diff --git a/scripts/site-origin.mjs b/scripts/site-origin.mjs
deleted file mode 100644
index ae5e9a5b..00000000
--- a/scripts/site-origin.mjs
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * The public origin the build writes into canonical / og:url / JSON-LD URLs.
- * Self-hosters set SITE_URL at build time; the default is the official site.
- */
-export const DEFAULT_SITE_URL = 'https://www.bentopdf.com';
-
-// The exact authority only: not a longer host (`.com.example`), a port
-// (`:8443`, a different origin) or userinfo (`@other.example`, another host).
-const DEFAULT_ORIGIN_RE = /https:\/\/www\.bentopdf\.com(?![\w.:@-])/g;
-
-/**
- * Rewrites absolute URLs on the default origin to `siteUrl` (no trailing
- * slash). Used for hand-written pages that carry the official origin
- * literally, so a build with a custom SITE_URL emits canonicals on its own
- * host. Other origins are left untouched: look-alike hosts such as
- * `https://www.bentopdf.com.example`, other ports and userinfo URLs.
- */
-export function rebaseDefaultOrigin(html, siteUrl) {
- if (siteUrl === DEFAULT_SITE_URL) return html;
- // A callback keeps `siteUrl` literal: a string replacement would expand
- // `$&`, `$1`, … inside it.
- return html.replace(DEFAULT_ORIGIN_RE, () => siteUrl);
-}
diff --git a/src/tests/site-origin.test.ts b/src/tests/site-origin.test.ts
deleted file mode 100644
index 16a7e4e7..00000000
--- a/src/tests/site-origin.test.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-import { describe, it, expect } from 'vitest';
-import {
- DEFAULT_SITE_URL,
- rebaseDefaultOrigin,
-} from '../../scripts/site-origin.mjs';
-
-const PAGE = `
-
-`;
-
-describe('rebaseDefaultOrigin', () => {
- it('rewrites every default-origin URL to the custom site URL', () => {
- const out = rebaseDefaultOrigin(PAGE, 'https://pdf.example.org');
- expect(out).not.toContain('www.bentopdf.com');
- expect(out).toContain('href="https://pdf.example.org/blog/author-alam"');
- expect(out).toContain(
- 'content="https://pdf.example.org/images/author-alam.jpg"'
- );
- expect(out).toContain('"url":"https://pdf.example.org"');
- expect(out).toContain('https://github.com/alam00000');
- });
-
- it('keeps a subpath site URL intact', () => {
- expect(
- rebaseDefaultOrigin(
- 'href="https://www.bentopdf.com/blog/"',
- 'https://example.org/pdf'
- )
- ).toBe('href="https://example.org/pdf/blog/"');
- });
-
- it('leaves look-alike hosts alone', () => {
- const html =
- 'href="https://www.bentopdf.com.example/x" href="https://www.bentopdf.community/"';
- expect(rebaseDefaultOrigin(html, 'https://pdf.example.org')).toBe(html);
- });
-
- it('leaves other ports and userinfo URLs alone', () => {
- const html =
- 'href="https://www.bentopdf.com:8443/blog/" href="https://www.bentopdf.com@other.example/"';
- expect(rebaseDefaultOrigin(html, 'https://pdf.example.org')).toBe(html);
- });
-
- it('inserts the site URL literally', () => {
- expect(
- rebaseDefaultOrigin(
- 'href="https://www.bentopdf.com/blog/"',
- 'https://example.org/$&'
- )
- ).toBe('href="https://example.org/$&/blog/"');
- });
-
- it('is a no-op for the default site URL', () => {
- expect(rebaseDefaultOrigin(PAGE, DEFAULT_SITE_URL)).toBe(PAGE);
- });
-});