Afbeeldingen & databasemodel (WordPress)
Alle velden bij elkaar
Let op: Deze tabel betreft posts van het type afbeelding zoals gebruikt in WooCommerce-sites met buttonbars: Veel dingen werken anders voor afbeeldingen dan voor meer veelzijdige posts, zoals pagina's.
Database-tabel | Database-(meta)-veld | Naam | SEO | Opmerkingen |
---|---|---|---|---|
wp_posts | ID | Post-ID | Niet van toepassing | Gebruikelijke post-id. Dit is de meest algemene PK in een WordPress-database |
wp_posts | post_content |
|
Lijkt niet te worden gebruikt | Voor afbeeldingen bevat dit veld de beschrijving |
wp_posts | post_title | Title | Factor #3 |
|
wp_posts | post_excerpt | Caption | Lijkt niet te worden gebruikt | Zie schermafdruk |
wp_posts | post_name |
|
Lijkt niet te worden gebruikt |
|
wp_posts | guid |
|
Niet van toepassing |
|
wp_posts | post_type | Post-type | Niet van toepassing | Dit veld heeft voor afbeeldingen altijd de waarde attachment
|
wp_posts | post_mime_type | Mime-type | Niet van toepassing | Can be handy when searching for an object. In this case: image/jpeg
|
wp_meta | _wp_attached_file | File URL | Factor #1 |
|
wp_meta | _wp_attachment_metadata | Attachment metadata | Niet van toepassing | Serialised field met een hoop informatie, waaronder omtrent image-presets. Ik geloof dat ik er zo snel (2022.07) geen informatie in zag, die ik nergens anders kon vinden |
wp_meta | _wp_attachment_image_alt |
|
Factor #2 | Eén-na-belangrijkste veld qua SEO |
-- | -- | Permalink | Niet relevant |
|
Hoe het werkt
Als je een afbeelding upload, worden er direct records aangemaakt in tabellen wp_posts
en wp_postmeta
, ook als je de afbeelding verder nergens toepast (als bv. een WooCommerce-productafbeelding of WooCommerce-gallery-afbeelding):
- Primair: Er wordt een post toegevoegd aan tabel
wp_posts
van het typeattachment
en in dit geval subtypeimage/jpeg
- Secundair: Voor allerlei aanvullende gegevens worden zo'n 5 records aangemaakt in tabel
wp_postmeta
.
wp_posts
select * from wp_posts where post_type = "attachment";
wp_postmeta
select # wp_posts.*, wp_postmeta.* from wp_posts join wp_postmeta on wp_posts.ID = wp_postmeta.post_id where wp_posts.post_type = "attachment";
Voorbeeld: Uploaden van een afbeelding
Als voorbeeld heb ik een afbeelding riverbug.jpeg
geüpload.
Om in één keer alle data te zien (dit geeft een Cartesiaans product, want 1 record in wp_posts
en 5 records in wp_postmeta
):
select * from wp_posts join wp_postmeta on wp_posts.ID = wp_postmeta.post_id where wp_posts.post_title like "River Bug%";
wp_posts
select * from wp_posts where post_type = "attachment" and post_title like "River Bug%";
De belangrijkste velden (denk ik, voor mij, op dit moment):
Veld | Opmerkingen |
---|---|
ID | Gebruikelijke post-id. Dit is de meest algemene PK in een WordPress-database |
post_content | Description - Beschrijving |
post_title | Post-title - Ingewikkelder is het niet |
post_excerpt | Caption - Zie schermafdruk |
post_name | Slug. De afbeelding is op minimaal drie manieren te bereiken:
|
guid | Global Unique IDentifier for feed-readers. Gewoon negeren. Echt waar |
post_type | attachment
|
post_mime_type | Can be handy when searching for an object. In this case: image/jpeg
|
wp_postmeta
Nogmaals: Direct bij uploaden van een afbeelding, worden er al records aangemaakt in tabel wp_postmeta
. Ik vermoed dat dit met backwards compatibility heeft te maken: Tegenwoordig zijn er meer velden relevant dan in de tijd dat dit onderdeel van WordPress was ontworpen. Die nieuwe velden zijn daarom ondergebracht in deze tabel.
Om de relevante zaken boven water te toveren:
select wp_postmeta.* from wp_posts join wp_postmeta on wp_posts.ID = wp_postmeta.post_id where wp_posts.post_title like "River Bug%";
of als je het post_id
weet:
select * from wp_postmeta where post_id = 59303;
Belangrijkste velden:
meta_key | Opmerkingen |
---|---|
_wp_attached_file |
|
_wp_attachment_image_alt | Alt-tekst |
Voorbeeld: Bestandsnaam aanpassen
- Bestandsnamen worden écht bijgehouden in tabel
wp_postmeta
metmeta_key
=_wp_attached_file
- Wil je een andere afbeelding bij een product? Verander dan dit veld - dwz. laat het naar een andere bestand wijzen
Voorbeeld: Bestandsnamen achterhalen:
select ID, post_title, post_name, meta_value from wp_posts join wp_postmeta on wp_posts.ID = wp_postmeta.post_id where post_type = "attachment" and post_mime_type like "image%" and meta_key = "_wp_attached_file" # Not "_wp_attachment_metadata"! order by ID;
Voorbeeld: Thumbnail (2019)
Dit voorbeeld komt uit een ander artikel. Het stamt vermoedelijk uit 2019:
Vantevoren
Thumbnail toevoegen
Afbeeldingen & producten
WooCommerce-producten kennen twee soorten afbeeldingen: De primaire afbeelding, en gallerij-afbeeldingen.
Voorbeeld-code
Gebaseerd op Databasemodel (WordPress)#WooCommerce-producten - Uitgebreide variant en onder de aanname dat de gallery maar één additionele afbeelding bevat:
################################################################################ # Select product data ################################################################################ # select wp_posts.id as post_id, wp_posts.post_title as post_title, wp_posts.post_content as content, wp_postmeta.meta_value as sku, wp_postmeta_03.meta_value as thumbnail_path, wp_postmeta_05.meta_value as second_image_path from wp_posts # First join to wp_postmeta to retrieve sku ############################################################ # left join wp_postmeta on wp_posts.id = wp_postmeta.post_id # Second join to wp_postmeta to retrieve "_thumbnail_id" ############################################################ # # "_thumbnail_id" on its turn, is a wp_postmeta.product_id # left join wp_postmeta as wp_postmeta_02 on wp_postmeta_02.post_id = wp_posts.id and wp_postmeta_02.meta_key = "_thumbnail_id" # Join 03 to wp_postmeta to retrieve thumbnail-path ############################################################ # # This join is different from the two below, as it is a # double join: It retrieves the meta_id for the thumbnail- # attachment # left join wp_postmeta as wp_postmeta_03 on wp_postmeta_03.post_id = wp_postmeta_02.meta_value and wp_postmeta_03.meta_key = "_wp_attached_file" # Join 04 to wp_postmeta: "_product_image_gallery" ############################################################ # # Retrieve the meta_value for "_product_image_gallery": # It is the post_id of everything related to the second # image # left join wp_postmeta as wp_postmeta_04 on wp_postmeta_04.post_id = wp_posts.id and wp_postmeta_04.meta_key = "_product_image_gallery" # Join 05 to wp_postmeta: "_product_image_gallery" ############################################################ # # Retrieve the meta_value for "_product_image_gallery": # It is the post_id of everything related to the second # image # left join wp_postmeta as wp_postmeta_05 on wp_postmeta_05.post_id = wp_postmeta_04.meta_value and wp_postmeta_05.meta_key = "_wp_attached_file" # Where clause ############################################################ # where post_type="product" and post_status="publish" and wp_postmeta.meta_key="_sku" # Limit ############################################################ # limit 0, 10;
Permalinks & slugs
- Ik vermoed dat de structuur om permalinks te vormen wordt opgeslagen, maar dat de eigenlijke permalinks niet worden opgeslagen: Ze worden dynamisch aangemaakt wanneer ze nodig zijn.
- Als je een permalink intikt van een post intikt in een browser, wordt je doorgestuurd naar de bijbehorende slug.
- Voor afbeeldingen lijken er echter geen slugs te bestaan. Je kunt de permalinks dus ook niet aanpassen. Als je de permalink van een afbeelding in een browser opgeeft, wordt je doorgestuurd naar de bijbehorende file URL - Deze kun je standaard niet aanpassen via wp-admin.
De structuur voor permalinks, is opgeslagen in wp_options
:
select * from wp_options where option_name like "perma%"
Uitkomst op een testsite:
option_id option_name option_value _autoload 28 permalink_structure /%postname%/ yes
Dit is hetzelfde wat je ziet onder wp-admin » Settings » Permalinks
Bronnen:
Worden deze velden überhaupt gebruikt?
Worden deze velden überhaupt gebruikt op de site of voor SEO? Goede vraag! Je kunt afbeelding-attributen tot in de puntjes verzorgen, maar als ze niet gebruikt worden, boeit dat weinig. Laten we dit checken voor de gebruikelijke WooCommerce-sites waarmee ik werk, inclusief buttonbars
Bestandsnaam
Bestandsnamen worden geïndexeerd door Google, en je kunt ze op die manier terugvinden:
Voorbeeld:
- Bestandsnaam: https://example.com/wp-content/uploads/2020/05/widget-blub-example.com-sku-ca-12-345-image-02.jpg
- Als ik in Google zoek op widget-blub-example.com-sku-ca-12-345-image-02, vind ik 'm gelijk
- Als ik in Google zoek op widget blub example.com sku ca-12-345 image 02, vind ik 'm gelijk
- Als ik in Google zoek op widget blub example.com image 02, vind ik 'm niet. Ik krijg wel een hoop andere afbeeldingen van de site. Logisch dat het specifieke product niet wordt gevonden, want zonder SKU is deze beschrijving niet uniek
Productpagina
Velden die je zoal terugvindt in deze broncode:
- data-thumb - Custom attribute, waarschijnlijk niet relevant voor SEO [1]
- data-thumb-alt - Custom attribute, waarschijnlijk niet relevant voor SEO [2]
- img » alt
- img » title
- img » data-caption - Custom attribute, waarschijnlijk niet relevant voor SEO [3]
- data-src - Custom attribute, waarschijnlijk niet relevant voor SEO [4]
- data-large_image - Custom attribute, waarschijnlijk niet relevant voor SEO [5]
- srcset - Links to this image in other formats
Conclusie: De volgende velden vind je terug op productpagina's (naast de vanzelfsprekende file url):
- img » alt
- img » title
- srcset.
Buttonbar
Een buttonbar toont de volgende velden (naast de vanzelfsprekende file URL):
- img » alt
- srcset
Shoppagina
Velden die voor een afbeelding in een productblok op een shoppagina worden gebruikt:
- img » alt
- srcset.
Conclusies
De volgende velden worden gebruikt voor SEO, en je moet zelf voor passende inhoud zorgen (itt. tot srcset):
- Bestandsnaam
- img » alt
- img » title.
Alt text
The alt text is stored in table wp_postmeta
:
select ID, post_title, post_name, meta_value, from wp_posts join wp_postmeta on wp_posts.ID = wp_postmeta.post_id where post_type = "attachment" and post_mime_type like "image%" and meta_key = "_wp_attachment_image_alt" order by ID;
Zie ook
- Databasemodel (WordPress)
- SEO & Tekstoptimalisatie
- Slugs & permalinks (WordPress)
- Update-lag (WordPress)