The best way is to use 301 redirects to remove all duplicate content. However, if you do a blanket 301 redirect
from example.net to example.com you're telling the search engines that you are no longer going to use example.net for anything because you are permanently redirecting all content to the .com domain.
If you want to maintain the .net
domain for the content that is not duplicated, then you should use single 301 redirects for all content which belongs on the .com domain.
One method, if you're using Apache is to perform these at the .htaccess
level (so web designers and developers can edit them).
An example directive found in the example.net site would then look like this:
RewriteEngine On
RewriteRule ^(folder/topic-1.*) http://www.example.com/$1 [R=301,L]
RewriteRule ^old-folder/(topic-2.*) http://www.example.com/new-folder/$1 [R=301,L]
If you're not concerned with who has access to what, then you can use RewriteMaps as well. They need to be entered directly into the Virtual Host declarations in the configuration files for the server, but the map can be editable at a level accessible to users with SSH
or FTP
(SFTP is better
) access (outside of the document root).
If you're using dynamic files in a language like PHP, then you can replace the file people are expecting with a 301 redirect in the code:
<?php
header("HTTP/1.1 301 Moved Permanently");
header('Location: http://www.example.com/new-folder/topic-2/');
?>
Redirects in other languages can be found here.