mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-04-08 02:52:39 -05:00
Removed Powered by Ghost clicks in publisher analytics (#19926)
fixes https://linear.app/tryghost/issue/TRI-65/add-powered-by-ghost-badge-tracking - clicks on the "Powered by Ghost" badge were unintentionally surfaced in publisher analytics, under Newsletter Clicks
This commit is contained in:
parent
64122b1dc3
commit
5c4a4e812c
9 changed files with 1406 additions and 60 deletions
|
@ -542,7 +542,7 @@ table.body h2 span {
|
|||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class=\\"footer-powered\\" style=\\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; vertical-align: top; color: #000000; text-align: center; padding-top: 70px; padding-bottom: 40px;\\" valign=\\"top\\" align=\\"center\\"><a href=\\"https://ghost.org/\\" style=\\"color: #FF1A75; text-decoration: none; overflow-wrap: anywhere;\\" target=\\"_blank\\"><img src=\\"https://static.ghost.org/v4.0.0/images/powered.png\\" border=\\"0\\" width=\\"142\\" height=\\"30\\" class=\\"gh-powered\\" alt=\\"Powered by Ghost\\" style=\\"border: none; -ms-interpolation-mode: bicubic; max-width: 100%; width: 142px; height: 30px;\\"></a></td>
|
||||
<td class=\\"footer-powered\\" style=\\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; vertical-align: top; color: #000000; text-align: center; padding-top: 70px; padding-bottom: 40px;\\" valign=\\"top\\" align=\\"center\\"><a href=\\"https://ghost.org/?via=pbg-newsletter\\" style=\\"color: #FF1A75; text-decoration: none; overflow-wrap: anywhere;\\" target=\\"_blank\\"><img src=\\"https://static.ghost.org/v4.0.0/images/powered.png\\" border=\\"0\\" width=\\"142\\" height=\\"30\\" class=\\"gh-powered\\" alt=\\"Powered by Ghost\\" style=\\"border: none; -ms-interpolation-mode: bicubic; max-width: 100%; width: 142px; height: 30px;\\"></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
@ -686,7 +686,7 @@ Ghost © 2024 – Unsubscribe [http://127.0.0.1:2369/unsubscribe/?uuid=example-u
|
|||
|
||||
|
||||
|
||||
https://ghost.org/
|
||||
https://ghost.org/?via=pbg-newsletter
|
||||
|
||||
|
||||
|
||||
|
@ -711,7 +711,7 @@ exports[`Email Preview API Read can read post email preview with email card and
|
|||
Object {
|
||||
"access-control-allow-origin": "http://127.0.0.1:2369",
|
||||
"cache-control": "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0",
|
||||
"content-length": "23490",
|
||||
"content-length": "23528",
|
||||
"content-type": "application/json; charset=utf-8",
|
||||
"content-version": StringMatching /v\\\\d\\+\\\\\\.\\\\d\\+/,
|
||||
"etag": StringMatching /\\(\\?:W\\\\/\\)\\?"\\(\\?:\\[ !#-\\\\x7E\\\\x80-\\\\xFF\\]\\*\\|\\\\r\\\\n\\[\\\\t \\]\\|\\\\\\\\\\.\\)\\*"/,
|
||||
|
@ -1171,7 +1171,7 @@ table.body h2 span {
|
|||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class=\\"footer-powered\\" style=\\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; vertical-align: top; color: #000000; text-align: center; padding-top: 70px; padding-bottom: 40px;\\" valign=\\"top\\" align=\\"center\\"><a href=\\"https://ghost.org/\\" style=\\"color: #FF1A75; text-decoration: none; overflow-wrap: anywhere;\\" target=\\"_blank\\"><img src=\\"https://static.ghost.org/v4.0.0/images/powered.png\\" border=\\"0\\" width=\\"142\\" height=\\"30\\" class=\\"gh-powered\\" alt=\\"Powered by Ghost\\" style=\\"border: none; -ms-interpolation-mode: bicubic; max-width: 100%; width: 142px; height: 30px;\\"></a></td>
|
||||
<td class=\\"footer-powered\\" style=\\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; vertical-align: top; color: #000000; text-align: center; padding-top: 70px; padding-bottom: 40px;\\" valign=\\"top\\" align=\\"center\\"><a href=\\"https://ghost.org/?via=pbg-newsletter\\" style=\\"color: #FF1A75; text-decoration: none; overflow-wrap: anywhere;\\" target=\\"_blank\\"><img src=\\"https://static.ghost.org/v4.0.0/images/powered.png\\" border=\\"0\\" width=\\"142\\" height=\\"30\\" class=\\"gh-powered\\" alt=\\"Powered by Ghost\\" style=\\"border: none; -ms-interpolation-mode: bicubic; max-width: 100%; width: 142px; height: 30px;\\"></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
@ -1331,7 +1331,7 @@ Ghost © 2024 – Unsubscribe [http://127.0.0.1:2369/unsubscribe/?uuid=example-u
|
|||
|
||||
|
||||
|
||||
https://ghost.org/
|
||||
https://ghost.org/?via=pbg-newsletter
|
||||
|
||||
|
||||
|
||||
|
@ -1356,7 +1356,7 @@ exports[`Email Preview API Read can read post email preview with fields 4: [head
|
|||
Object {
|
||||
"access-control-allow-origin": "http://127.0.0.1:2369",
|
||||
"cache-control": "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0",
|
||||
"content-length": "28301",
|
||||
"content-length": "28339",
|
||||
"content-type": "application/json; charset=utf-8",
|
||||
"content-version": StringMatching /v\\\\d\\+\\\\\\.\\\\d\\+/,
|
||||
"etag": StringMatching /\\(\\?:W\\\\/\\)\\?"\\(\\?:\\[ !#-\\\\x7E\\\\x80-\\\\xFF\\]\\*\\|\\\\r\\\\n\\[\\\\t \\]\\|\\\\\\\\\\.\\)\\*"/,
|
||||
|
@ -1843,7 +1843,7 @@ table.body h2 span {
|
|||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class=\\"footer-powered\\" style=\\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; vertical-align: top; color: #000000; text-align: center; padding-top: 70px; padding-bottom: 40px;\\" valign=\\"top\\" align=\\"center\\"><a href=\\"https://ghost.org/\\" style=\\"color: #FF1A75; text-decoration: none; overflow-wrap: anywhere;\\" target=\\"_blank\\"><img src=\\"https://static.ghost.org/v4.0.0/images/powered.png\\" border=\\"0\\" width=\\"142\\" height=\\"30\\" class=\\"gh-powered\\" alt=\\"Powered by Ghost\\" style=\\"border: none; -ms-interpolation-mode: bicubic; max-width: 100%; width: 142px; height: 30px;\\"></a></td>
|
||||
<td class=\\"footer-powered\\" style=\\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; vertical-align: top; color: #000000; text-align: center; padding-top: 70px; padding-bottom: 40px;\\" valign=\\"top\\" align=\\"center\\"><a href=\\"https://ghost.org/?via=pbg-newsletter\\" style=\\"color: #FF1A75; text-decoration: none; overflow-wrap: anywhere;\\" target=\\"_blank\\"><img src=\\"https://static.ghost.org/v4.0.0/images/powered.png\\" border=\\"0\\" width=\\"142\\" height=\\"30\\" class=\\"gh-powered\\" alt=\\"Powered by Ghost\\" style=\\"border: none; -ms-interpolation-mode: bicubic; max-width: 100%; width: 142px; height: 30px;\\"></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
@ -1981,7 +1981,7 @@ Ghost © 2024 – Unsubscribe [http://127.0.0.1:2369/unsubscribe/?uuid=example-u
|
|||
|
||||
|
||||
|
||||
https://ghost.org/
|
||||
https://ghost.org/?via=pbg-newsletter
|
||||
|
||||
|
||||
|
||||
|
@ -2019,7 +2019,7 @@ exports[`Email Preview API Read has custom content transformations for email com
|
|||
Object {
|
||||
"access-control-allow-origin": "http://127.0.0.1:2369",
|
||||
"cache-control": "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0",
|
||||
"content-length": "23244",
|
||||
"content-length": "23282",
|
||||
"content-type": "application/json; charset=utf-8",
|
||||
"content-version": StringMatching /v\\\\d\\+\\\\\\.\\\\d\\+/,
|
||||
"etag": StringMatching /\\(\\?:W\\\\/\\)\\?"\\(\\?:\\[ !#-\\\\x7E\\\\x80-\\\\xFF\\]\\*\\|\\\\r\\\\n\\[\\\\t \\]\\|\\\\\\\\\\.\\)\\*"/,
|
||||
|
@ -2842,7 +2842,7 @@ table.body h2 span {
|
|||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class=\\"footer-powered\\" style=\\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; vertical-align: top; color: #000000; text-align: center; padding-top: 70px; padding-bottom: 40px;\\" valign=\\"top\\" align=\\"center\\"><a href=\\"https://ghost.org/\\" style=\\"color: #FF1A75; text-decoration: none; overflow-wrap: anywhere;\\" target=\\"_blank\\"><img src=\\"https://static.ghost.org/v4.0.0/images/powered.png\\" border=\\"0\\" width=\\"142\\" height=\\"30\\" class=\\"gh-powered\\" alt=\\"Powered by Ghost\\" style=\\"border: none; -ms-interpolation-mode: bicubic; max-width: 100%; width: 142px; height: 30px;\\"></a></td>
|
||||
<td class=\\"footer-powered\\" style=\\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; vertical-align: top; color: #000000; text-align: center; padding-top: 70px; padding-bottom: 40px;\\" valign=\\"top\\" align=\\"center\\"><a href=\\"https://ghost.org/?via=pbg-newsletter\\" style=\\"color: #FF1A75; text-decoration: none; overflow-wrap: anywhere;\\" target=\\"_blank\\"><img src=\\"https://static.ghost.org/v4.0.0/images/powered.png\\" border=\\"0\\" width=\\"142\\" height=\\"30\\" class=\\"gh-powered\\" alt=\\"Powered by Ghost\\" style=\\"border: none; -ms-interpolation-mode: bicubic; max-width: 100%; width: 142px; height: 30px;\\"></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
@ -2987,7 +2987,7 @@ Ghost © 2024 – Unsubscribe [http://127.0.0.1:2369/unsubscribe/?uuid=example-u
|
|||
|
||||
|
||||
|
||||
https://ghost.org/
|
||||
https://ghost.org/?via=pbg-newsletter
|
||||
|
||||
|
||||
|
||||
|
@ -3025,7 +3025,7 @@ exports[`Email Preview API Read uses the newsletter provided through ?newsletter
|
|||
Object {
|
||||
"access-control-allow-origin": "http://127.0.0.1:2369",
|
||||
"cache-control": "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0",
|
||||
"content-length": "24005",
|
||||
"content-length": "24043",
|
||||
"content-type": "application/json; charset=utf-8",
|
||||
"content-version": StringMatching /v\\\\d\\+\\\\\\.\\\\d\\+/,
|
||||
"etag": StringMatching /\\(\\?:W\\\\/\\)\\?"\\(\\?:\\[ !#-\\\\x7E\\\\x80-\\\\xFF\\]\\*\\|\\\\r\\\\n\\[\\\\t \\]\\|\\\\\\\\\\.\\)\\*"/,
|
||||
|
@ -3874,7 +3874,7 @@ table.body h2 span {
|
|||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class=\\"footer-powered\\" style=\\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; vertical-align: top; color: #000000; text-align: center; padding-top: 70px; padding-bottom: 40px;\\" valign=\\"top\\" align=\\"center\\"><a href=\\"https://ghost.org/\\" style=\\"color: #FF1A75; text-decoration: none; overflow-wrap: anywhere;\\" target=\\"_blank\\"><img src=\\"https://static.ghost.org/v4.0.0/images/powered.png\\" border=\\"0\\" width=\\"142\\" height=\\"30\\" class=\\"gh-powered\\" alt=\\"Powered by Ghost\\" style=\\"border: none; -ms-interpolation-mode: bicubic; max-width: 100%; width: 142px; height: 30px;\\"></a></td>
|
||||
<td class=\\"footer-powered\\" style=\\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; vertical-align: top; color: #000000; text-align: center; padding-top: 70px; padding-bottom: 40px;\\" valign=\\"top\\" align=\\"center\\"><a href=\\"https://ghost.org/?via=pbg-newsletter\\" style=\\"color: #FF1A75; text-decoration: none; overflow-wrap: anywhere;\\" target=\\"_blank\\"><img src=\\"https://static.ghost.org/v4.0.0/images/powered.png\\" border=\\"0\\" width=\\"142\\" height=\\"30\\" class=\\"gh-powered\\" alt=\\"Powered by Ghost\\" style=\\"border: none; -ms-interpolation-mode: bicubic; max-width: 100%; width: 142px; height: 30px;\\"></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
@ -4019,7 +4019,7 @@ Ghost © 2024 – Unsubscribe [http://127.0.0.1:2369/unsubscribe/?uuid=example-u
|
|||
|
||||
|
||||
|
||||
https://ghost.org/
|
||||
https://ghost.org/?via=pbg-newsletter
|
||||
|
||||
|
||||
|
||||
|
@ -4057,7 +4057,7 @@ exports[`Email Preview API Read uses the posts newsletter by default 4: [headers
|
|||
Object {
|
||||
"access-control-allow-origin": "http://127.0.0.1:2369",
|
||||
"cache-control": "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0",
|
||||
"content-length": "24005",
|
||||
"content-length": "24043",
|
||||
"content-type": "application/json; charset=utf-8",
|
||||
"content-version": StringMatching /v\\\\d\\+\\\\\\.\\\\d\\+/,
|
||||
"etag": StringMatching /\\(\\?:W\\\\/\\)\\?"\\(\\?:\\[ !#-\\\\x7E\\\\x80-\\\\xFF\\]\\*\\|\\\\r\\\\n\\[\\\\t \\]\\|\\\\\\\\\\.\\)\\*"/,
|
||||
|
|
|
@ -24,10 +24,13 @@ describe('Click Tracking', function () {
|
|||
});
|
||||
|
||||
it('Full test', async function () {
|
||||
const {body: {posts: [draft]}} = await agent.post('/posts/', {
|
||||
const siteUrl = new URL(urlUtils.urlFor('home', true));
|
||||
|
||||
const {body: {posts: [draft]}} = await agent.post('/posts/?source=html', {
|
||||
body: {
|
||||
posts: [{
|
||||
title: 'My Newsletter'
|
||||
title: 'My Newsletter',
|
||||
html: `<p>External link <a href="https://example.com/a">https://example.com/a</a>; Internal link <a href=${siteUrl.href}/about">${siteUrl.href}/about</a>;Ghost homepage <a href="https://ghost.org">https://ghost.org</a></p>`
|
||||
}]
|
||||
}
|
||||
});
|
||||
|
@ -55,10 +58,10 @@ describe('Click Tracking', function () {
|
|||
/** @type {(url: string) => Promise<import('node-fetch').Response>} */
|
||||
const fetchWithoutFollowingRedirect = url => fetch(url, {redirect: 'manual'});
|
||||
|
||||
const siteUrl = new URL(urlUtils.urlFor('home', true));
|
||||
|
||||
let internalRedirectHappened = false;
|
||||
let externalRedirectHappened = false;
|
||||
let poweredByGhostIgnored = true;
|
||||
|
||||
for (const link of links) {
|
||||
const res = await fetchWithoutFollowingRedirect(link.link.from);
|
||||
const redirectedToUrl = new URL(res.headers.get('location'));
|
||||
|
@ -66,7 +69,6 @@ describe('Click Tracking', function () {
|
|||
// startsWith is a little dirty, but we need this because siteUrl
|
||||
// can have a path when Ghost is hosted on a subdomain.
|
||||
const isInternal = redirectedToUrl.href.startsWith(siteUrl.href);
|
||||
|
||||
if (isInternal) {
|
||||
internalRedirectHappened = true;
|
||||
|
||||
|
@ -80,10 +82,16 @@ describe('Click Tracking', function () {
|
|||
}
|
||||
|
||||
assert(redirectedToUrl.searchParams.get('ref'), 'ref should be present on all redirects');
|
||||
|
||||
// Powered by Ghost link should not be replaced / tracked
|
||||
if (link.link.to.includes('https://ghost.org/?via=pbg-newsletter')) {
|
||||
poweredByGhostIgnored = false;
|
||||
}
|
||||
}
|
||||
|
||||
assert(internalRedirectHappened);
|
||||
assert(externalRedirectHappened);
|
||||
assert(poweredByGhostIgnored);
|
||||
|
||||
const {body: {members}} = await agent.get(
|
||||
`/members/`
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -442,7 +442,7 @@ table.body h2 span {
|
|||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class=\\"footer-powered\\" style=\\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; vertical-align: top; color: #000000; text-align: center; padding-top: 70px; padding-bottom: 40px;\\" valign=\\"top\\" align=\\"center\\"><a href=\\"http://127.0.0.1:2369/r/xxxxxx?m=member-uuid\\" style=\\"color: #FF1A75; text-decoration: none; overflow-wrap: anywhere;\\" target=\\"_blank\\"><img src=\\"https://static.ghost.org/v4.0.0/images/powered.png\\" border=\\"0\\" width=\\"142\\" height=\\"30\\" class=\\"gh-powered\\" alt=\\"Powered by Ghost\\" style=\\"border: none; -ms-interpolation-mode: bicubic; max-width: 100%; width: 142px; height: 30px;\\"></a></td>
|
||||
<td class=\\"footer-powered\\" style=\\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; vertical-align: top; color: #000000; text-align: center; padding-top: 70px; padding-bottom: 40px;\\" valign=\\"top\\" align=\\"center\\"><a href=\\"https://ghost.org/?via=pbg-newsletter&ref=127.0.0.1\\" style=\\"color: #FF1A75; text-decoration: none; overflow-wrap: anywhere;\\" target=\\"_blank\\"><img src=\\"https://static.ghost.org/v4.0.0/images/powered.png\\" border=\\"0\\" width=\\"142\\" height=\\"30\\" class=\\"gh-powered\\" alt=\\"Powered by Ghost\\" style=\\"border: none; -ms-interpolation-mode: bicubic; max-width: 100%; width: 142px; height: 30px;\\"></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
@ -569,7 +569,7 @@ Ghost © 2024 – Unsubscribe [http://127.0.0.1:2369/unsubscribe/?uuid=member-uu
|
|||
|
||||
|
||||
|
||||
http://127.0.0.1:2369/r/xxxxxx?m=member-uuid
|
||||
https://ghost.org/?via=pbg-newsletter&ref=127.0.0.1
|
||||
|
||||
|
||||
|
||||
|
@ -1032,7 +1032,7 @@ table.body h2 span {
|
|||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class=\\"footer-powered\\" style=\\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; vertical-align: top; color: #000000; text-align: center; padding-top: 70px; padding-bottom: 40px;\\" valign=\\"top\\" align=\\"center\\"><a href=\\"http://127.0.0.1:2369/r/xxxxxx?m=member-uuid\\" style=\\"color: #FF1A75; text-decoration: none; overflow-wrap: anywhere;\\" target=\\"_blank\\"><img src=\\"https://static.ghost.org/v4.0.0/images/powered.png\\" border=\\"0\\" width=\\"142\\" height=\\"30\\" class=\\"gh-powered\\" alt=\\"Powered by Ghost\\" style=\\"border: none; -ms-interpolation-mode: bicubic; max-width: 100%; width: 142px; height: 30px;\\"></a></td>
|
||||
<td class=\\"footer-powered\\" style=\\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; vertical-align: top; color: #000000; text-align: center; padding-top: 70px; padding-bottom: 40px;\\" valign=\\"top\\" align=\\"center\\"><a href=\\"https://ghost.org/?via=pbg-newsletter&ref=127.0.0.1\\" style=\\"color: #FF1A75; text-decoration: none; overflow-wrap: anywhere;\\" target=\\"_blank\\"><img src=\\"https://static.ghost.org/v4.0.0/images/powered.png\\" border=\\"0\\" width=\\"142\\" height=\\"30\\" class=\\"gh-powered\\" alt=\\"Powered by Ghost\\" style=\\"border: none; -ms-interpolation-mode: bicubic; max-width: 100%; width: 142px; height: 30px;\\"></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
@ -1159,7 +1159,7 @@ Ghost © 2024 – Unsubscribe [http://127.0.0.1:2369/unsubscribe/?uuid=member-uu
|
|||
|
||||
|
||||
|
||||
http://127.0.0.1:2369/r/xxxxxx?m=member-uuid
|
||||
https://ghost.org/?via=pbg-newsletter&ref=127.0.0.1
|
||||
|
||||
|
||||
|
||||
|
@ -1885,7 +1885,7 @@ Ghost: Independent technology for modern publishingBeautiful, modern publishing
|
|||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class=\\"footer-powered\\" style=\\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; vertical-align: top; color: #000000; text-align: center; padding-top: 70px; padding-bottom: 40px;\\" valign=\\"top\\" align=\\"center\\"><a href=\\"http://127.0.0.1:2369/r/xxxxxx?m=member-uuid\\" style=\\"color: #FF1A75; text-decoration: none; overflow-wrap: anywhere;\\" target=\\"_blank\\"><img src=\\"https://static.ghost.org/v4.0.0/images/powered.png\\" border=\\"0\\" width=\\"142\\" height=\\"30\\" class=\\"gh-powered\\" alt=\\"Powered by Ghost\\" style=\\"border: none; -ms-interpolation-mode: bicubic; max-width: 100%; width: 142px; height: 30px;\\"></a></td>
|
||||
<td class=\\"footer-powered\\" style=\\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; vertical-align: top; color: #000000; text-align: center; padding-top: 70px; padding-bottom: 40px;\\" valign=\\"top\\" align=\\"center\\"><a href=\\"https://ghost.org/?via=pbg-newsletter&ref=127.0.0.1\\" style=\\"color: #FF1A75; text-decoration: none; overflow-wrap: anywhere;\\" target=\\"_blank\\"><img src=\\"https://static.ghost.org/v4.0.0/images/powered.png\\" border=\\"0\\" width=\\"142\\" height=\\"30\\" class=\\"gh-powered\\" alt=\\"Powered by Ghost\\" style=\\"border: none; -ms-interpolation-mode: bicubic; max-width: 100%; width: 142px; height: 30px;\\"></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
@ -2282,7 +2282,7 @@ Ghost © 2024 – Unsubscribe [http://127.0.0.1:2369/unsubscribe/?uuid=member-uu
|
|||
|
||||
|
||||
|
||||
http://127.0.0.1:2369/r/xxxxxx?m=member-uuid
|
||||
https://ghost.org/?via=pbg-newsletter&ref=127.0.0.1
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -577,6 +577,11 @@ describe('Batch sending tests', function () {
|
|||
continue;
|
||||
}
|
||||
|
||||
if (href.includes('https://ghost.org/?via=pbg-newsletter')) {
|
||||
assert(!href.includes('?m=' + memberUuid), 'Powererd by Ghost link should not be tracked');
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check if the link is a tracked link
|
||||
assert(href.includes('?m=' + memberUuid), href + ' is not tracked');
|
||||
|
||||
|
|
|
@ -377,6 +377,11 @@ class EmailRenderer {
|
|||
url = this.#outboundLinkTagger.addToUrl(url);
|
||||
}
|
||||
|
||||
// Don't add tracking to the Powered by Ghost badge
|
||||
if (url.hostname === 'ghost.org' && url.pathname === '/' && url.searchParams.get('via') === 'pbg-newsletter') {
|
||||
return url.toString();
|
||||
}
|
||||
|
||||
// Add link click tracking
|
||||
url = await this.#linkTracking.service.addTrackingToUrl(url, post, '--uuid--');
|
||||
|
||||
|
|
|
@ -217,7 +217,7 @@
|
|||
|
||||
{{#if showBadge }}
|
||||
<tr>
|
||||
<td class="footer-powered"><a href="https://ghost.org/"><img src="https://static.ghost.org/v4.0.0/images/powered.png" border="0" width="142" height="30" class="gh-powered" alt="Powered by Ghost"></a></td>
|
||||
<td class="footer-powered"><a href="https://ghost.org/?via=pbg-newsletter"><img src="https://static.ghost.org/v4.0.0/images/powered.png" border="0" width="142" height="30" class="gh-powered" alt="Powered by Ghost"></a></td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
</table>
|
||||
|
|
|
@ -212,7 +212,7 @@
|
|||
|
||||
{{#if showBadge }}
|
||||
<tr>
|
||||
<td class="footer-powered"><a href="https://ghost.org/"><img src="https://static.ghost.org/v4.0.0/images/powered.png" border="0" width="142" height="30" class="gh-powered" alt="Powered by Ghost"></a></td>
|
||||
<td class="footer-powered"><a href="https://ghost.org/?via=pbg-newsletter"><img src="https://static.ghost.org/v4.0.0/images/powered.png" border="0" width="142" height="30" class="gh-powered" alt="Powered by Ghost"></a></td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
</table>
|
||||
|
|
|
@ -1387,7 +1387,7 @@ describe('Email renderer', function () {
|
|||
assert.doesNotMatch(response.html, /is-dark-background/);
|
||||
});
|
||||
|
||||
it('replaces all links except the unsubscribe and feedback links', async function () {
|
||||
it('replaces all links except the unsubscribe, feedback and powered by Ghost links', async function () {
|
||||
const post = createModel(basePost);
|
||||
const newsletter = createModel({
|
||||
header_image: null,
|
||||
|
@ -1424,6 +1424,8 @@ describe('Email renderer', function () {
|
|||
href.should.eql('%%{unsubscribe_url}%%');
|
||||
} else if (href.includes('feedback-link.com')) {
|
||||
href.should.containEql('%%{uuid}%%');
|
||||
} else if (href.includes('https://ghost.org/?via=pbg-newsletter')) {
|
||||
href.should.not.containEql('tracked-link.com');
|
||||
} else {
|
||||
href.should.containEql('tracked-link.com');
|
||||
href.should.containEql('m=%%{uuid}%%');
|
||||
|
@ -1444,7 +1446,7 @@ describe('Email renderer', function () {
|
|||
`http://feedback-link.com/?score=1&uuid=%%{uuid}%%`,
|
||||
`http://feedback-link.com/?score=0&uuid=%%{uuid}%%`,
|
||||
`%%{unsubscribe_url}%%`,
|
||||
`http://tracked-link.com/?m=%%{uuid}%%&url=https%3A%2F%2Fghost.org%2F%3Fsource_tracking%3Dsite`
|
||||
`https://ghost.org/?via=pbg-newsletter&source_tracking=site`
|
||||
]);
|
||||
|
||||
// Check uuid in replacements
|
||||
|
@ -1499,7 +1501,7 @@ describe('Email renderer', function () {
|
|||
'http://feedback-link.com/?score=1&uuid=%%{uuid}%%',
|
||||
'http://feedback-link.com/?score=0&uuid=%%{uuid}%%',
|
||||
'%%{unsubscribe_url}%%',
|
||||
'https://ghost.org/'
|
||||
'https://ghost.org/?via=pbg-newsletter'
|
||||
]);
|
||||
});
|
||||
|
||||
|
@ -1536,6 +1538,8 @@ describe('Email renderer', function () {
|
|||
href.should.eql('%%{unsubscribe_url}%%');
|
||||
} else if (href.includes('feedback-link.com')) {
|
||||
href.should.containEql('%%{uuid}%%');
|
||||
} else if (href.includes('https://ghost.org/?via=pbg-newsletter')) {
|
||||
href.should.not.containEql('tracked-link.com');
|
||||
} else {
|
||||
href.should.containEql('tracked-link.com');
|
||||
href.should.containEql('m=%%{uuid}%%');
|
||||
|
@ -1554,7 +1558,7 @@ describe('Email renderer', function () {
|
|||
`http://feedback-link.com/?score=1&uuid=%%{uuid}%%`,
|
||||
`http://feedback-link.com/?score=0&uuid=%%{uuid}%%`,
|
||||
`%%{unsubscribe_url}%%`,
|
||||
`http://tracked-link.com/?m=%%{uuid}%%&url=https%3A%2F%2Fghost.org%2F%3Fsource_tracking%3Dsite`
|
||||
`https://ghost.org/?via=pbg-newsletter&source_tracking=site`
|
||||
]);
|
||||
|
||||
// Check uuid in replacements
|
||||
|
|
Loading…
Add table
Reference in a new issue