Merge pull request 'update(seo): update seo' (#1) from zelda.update-seo into main

Reviewed-on: #1
This commit is contained in:
zelda 2026-05-14 13:00:41 +10:00
commit c238db17bc
9 changed files with 191 additions and 185 deletions

BIN
.DS_Store vendored

Binary file not shown.

10
.gitignore vendored Normal file
View File

@ -0,0 +1,10 @@
# macOS
.DS_Store
# Editor
.vscode/
# Local-only notes & dev artifacts (not for production)
issues.txt
SITEMAP.md
store-picker-snippet.html

View File

@ -1,152 +0,0 @@
# Prology IT — Site Map
> Base URL: `https://prology.net`
> Landing page repo: `index.html` (single-page, anchor-based navigation)
---
## Pages & Sections
```
prology.net/ ← Homepage (x-default)
├── prology.net/au/ ← AU Store (en-au)
└── prology.net/us/ ← US Store (en-us)
```
### Landing Page Sections (`index.html`)
```
#home Hero
├── Typewriter animation (server/blade chassis visual)
├── eBay banner → ebay.com.au/str/prologyit
├── Search tab: Buy (→ /catalogsearch/result/?q=...)
├── Search tab: Sell (email → opens Valuation Modal)
└── Stats grid: 15+ yrs · 45+ countries · 100k+ units · AU & US
#services Product Categories
├── Routers
├── Switches
├── Wireless Access
├── Security Appliances
├── Load Balancers
├── WAN Access
├── Network Mgmt
└── [Shop CTA] → Store Picker Modal
#quality Why Choose Prology?
├── Dual Warehouse: AU & US
├── Strong Sourcing Network
├── Faster, Smarter Logistics
└── Flexible for Business Orders
#who-we-serve Who We Serve
├── Getting Started
├── Running Projects
├── Growing Operations
├── Large-Scale Procurement
├── [Request a Quote] → Quote Modal
└── [Shop Now] → Store Picker Modal
#institutional Government & Corporate Orders
└── [Enquire Now] → Enquire Modal
#contact Final CTA
├── Source IT Hardware → Store Picker Modal
└── Sell Us Your Assets → Valuation Modal
```
---
## Modals (client-side, no URL change)
| Modal | Trigger | Purpose |
|---|---|---|
| Store Picker | "View Products", "Shop Now" | Choose AU or US store |
| Valuation Modal | "Get Valuation", Sell tab | Asset recovery / buy-back quote |
| Source Modal | (programmatic) | Hardware sourcing RFQ |
| Quote Modal | "Request a Quote" | IT procurement quote |
| Enquire Modal | "Enquire Now" | Gov & Corporate enquiry |
---
## Store Pages
> Categories tồn tại ở cả hai store views — AU và US.
```
prology.net/
├── au/ ← AU Store
│ ├── Products (shared categories)
│ │ ├── compute.html
│ │ ├── storage.html
│ │ ├── networking.html
│ │ ├── security.html
│ │ ├── end-user.html
│ │ ├── data-center.html
│ │ └── components.html
│ │
│ ├── manufacturers
│ │
│ ├── Information
│ │ ├── about-us
│ │ ├── contact
│ │ ├── faq
│ │ └── returns
│ │
│ ├── Customer Account
│ │ ├── customer/account
│ │ ├── sales/order/history
│ │ ├── sales/guest/form ← Track Order (guest)
│ │ └── wishlist
│ │
│ └── Legal
│ ├── terms
│ ├── privacy-policy-cookie-restriction-mode
│ └── enable-cookies
└── us/ ← US Store
├── Products (shared categories)
│ ├── compute.html
│ ├── storage.html
│ ├── networking.html
│ ├── security.html
│ ├── end-user.html
│ ├── data-center.html
│ └── components.html
└── manufacturers
```
---
## External Links
| Destination | Context |
|---|---|
| `ebay.com.au/str/prologyit` | eBay banner (hero) |
| `ebay.com.au/str/prologyptyltd` | Footer social |
| `prology.net/blog` | Footer — News |
| `facebook.com/prology.net/` | Footer social |
| `linkedin.com/company/…` | Footer social |
| `youtube.com/@PrologyPtyLtd` | Footer social |
---
## Assets / Tech Stack
```
assets/
├── css/styles.css
├── js/
│ ├── config.js ← PROLOGY_CONFIG (URLs, keys)
│ ├── hero.js ← Typewriter, scroll, reveal animations
│ ├── modals.js ← Web Components for all modals
│ ├── footer.js ← Dynamic footer from data-footer.json
│ └── chat.js ← Support chat widget
├── data-footer.json ← Footer content (addresses, links, payment icons)
├── Prology_logo.png
├── Banner_Ebay_Final_news-min.png
└── images/icons/
├── payment/ ← PayPal, Visa, Mastercard, Amex, Afterpay
└── shipping/ ← DHL, UPS, FedEx, TNT, Couriers Please, Startrack, AusPost, Sendle
```

View File

@ -1,3 +1,12 @@
/* ===== A11Y / SEO UTILITY ===== */
.sr-only {
position: absolute !important;
width: 1px !important; height: 1px !important;
padding: 0 !important; margin: -1px !important;
overflow: hidden !important; clip: rect(0,0,0,0) !important;
white-space: nowrap !important; border: 0 !important;
}
/* ===== MAGENTO CMS RESET ===== */
body { background:#0B1120 !important; margin:0 !important; padding:0 !important; }
.page-wrapper, .page-main, main, .columns, .column.main,
@ -3298,7 +3307,8 @@ body::before {
flex-direction: column;
gap: 2px;
}
.ns-footer__col li a {
.ns-footer__col li a,
.ns-footer__col li .ns-footer__category {
font-size: 0.83rem;
color: rgba(255, 255, 255, 0.6);
text-decoration: none;
@ -3306,7 +3316,14 @@ body::before {
display: block;
transition: color 0.18s ease;
}
.ns-footer__col li a:hover { color: #ffffff; }
.ns-footer__col li .ns-footer__category { cursor: pointer; }
.ns-footer__col li a:hover,
.ns-footer__col li .ns-footer__category:hover { color: #ffffff; }
.ns-footer__col li .ns-footer__category:focus-visible {
outline: 2px solid rgba(255, 255, 255, 0.4);
outline-offset: 2px;
color: #ffffff;
}
/* ── FOOTER PARTNERS: payment + shipping logos ── */
.ns-footer__partners {
@ -3384,13 +3401,18 @@ body::before {
margin: 0;
padding: 0;
}
.ns-footer__bottom-links a {
.ns-footer__bottom-links a,
.ns-footer__bottom-links .ns-footer__category {
font-size: 0.75rem;
color: rgba(255, 255, 255, 0.35);
text-decoration: none;
transition: color 0.18s ease;
display: inline;
padding: 0;
}
.ns-footer__bottom-links a:hover { color: rgba(255, 255, 255, 0.7); }
.ns-footer__bottom-links .ns-footer__category { cursor: pointer; }
.ns-footer__bottom-links a:hover,
.ns-footer__bottom-links .ns-footer__category:hover { color: rgba(255, 255, 255, 0.7); }
/* Social icons */
.ns-footer__social {

View File

@ -22,14 +22,16 @@ window.PROLOGY_CONFIG = {
FOOTER_BASE_URL: "https://prology.net/au/",
FOOTER_STATIC_URL: "assets/",
FOOTER_LOGO_URL: "assets/Prology_logo.png",
// Rendered as <span> buttons that open the store-picker modal.
// After picking a store, user is redirected to {STORE_URL}/{slug}.
FOOTER_CATEGORIES: [
{ label: "Compute", url: "compute" },
{ label: "Storage", url: "storage" },
{ label: "Networking", url: "networking" },
{ label: "Security", url: "security" },
{ label: "End User", url: "end-user" },
{ label: "Data Center", url: "data-center" },
{ label: "Components", url: "components" },
{ label: "Compute", slug: "compute" },
{ label: "Storage", slug: "storage" },
{ label: "Networking", slug: "networking" },
{ label: "Security", slug: "security" },
{ label: "End User", slug: "end-user" },
{ label: "Data Center", slug: "data-center" },
{ label: "Components", slug: "components" },
],
FOOTER_LEGAL_LINKS: [
{ label: "Privacy Policy", url: "privacy-policy-cookie-restriction-mode" },

View File

@ -20,6 +20,7 @@
const linkUrl = (item) => {
const url = item.url || "";
if (item.external || /^https?:\/\//i.test(url)) return url;
if (url.startsWith("/")) return url;
const trimmed = url.replace(/^\/+/, "");
const suffix = /\.[a-z0-9]+$/i.test(trimmed) ? "" : "/";
return CFG.FOOTER_BASE_URL + trimmed + suffix;
@ -65,7 +66,7 @@
return `
<div class="ns-footer__brand">
<a class="ns-footer__logo" href="${escape(CFG.FOOTER_BASE_URL)}" aria-label="Home">
<img src="${escape(CFG.FOOTER_LOGO_URL)}" alt="" width="170" height="35" loading="lazy">
<img src="${escape(CFG.FOOTER_LOGO_URL)}" alt="Prology" width="170" height="35" loading="lazy">
</a>
<p class="ns-footer__company ns-footer__company--top">${escape(data.company_name || "")}</p>
${addressBlocks}
@ -73,14 +74,23 @@
</div>`;
};
// Internal items render as <span> that opens the store picker — the picked
// store then redirects to {STORE_URL}/{slug-or-url}. External items render
// as a regular <a target="_blank">.
const renderLinkInner = (item) => {
const label = escape(item.label);
const url = item.url || "";
if (item.external || /^https?:\/\//i.test(url)) {
return `<a href="${escape(linkUrl(item))}" target="_blank" rel="noopener">${label}</a>`;
}
const slug = escape(item.slug || url || "");
const call = `openStoreModal('${slug}')`;
return `<span class="ns-footer__category" role="button" tabindex="0" onclick="${call}" onkeydown="if(event.key==='Enter'||event.key===' '){event.preventDefault();${call};}">${label}</span>`;
};
const renderCol = (title, items) => {
if (!items || !items.length) return "";
const lis = items
.map(
(it) =>
`<li><a href="${escape(linkUrl(it))}"${it.external ? ' target="_blank" rel="noopener"' : ""}>${escape(it.label)}</a></li>`,
)
.join("");
const lis = items.map((it) => `<li>${renderLinkInner(it)}</li>`).join("");
return `<nav class="ns-footer__col" aria-label="${escape(title)}">
<h3 class="ns-footer__col-title">${escape(title)}</h3>
<ul>${lis}</ul>
@ -133,9 +143,7 @@
<div class="ns-footer__bottom">
<p class="ns-footer__copyright">${escape(CFG.FOOTER_COPYRIGHT)}</p>
<nav class="ns-footer__bottom-links" aria-label="Legal">
${CFG.FOOTER_LEGAL_LINKS.map(
(l) => `<a href="${escape(linkUrl(l))}">${escape(l.label)}</a>`,
).join("")}
${CFG.FOOTER_LEGAL_LINKS.map(renderLinkInner).join("")}
</nav>
<div class="ns-footer__social" aria-label="Follow us">
${renderSocial(data.social)}

View File

@ -91,6 +91,7 @@ document.addEventListener("DOMContentLoaded", () => {
const brandImg = document.createElement("img");
brandImg.src = window.PROLOGY_CONFIG.LOGO_SRC;
brandImg.alt = "Prology";
brandImg.style.height = "80px";
brandImg.style.width = "auto";
brandImg.style.filter = "none"; // Logo full màu

View File

@ -477,7 +477,27 @@
document.getElementById("wc-enquire-modal").open();
// ── Store picker modal ──
window.openStoreModal = function () {
const cfg = window.PROLOGY_CONFIG || {};
// Builds a store URL, optionally appending a category slug.
// e.g. ("https://prology.net/au", "compute") → "https://prology.net/au/compute"
const buildStoreUrl = (base, slug) => {
if (!base) return "";
const trimmed = base.replace(/\/+$/, "");
return slug ? `${trimmed}/${slug}` : base;
};
const applyStoreHrefs = (slug) => {
document.querySelectorAll('[data-store="au"]').forEach((el) => {
el.setAttribute("href", buildStoreUrl(cfg.STORE_AU_URL, slug));
});
document.querySelectorAll('[data-store="us"]').forEach((el) => {
el.setAttribute("href", buildStoreUrl(cfg.STORE_US_URL, slug));
});
};
window.openStoreModal = function (categorySlug) {
applyStoreHrefs(categorySlug || "");
const overlay = document.getElementById("store-modal-overlay");
if (overlay) overlay.classList.add("open");
};
@ -494,14 +514,8 @@
if (e.key === "Escape") closeStoreModal();
});
// Wire store picker links from config
const cfg = window.PROLOGY_CONFIG || {};
document.querySelectorAll('[data-store="au"]').forEach((el) => {
if (cfg.STORE_AU_URL) el.setAttribute("href", cfg.STORE_AU_URL);
});
document.querySelectorAll('[data-store="us"]').forEach((el) => {
if (cfg.STORE_US_URL) el.setAttribute("href", cfg.STORE_US_URL);
});
// Initial wire-up (no category)
applyStoreHrefs("");
// Intercept any /shop link → open store picker instead
document.addEventListener("click", function (e) {

View File

@ -3,7 +3,48 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Prology IT | Enterprise Network Infrastructure Brokerage</title>
<title>Prology | Enterprise Network Infrastructure Brokerage</title>
<meta
name="description"
content="Prology — enterprise network hardware brokerage. Source Cisco, HP and other hard-to-find networking equipment across Australia and the United States. 15+ years experience, 100k+ units in stock."
/>
<meta name="robots" content="index,follow" />
<link rel="canonical" href="https://prology.net/" />
<!-- Open Graph -->
<meta property="og:type" content="website" />
<meta property="og:site_name" content="Prology" />
<meta property="og:url" content="https://prology.net/" />
<meta
property="og:title"
content="Prology | Enterprise Network Infrastructure Brokerage"
/>
<meta
property="og:description"
content="Source Cisco, HP and hard-to-find enterprise network hardware across Australia and the United States. 15+ years experience, 100k+ units in stock."
/>
<meta
property="og:image"
content="https://prology.net/assets/Prology_logo.png"
/>
<meta property="og:locale" content="en_AU" />
<meta property="og:locale:alternate" content="en_US" />
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image" />
<meta
name="twitter:title"
content="Prology | Enterprise Network Infrastructure Brokerage"
/>
<meta
name="twitter:description"
content="Source Cisco, HP and hard-to-find enterprise network hardware across Australia and the United States."
/>
<meta
name="twitter:image"
content="https://prology.net/assets/Prology_logo.png"
/>
<link rel="stylesheet" href="assets/css/styles.css" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
@ -14,6 +55,60 @@
href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap"
rel="stylesheet"
/>
<!-- JSON-LD: Organization -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Prology",
"legalName": "Prology Pty Ltd",
"url": "https://prology.net/",
"logo": "https://prology.net/assets/Prology_logo.png",
"description": "Enterprise network infrastructure brokerage sourcing Cisco, HP and other hard-to-find networking hardware across Australia and the United States.",
"sameAs": [
"https://www.facebook.com/prology.net/",
"https://www.ebay.com.au/str/prologyptyltd",
"https://www.youtube.com/@PrologyPtyLtd"
],
"address": [
{
"@type": "PostalAddress",
"streetAddress": "Unit 8/4A Bachell Ave",
"addressLocality": "Lidcombe",
"addressRegion": "NSW",
"postalCode": "2141",
"addressCountry": "AU"
},
{
"@type": "PostalAddress",
"streetAddress": "17150 Newhope St Ste 308",
"addressLocality": "Fountain Valley",
"addressRegion": "CA",
"postalCode": "92708",
"addressCountry": "US"
}
],
"contactPoint": [
{
"@type": "ContactPoint",
"telephone": "+61-2-8061-6886",
"contactType": "sales",
"areaServed": "AU",
"availableLanguage": "English",
"email": "sales@prology.net"
},
{
"@type": "ContactPoint",
"telephone": "+1-4689-3350",
"contactType": "sales",
"areaServed": "US",
"availableLanguage": "English",
"email": "sales@prology.net"
}
]
}
</script>
</head>
<body>
@ -27,7 +122,7 @@
<nav class="navbar">
<div class="nav-content">
<a href="#" class="nav-brand">
<img src="assets/Prology_logo.png" alt="Prology IT" />
<img src="assets/Prology_logo.png" alt="Prology.net" />
</a>
<ul class="nav-links">
<li><a href="#home">Home</a></li>
@ -73,6 +168,10 @@
<!-- ============ HERO & DASHBOARD ============ -->
<section class="section hero" id="home">
<div class="container">
<h1 class="sr-only">
Enterprise Network Hardware Brokerage — Cisco, HP & Hard-to-Find IT
Equipment
</h1>
<div class="hero-animation-wrapper">
<div class="switch-panel-scene">
<div class="server-only-focus">
@ -539,7 +638,9 @@
<div class="mini-card cta-card">
<h4>Ready to Procure?</h4>
<p>Access our real-time inventory and competitive trade pricing.</p>
<span class="btn-shop-mini" onclick="openStoreModal()">View Shop</span>
<span class="btn-shop-mini" onclick="openStoreModal()"
>View Shop</span
>
</div>
</div>
</div>