How to add a default taxonomy term to all nodes in a migration?
Well, i don't like it, but this works:

&lt;?php

use Drupal\migrate\Row;
use Drupal\migrate\Plugin\MigrateSourceInterface;
use Drupal\migrate\Plugin\MigrationInterface;

/**
 * Implements hook_migrate_MIGRATION_ID_prepare_row() for upgrade_d7_node_quote.
 */
function portside_upgrade_migrate_upgrade_d7_node_quote_prepare_row(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) {
   $term_name = 'Portside Quotation';
   $term_array = \Drupal::database()-&gt;select('taxonomy_term_field_data', 't')
     -&gt;fields('t', ['tid'])
     -&gt;condition('vid', 'categories')
     -&gt;condition('name', $term_name)
     -&gt;execute()
     -&gt;fetchCol();
   if (isset($term_array[0])) {
     $row-&gt;setSourceProperty('field_categories', [['tid' =&gt; $term_array[0]]]);
   }
}


I create the taxonomy term with default content, so it's there after site install and ready for the migration.

In the migration's YAML file (for upgrade_d7_node_quote), there's simply a plain mapping as if field_categories were a real thing:

  field_categories:
    plugin: iterator
    source: field_categories
    process:
      target_id: tid


And remember, there is no field_categories in the source.  The migration doesn't mind at all and works fine with one inserted into the source in this prepare row hook.