Changeset 013e16c in Klonkt for src/routes/admin-seo.js


Ignore:
Timestamp:
08/13/2026 01:09:24 PM (4 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
f50a84b
Parents:
f59a46c
git-author:
Robin <roboburr@…> (08/13/2026 01:01:18 PM)
git-committer:
Robin <roboburr@…> (08/13/2026 01:09:24 PM)
Message:

Naar SEO & social, want sameAs is schema.org (Robins vraag)

Hij vroeg of het niet onder SEO en social hoort, "omdat het ook een soort
koppeling is". Dat is het, en sterker dan dat: op die pagina staat een blok
"Uitgever (JSON-LD / rich results)", en sameAs IS een schema.org-eigenschap.
Zelfde vocabulaire, zelfde plek. Het paneel staat nu direct onder Uitgever.

DAARDOOR VOEDT EEN KOPPELING NU TWEE UITGANGEN. Naast schema:sameAs op de
fediverse-actor komt hij in de JSON-LD van de pagina zelf, in _publisher. Dat
is hetzelfde feit, verteld aan de andere lezer -- en het was gratis, want het
blok stond er al.

BETERE LABELS, want de oude waren geschreven voor het audioscherm. "Ben jij dit
in MusicBrainz?" werd "MusicBrainz (dezelfde artiest elders)" als legenda, met
een hint die zegt wat het OPLEVERT in plaats van alleen wat het is: je komt als
sameAs in de JSON-LD en in je fediverse-profiel, en er verandert niets bij
MusicBrainz zelf. Dat laatste is de geruststelling die er hoort te staan. Plus
een veldlabel ("Zoek jezelf op") met de toelichting "de naam waaronder je muziek
uitbrengt" -- want dat is de vraag, niet je sitenaam. Drie talen.

Het zoekveld begint nu op publisher_name en valt terug op de sitetitel: op deze
pagina heb je die naam net ingevuld.

Meeverhuisd: het endpoint (/admin/seo/api/musicbrainz) en het clientblok, in een
nieuwe mod/admin-seo.js. Die pagina had nog geen JavaScript; opzoeken vraagt er
wel om. Het profielscherm is weer helemaal schoon.

Co-Authored-By: Claude Opus 5 <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/routes/admin-seo.js

    rf59a46c r013e16c  
    1919import { requireGod } from '../middleware/auth.js';
    2020import { getPrimarySite } from '../middleware/site.js';
     21import { isMbid } from '../services/ap-core.js';
     22import MusicBrainz from '../services/MusicBrainzService.js';
    2123
    2224const router = express.Router();
     
    3739  renderPage(req, res, 'pages/admin-seo', {
    3840    pageTitleKey: 'admin.t_seo',
     41    pageJs: 'admin-seo',
    3942    bodyClass: 'on-admin',
    4043    site,
     
    4245    error: req.query.error || null,
    4346  });
     47});
     48
     49/**
     50 * "Zoek jezelf op" -- kandidaten uit MusicBrainz (shaer-mbz).
     51 *
     52 * De zoekopdracht draait HIER en niet in de browser: MusicBrainz staat een
     53 * verzoek per seconde toe per APPLICATIE, en dat is alleen af te dwingen als
     54 * alles langs een plek gaat. Bovendien eisen ze een User-Agent met contact, en
     55 * die kan een browser niet zetten.
     56 *
     57 * Wij kiezen NIET. Ook niet als er precies een treffer is: een verkeerd geraden
     58 * MBID zet jouw naam onder andermans werk.
     59 */
     60router.get('/api/musicbrainz', requireGod, async (req, res) => {
     61  const site = getPrimarySite(req);
     62  const q = String(req.query.q || (site && (site.publisher_name || site.title)) || '').trim();
     63  if (!q) return res.json({ ok: true, q: '', kandidaten: [] });
     64  res.json({ ok: true, q, kandidaten: await MusicBrainz.zoekArtiesten(q) });
    4465});
    4566
     
    7293      publisher_url = ?,
    7394      publisher_logo = ?,
     95      mb_artist_id = ?, mb_artist_name = ?,
    7496      updated_at = CURRENT_TIMESTAMP
    7597    WHERE id = ?
     98  // De MusicBrainz-koppeling (shaer-mbz). Alleen een echte MBID komt de kolom
     99  // in: zonder deze zeef sluipt er een URL of een handle in het veld dat naar
     100  // buiten gaat, en het gaat naar TWEE uitgangen -- de JSON-LD en de actor.
     101  // Leeg is een geldige keuze; dat is ontkoppelen.
     102  const mbRuw = String(f.mb_artist_id || '').trim().toLowerCase();
     103  const mbArtistId = isMbid(mbRuw) ? mbRuw : null;
     104
    76105  `).run(
    77106    f.robots_index ? 1 : 0,
     
    93122    trimOrNull(f.publisher_url, 200),
    94123    trimOrNull(f.publisher_logo, 500),
     124    mbArtistId,
     125    mbArtistId ? (String(f.mb_artist_name || '').trim().slice(0, 200) || null) : null,
    95126    primary.id,
    96127  );
Note: See TracChangeset for help on using the changeset viewer.